学习一下koa的自定义中间件

文章介绍了Koa框架中中间件的工作原理,类似于.NETCore的过滤器,允许在请求处理链中按需执行。myMiddleWare示例展示了如何定义和导出中间件函数,其中ctx包含请求和响应对象,next方法用于调用下一个中间件。修改导出方式后,可以使用不同变量名导入和使用中间件。测试显示,中间件的输出可能会被后续中间件覆盖。
摘要由CSDN通过智能技术生成

开始看到koa的时候感觉有点像.netcore的风格,定义中间件的的思维,其实有点像在一个请求的路上设置各种过滤器一样的操作,就是请求经过我这里我想处理就处理,如果不处理就传给下一个中间件的,一些相关的WEB服务器相关的功能都可以在中间件去实现。
自定义中间件主要的是定义一个方法用来做中间件。我们这里定义一个myMiddleWare.js文件。

const myMiddleWare = async(ctx,next) => {
    ctx.body = "這是一個中間件測試";
    await next();
}
module.exports = {
    myMiddleWare
}

其实myMiddleWare中一个方法,这个方法带有两个参数ctx和next,这两个参数是固定的,第一个代表的是请求的一些上下文环境参数,如request,response等都是这个参数,有点类似于java中的Context之类的东西,也就是封装了一些请求的对象。next是一个方法用于执行下一步操作,也就是调用下一次中间件意思。最后混使用module.exports来导出模块中的文法myMiddleWare,这样就能在外部引用了。

const Koa = require('koa') // 引入koa
const router = require('./router/router')
const bodyparser = require('koa-bodyparser')
const { myMiddleWare } = require('./middleware/myMiddleWare')

const app = new Koa() // 声明实例

app.use(myMiddleWare);

app.use(bodyparser({
    enableTypes: ['json', 'form', 'text'],
     multipart: true // 是否支持 multipart-formdate 的表单
}));


//console.dir(router);
/**
 * router.routes() 启动路由
 * router.allowedMethods() 运行任何请求——get/post/put/delete等
 */
app.use(router.routes(), router.allowedMethods());



app.listen(3000)

console.log("nodejs start");

这里我们不用去关心其它的部分,我们只用关心以下这两行代码,这里我们要注意的就是{ myMiddleWare }中的myMiddleWare不能随便命名了,必须要和js文件中的导出名称一样,这里不是变量,正确的理解应是使用那个导出函数,因此这里必须为myMiddleWare。

const { myMiddleWare } = require('./middleware/myMiddleWare')
app.use(myMiddleWare);

那我们改一下行不行呢,我把myMiddleWare.js中的内容改成这样。

const myMiddleWare = async(ctx,next) => {
    ctx.body = "這是一個中間件測試";
    await next();
}
module.exports = myMiddleWare

这样我们导出的就是一个方法了,现在我们就可以不用名称相同了,因为myMiddle只是一个变量。

const myMiddle = require('./middleware/myMiddleWare')
app.use(myMiddle);

在测试中发现和我们如果在next()之前有输出ctx.body='xxx‘的话,如果后面还有中间件输出,这时会用后面的替代前面的输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值