使用查询字符串进行快速JS路由

wde*_*tac 4 node.js express

我想做这样的事情。如果要查询某个字符串,我想使用其他中间件。

app.get("/test?aaa=*", function (req, res) {
    res.send("query string aaa found");
});

app.get("/test", middleware, function (req, res) {
    res.send("no query string");
});
Run Code Online (Sandbox Code Playgroud)

但是,我失败了。谁能帮我?谢谢。编辑:我只需要添加中间件,我不在乎查询字符串的值是

rob*_*lep 5

如果您打算运行相同的路由处理程序并根据查询字符串是否匹配来调用中间件,则可以使用某种包装的中间件:

var skipIfQuery = function(middleware) {
  return function(req, res, next) {
    if (req.query.aaa) return next();
    return middleware(req, res, next);
  };
};

app.get("/test", skipIfQuery(middleware), function (req, res) {
  res.send(...);
});
Run Code Online (Sandbox Code Playgroud)

如果要有两个路由处理程序,可以使用以下方法:

var matchQueryString = function(req, res, next) {
  return next(req.query.aaa ? null : 'route');
};

app.get("/test", matchQueryString, function (req, res) {
  res.send("query string aaa found");
});

app.get("/test", middleware, function (req, res) {
  res.send("no query string");
});
Run Code Online (Sandbox Code Playgroud)

(这些显然不是很通用的解决方案,但这只是为了提供解决方案的思路)