中间件:洋葱模型
这是官网上给出的示例,从logger依次往下执行,执行到最底层的response往回退,结构很像同心圆的洋葱从外层向内层再由内层向外层。
next表示暂停当前层的代码进入下一层, 当最后一层执行完毕开始回溯,执行上一层没做完的内容。
路由中间件
// app.js
const xxxRouter = require("./routes/xxx");
app.use(xxxRouter.routes(), xxxRouter.allowedMethods());
// xxx.js
// 路径前缀是/xxx
const Router = new Router({ prefix: "/xxx" });
xxxRouter.post("/abaaba", async (ctx, next) => {
let body = ctx.request.body;
try {
t = ...
ctx.body = {
code: 200,
msg: "success",
data: t,
};
} catch (e) {
console.log(e);
ctx.body = {
code: 500,
msg: "请检查参数",
data: e,
};
}
});
xxxRouter.routes()
是一个用于处理路由的中间件,而 xxxRouter.allowedMethods()
是一个用于处理请求方法的中间件。在 Koa 中,路由中间件负责根据不同的 URL 路径将请求分发到不同的处理函数,而请求方法中间件负责根据请求的 HTTP 方法(如 GET、POST 等)确定是否允许该方法的请求。
所以,app.use(xxxRouter.routes(), xxxRouter.allowedMethods())
这行代码的作用是将 xxxRouter
中定义的路由处理函数与请求方法处理函数绑定到 Koa 应用程序中,以便在收到请求时执行相应的操作。这样,当请求到达时,首先会通过路由中间件进行路径匹配,然后再通过请求方法中间件检查请求的方法是否被允许。
请求部分的ctx是request和response的集合,ctx.request.body表示收到的请求体,ctx.body表示要发送的应答体
Body中间件
比起nodejs自带的bodyparser,koa-body还可以支持文件传输,用ctx.request.files.xxx(文件的变量名)来进行接收文件
注意koa-body进行的文件上传是先下载到本地的,如果需要的功能是导入之类的,这个文件用完就没用了,记得及时删除
if (fs.existsSync(filepath)) {
fs.unlinkSync(filepath);
console.log('File deleted!');
}
可以同时支持多地址
示例中告诉我们可以同时支持https和http