关于koa2中间件
来源:3-3 Koa中间件

精慕门4058439
2020-06-16
截取示例项目文件mt-stack/app/server/index.js中的下列代码片段:
. . .
app.use(session({key: ‘mt’, prefix: ‘mt:uid’, store: new Redis()}))
app.use(bodyParser({
extendTypes:[‘json’,‘form’,‘text’]
}))
app.use(json())
. . .
app.use(passport.initialize())
app.use(passport.session())
. . .
async function start() {
. . .
app.use(users.routes()).use(users.allowedMethods())
app.use(geo.routes()).use(geo.allowedMethods())
app.use(search.routes()).use(search.allowedMethods())
app.use(categroy.routes()).use(categroy.allowedMethods())
app.use(cart.routes()).use(cart.allowedMethods())
app.use(order.routes()).use(order.allowedMethods())
. . .
}
现请教以下几个问题:
1、按照课程所述的中间件执行规则,每个中间件都要调用一个next()方法,如果某个中间件没有调用next()方法,则后续的中间件不会被执行。那么,以上所有通过app.use()加载的中间件中,怎么没有看到有调用next()的语句!在users.routes()、geo.routes()、search.routes()、categroy.routes() . . . 等中间件中,查看对应的koa-router中的代码,也没有找到调用next()的地方,请为我解答一下其中的道理,或指明一个查看代码的具体方向。
2、以上中间件加载的顺序可以改变吗?特别是从users.routes()到order.routes()之间的所有中间件,它们的加载顺序遵从什么样的原则?
3、如下的写法:
app.use(users.routes()).use(users.allowedMethods());
是否等同于下面的写法:
app.use(users.routes());
app.use(users.allowedMethods());
1回答
-
慕粉1926294646
2020-06-19
同上!
00
相似问题