1.koa-router模块
- 初始化
npm init
- 安装模块
npm i -S koa
npm i -S koa-router
复制代码
- 引入
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端口");
});
复制代码
- 第二个文件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一些模块介绍
-
koa-static :管理静态资源的模块
- 安装:
npm i -S koa-static
- 引用:
const Koa = requrie("koa"); const static = require("koa-static"); const {join} = reurire("path"); const koa = new Koa(); //指定加载静态资源的根目录,指定所有静态文件的根目录 koa.use(static(join(__dirname, "static"))); 复制代码
- 安装:
-
koa-body :解析post请求的模块,监听POST请求,将数据存入ctx.request.body中
- 安装:
npm i -S koa-body
- 引用:
const Koa = requrie("koa"); const koaBody = require("koa-body"); const koa = new Koa(); koa.use(koaBody()); 复制代码
- 安装:
-
koa/cors :实现跨域模块
- 安装:
npm i -S @koa/cors
- 引用:
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端口");
});
复制代码