koa-router,模块化

1.koa-router模块

  1. 初始化
    npm init
  2. 安装模块
npm i -S koa
npm i -S koa-router
复制代码
  1. 引入
const Koa = require("koa");
const Router = require("koa-router")
复制代码

注意点: 相似Koa和Router等首字母大写的,表示是一个类,须要new来实例化html

demo1npm

//引入模块
const Koa = require("koa");
const Router = require("koa-router");
//实例化
const koa = new Koa();
const router = new Router(); 

//对get请求作处理   限定必须是根路由
router.get("/", async (ctx, next) => {
    //中间件1
    console.log("接收-1");
    await next();
    console.log("响应-1");

}, async (ctx, next) => {
    //中间件2
    console.log("接收-2");
    await next();
    console.log("响应-2");
}, async (ctx, next) => {
    //中间件3
    console.log("接收-3");
    await next();
    console.log("响应-3");
}); 
//接下面的代码
复制代码

此处插入说明:在学习koa模块时,是用koa.ues()注册中间件的。当使用koa-router模块时,上面整个route.get()做为一个中间件,以如下的方式注册:跨域

//接上面的代码
koa.use(router.routes())
    .use(router.allowedMethods())
    .listen(3000, () => {
        console.log("开始监听3000端口");
    });
复制代码

运行文件,请求效果: bash

demo2cors

const Koa = require("koa");
const Router = require("koa-router");
const koa = new Koa();
const router = new Router(); 
//中间件1
router.get("/",async (ctx)=>{
    ctx.body = "从根路由过来的请求"
});
//中间件2
router.get("/html",async (ctx)=>{
    ctx.body = "从html过来的请求"
});
//中间件3
router.get("/sjl",async (ctx)=>{
    ctx.body = "从sjl过来的请求"
});
//注册监听
koa.use(router.routes())
    .use(router.allowedMethods())
    .listen(3000, () => {
        console.log("开始监听3000端口");
    });
复制代码

效果: koa


2. 模块化开发

从上述例子发现,全部的模块都写在同一个文件里,这样是不稳当的。模块化开发根据不用的功能放在不用的文件中。例如流水线,每个工人负责不用的功能。async

简单模块化案例
建立三个文件: main.js,router.js,dispose.js模块化

1.第一个文件main.jspost

//main.js做为入口文件
const Koa = require("koa");
const router = require("./router"); //导入router.js

const koa = new Koa();

koa.use(router.routes())
    .use(router.allowedMethods())
    .listen(3000, () => {
        console.log("开始监听3000端口");
    });
复制代码
  1. 第二个文件router.js
//router.js做为路由功能的文件
const Router = require("koa-router");
const dispose = require("./dispose");

const router = new Router();

router.get("/", dispose.root);
router.get("/demo", dispose.demo);
router.get("/test", dispose.test);

module.exports = router; //将数据传递给main.js
复制代码

3.第三个文件dispose.js学习

module.exports = {
    "root" : async (ctx) => {
        ctx.body = "从根路由过来的请求";
    },
    "demo" : async (ctx) => {
        ctx.body = "从demo过来的请求";
    },
    "test" : async (ctx) => {
        ctx.body = "从test过来的请求";
    }
}
复制代码

3.koa一些模块介绍

  1. koa-static :管理静态资源的模块

    1. 安装: npm i -S koa-static
    2. 引用:
      const Koa = requrie("koa");
      const static = require("koa-static");
      const {join} = reurire("path");
      
      const koa = new Koa();
      //指定加载静态资源的根目录,指定全部静态文件的根目录
      koa.use(static(join(__dirname, "static")));
      复制代码
  2. koa-body :解析post请求的模块,监听POST请求,将数据存入ctx.request.body中

    1. 安装: npm i -S koa-body
    2. 引用:
      const Koa = requrie("koa");
      const koaBody = require("koa-body");
      
      const koa = new Koa();
      
      koa.use(koaBody());
      复制代码
  3. koa/cors :实现跨域模块

    1. 安装: npm i -S @koa/cors
    2. 引用:
      const Koa = requrie("koa");
      const cors = require("@koa/cors");
      
      const koa = new Koa();
      
      koa.use(cors());
      复制代码

链式操做

koa
    .use(static(join(__dirname, "static")))
    .use(koaBody())
    .use(cors());  //容许跨域

//注册中间件
koa.use(router.routes())
    .use(router.allowedMethods())
    .listen(3000, () => {
        console.log("开始监听3000端口");
    });
复制代码
相关文章
相关标签/搜索