<node.js学习笔记(6)>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来实例化

demo1

//引入模块
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端口");
    });
复制代码

运行文件,请求效果:

demo2

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端口");
    });
复制代码

效果:


2. 模块化开发

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

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

1.第一个文件main.js

//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端口");
    });
复制代码

转载于:https://juejin.im/post/5c1357d851882545e24efe23

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值