【问题标题】:Express js routing with query string带有查询字符串的 Express js 路由
【发布时间】:2015-11-04 23:42:33
【问题描述】:

我想做这样的事情。如果有或没有某个查询字符串,我想使用不同的中间件。

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

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

【问题讨论】:

标签: node.js express


【解决方案1】:

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

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

如果你想有两个路由处理程序,你可以使用这个:

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

(这些显然不是非常通用的解决方案,但只是提供一个关于如何解决这个问题的想法)

【讨论】:

  • 我的目的是上面提到的第一个。你的例子很棒,虽然我需要一些时间来理解代码,非常感谢。
【解决方案2】:

你可以这样做:

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


middleware = function(req, res, next) {
    if(!req.query.yourQuery) return next();

    //middleware logic when query present
}

【讨论】:

    猜你喜欢
    • 2012-04-01
    • 2011-01-16
    • 2014-03-05
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    相关资源
    最近更新 更多