1.koa2路由安装
npm install koa-router
2.引入路由模块
const router = require('koa-router')();
2.挂载路由实例
app.use(router.routes());
app.use(router.allowedMethods());
3.编写路由
router.get('/ziye', function (ctx, next) {
ctx.body="Hello ziye";
});
4.完整案例
const Koa = require('koa');
const router = require('koa-router')(); //在koa2引入之后,因为koa2要使用
const app = new Koa();
//常用请求动作
//get方式
router.get('/mians/:id', function (ctx, next) { //路由编写在挂载路由之前
ctx.body="Hello koa";
});
//post方式
router.post('/mians', function (ctx, next) {
ctx.body="Hello koa";
});
app.use(router.routes()); //路由挂载
app.use(router.allowedMethods());
app.listen(3000);
5.router.get()中的请求上下文ctx,跟他原来ctx的基本一致,只是做了一层封装更加友好和使用方便
6.在学习上下文ctx的时候,没有发现可以接收post的对象,get用了ctx.query,可以接收到并方便处理,但是post没有,为此借用一个别人写好的post处理模块或者原生node.req处理,我这里选择前者。
7.安装koa-bodyparser 一个post接收模块
npm install koa-bodyparser
8.引入模块
var postbody = require('koa-bodyparser');
9.挂载接收
app.use(postbody());
10.完整案例
const Koa = require('koa');
const router = require('koa-router')();
const postbody = require('koa-bodyparser'); //引入,注意位置
const app = new Koa();
app.use(postbody()); //实例后立即挂载
//post方式
router.post('/mians', function (ctx, next) {
ctx.body=ctx.request.body; //在ctx.request.body中拿到post的数据,不能用ctx.body.试过了
});
app.use(router.routes()); //路由挂载
app.use(router.allowedMethods());
app.listen(3000);
11.到此已经解决了常用的数据之间的交互,确实是拿到了数据,但是一些资源访问在未设置之前koa2是不能访问的,好比你已经知道了你女朋友的图片是保存在一个叫www.fehome.wang/public/girl.png,但是你复制这个链接,往浏览器地址栏访问,却发现访问不了,而事实上确实是girl.png存在的,所以要解决这个问题。
12.安装 koa-static 解析静态资源的模块
npm install koa-static
13.引入模块
const static = require('koa-static');
14.挂载模块并解析
app.use(static('./public'))
//这种挂载会直接将域名作为根,相当于将public文件夹作为根地址访问
//所以要按如下方式才能访问到public里面的girl.png
//http://localhost:3000/girl.png
//但是很多时候需要区分文件地址或者说路由,上面的那种方式很明显存在一些不好的地方,
//访问资源路径的文件安排和拓展都不很好
//推荐如下方式:public为资源文件夹名
app.use(static( __dirname,'./public'))
//按如下方式访问
//http://localhost:3000/public/girl.png
//和明显推荐的方式优
//比如在添加一个文件夹logoM,再挂载一次
app.use(static( __dirname,'./logo'))
//按如下方式访问
//http://localhost:3000/logo/girl.png
//两次挂载都能存在,解决区分文件夹问题
15.完整案例
const Koa = require('koa');
const router = require('koa-router')();
const postbody = require('koa-bodyparser');
const static = require('koa-static');
const app = new Koa();
app.use(postbody());
app.use(static( __dirname,'./public'))
app.use(static( __dirname,'./logo'))
app.use(static('./public'))
app.listen(3000);