npm init
npm i -S koa
npm i -S koa-router
复制代码
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
从上述例子发现,全部的模块都写在同一个文件里,这样是不稳当的。模块化开发根据不用的功能放在不用的文件中。例如流水线,每个工人负责不用的功能。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端口");
});
复制代码
//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过来的请求";
}
}
复制代码
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端口");
});
复制代码