相同的路由,不同的查询,不同的中间件



我正在研究一个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,bc,您可以动态选择它们的组合并使用它们来处理请求:

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);
});

最新更新