1.koa2路由安装

    1. npm install koa-router

    2.引入路由模块

    1. const router = require('koa-router')();

    2.挂载路由实例

    1. app.use(router.routes());
    2. app.use(router.allowedMethods());

    3.编写路由

    1. router.get('/ziye', function (ctx, next) {
    2. ctx.body="Hello ziye";
    3. });

    4.完整案例

    1. const Koa = require('koa');
    2. const router = require('koa-router')(); //在koa2引入之后,因为koa2要使用
    3. const app = new Koa();
    4. //常用请求动作
    5. //get方式
    6. router.get('/mians/:id', function (ctx, next) { //路由编写在挂载路由之前
    7. ctx.body="Hello koa";
    8. });
    9. //post方式
    10. router.post('/mians', function (ctx, next) {
    11. ctx.body="Hello koa";
    12. });
    13. app.use(router.routes()); //路由挂载
    14. app.use(router.allowedMethods());
    15. app.listen(3000);

    5.router.get()中的请求上下文ctx,跟他原来ctx的基本一致,只是做了一层封装更加友好和使用方便

    6.在学习上下文ctx的时候,没有发现可以接收post的对象,get用了ctx.query,可以接收到并方便处理,但是post没有,为此借用一个别人写好的post处理模块或者原生node.req处理,我这里选择前者。

    7.安装koa-bodyparser 一个post接收模块

    1. npm install koa-bodyparser

    8.引入模块

    1. var postbody = require('koa-bodyparser');

    9.挂载接收

    1. app.use(postbody());

    10.完整案例

    1. const Koa = require('koa');
    2. const router = require('koa-router')();
    3. const postbody = require('koa-bodyparser'); //引入,注意位置
    4. const app = new Koa();
    5. app.use(postbody()); //实例后立即挂载
    6. //post方式
    7. router.post('/mians', function (ctx, next) {
    8. ctx.body=ctx.request.body; //在ctx.request.body中拿到post的数据,不能用ctx.body.试过了
    9. });
    10. app.use(router.routes()); //路由挂载
    11. app.use(router.allowedMethods());
    12. app.listen(3000);

    11.到此已经解决了常用的数据之间的交互,确实是拿到了数据,但是一些资源访问在未设置之前koa2是不能访问的,好比你已经知道了你女朋友的图片是保存在一个叫www.fehome.wang/public/girl.png,但是你复制这个链接,往浏览器地址栏访问,却发现访问不了,而事实上确实是girl.png存在的,所以要解决这个问题。

    12.安装 koa-static 解析静态资源的模块

    1. npm install koa-static

    13.引入模块

    1. const static = require('koa-static');

    14.挂载模块并解析

    1. app.use(static('./public'))
    2. //这种挂载会直接将域名作为根,相当于将public文件夹作为根地址访问
    3. //所以要按如下方式才能访问到public里面的girl.png
    4. //http://localhost:3000/girl.png
    5. //但是很多时候需要区分文件地址或者说路由,上面的那种方式很明显存在一些不好的地方,
    6. //访问资源路径的文件安排和拓展都不很好
    7. //推荐如下方式:public为资源文件夹名
    8. app.use(static( __dirname,'./public'))
    9. //按如下方式访问
    10. //http://localhost:3000/public/girl.png
    11. //和明显推荐的方式优
    12. //比如在添加一个文件夹logoM,再挂载一次
    13. app.use(static( __dirname,'./logo'))
    14. //按如下方式访问
    15. //http://localhost:3000/logo/girl.png
    16. //两次挂载都能存在,解决区分文件夹问题

    15.完整案例

    1. const Koa = require('koa');
    2. const router = require('koa-router')();
    3. const postbody = require('koa-bodyparser');
    4. const static = require('koa-static');
    5. const app = new Koa();
    6. app.use(postbody());
    7. app.use(static( __dirname,'./public'))
    8. app.use(static( __dirname,'./logo'))
    9. app.use(static('./public'))
    10. app.listen(3000);