我正在研究一个API,它有这样的路由(所有POST请求)
/friends?d=onlineFriends
/friends?d=offlineFriends
和…
是这样处理的:
server.js
app.post("/friends", (req, res, next) => {
let d = req.query.d
let path "./funcs/" + d + ".js"
return require(path)(req, res, next)
})
./funcs/onlineFriends.js
module.exports = (req, res, next) => {
return res.sendStatus(200)
}
但问题是,我想为每个函数使用不同的中间件,上面的代码如果我想使用一个中间件,它将适用于所有的函数,因为你必须把它放在app.post部分。
我试过如下:
module.exports = (req, res, next) => {
middleware(req, res, next)
return res.sendStatus(200)
}
但是它当然会导致Cannot set headers after they are sent to the client
。
我知道你可能会问"为什么不使用/friends/online这样的路由器",我真的无法更改客户端,所以我必须这样做。
如果您有中间件a
,b
和c
,您可以动态选择它们的组合并使用它们来处理请求:
app.post("/friends", function(req, res, next) {
var middleware;
switch (req.query.d) {
case "a": middleware = [a, c]; break;
case "b": middleware = [b]; break;
default: return next();
}
express.Router().use(middleware)(req, res, next);
});