【问题标题】:Named arguments in routing in Express.jsExpress.js 中路由中的命名参数
【发布时间】:2015-10-09 14:08:53
【问题描述】:

我似乎无法在任何地方找到有关此的信息。

我希望能够做这样的请求:url/list/message=hello?id=1234

但正如我所说,我无法在 Express 中找到任何关于如何执行此操作的信息。

我最初的猜测是这样做:

app.put('/list/message=:msg?id=:id', function (req, res) { ... });

但这并不完全奏效。 Express中有没有办法做到这一点?

【问题讨论】:

标签: javascript rest express url-routing


【解决方案1】:

你不能那样做。你可以做的是:

app.put('/list/message/:msg', function (req, res) {
  var msg = req.params.msg;

  var url = require('url');
  var id = url.parse(req.url, true).query.id;    
});

您的网址将如下所示:url/list/message/hello?id=1234

【讨论】:

    【解决方案2】:

    您所指的通常称为查询字符串,我们在节点中有一个强大的 URL 解析库来为我们处理。

    试试这个:

    require('url');
    ...
    var url_parts = url.parse(req.url, true);
    var query = url_parts.query;
    

    然后,您可以使用query.id 并获取1234,如果您将路线更改为:

    app.put('/list/message=:msg', function (req, res) { ... });
    

    理想情况下,您应该在尝试读取 query.id 之前检查它是否存在。我还建议不要使用message=:msg。相反,我会将整个内容重写为

    app.put('/list/:id', function (req, res) {
      var url_parts = url.parse(req.url, true);
      var query = url_parts.query;
      if (query.message) {...}
    });
    

    这与您目前的结构略有不同,但更符合大量 API 处理其路由的方式。

    【讨论】:

      猜你喜欢
      • 2017-01-24
      • 2013-03-25
      • 2013-06-24
      • 1970-01-01
      • 2011-03-17
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      相关资源
      最近更新 更多