【问题标题】:first portion of route url is not included不包括路由 url 的第一部分
【发布时间】:2020-08-28 16:09:02
【问题描述】:

我有一条路线,我在其中构建了两个 GET APIs。我希望在传递参数的同时从/download 重定向到/zip。问题是由于某种原因我得到了 404 路由 url 未包含在 redirect()

这里是 API。

// respond with xml from from static folder
router.get('/zip/:id', function (req, res) {

    fileName = req.params.id

});

router.get('/download', function (req, res, next) {
    var id = req.query.id
    res.redirect('/zip?id='+ id);
});

module.exports = router;

我在测试 URL 时得到 404: localhost:8000/rest/pluto/v1/plugin/download?id=networktool

我认为这可能是我设置中间件的方式,但不确定。我还是 node/express 的新手。

【问题讨论】:

  • 我还要提一下,当我尝试重定向到/zip?id='+id 时,404 会发生在var id = req.query.id 上的中断
  • 这可能是你定义zip路由的方式,它在url路径中需要一个:id,但你试图用id作为查询参数重定向到它
  • 我用res.redirect('/zip'+ id); 更新了它,仍然得到同样的错误。
  • 当我将重定向更改为:res.redirect('/rest/pluto/v1/plugin/zip/'+ id); 时,它可以工作。有什么想法吗?

标签: node.js api express redirect


【解决方案1】:

您正在重定向到实际未定义的路由。使用您的/zip/:id 路由定义:

router.get('/zip/:id', function (req, res) {
    var fileName = req.params.id
});

按照定义的方式,您必须在 URL 本身中包含 id 信息,因此虽然以下路由可以工作:

/zip/networktool
/zip/1234

这些路线不会:

/zip
/zip?id=networktool
/zip?id=1234

因为 Express 正在寻找要内置到路由本身中的 id。所以你可以做两件事之一。您可以将重定向更改为:

router.get('/download', function (req, res, next) {
    res.redirect('/zip/'+ req.query.id);
});

或者,您可以修改您的 /zip 路由以使 id 参数可选 ?

router.get('/zip/:id?', function (req, res) {
    var fileName = (req.params.id) ? req.params.id : req.query.id;
});

我会推荐第一个选项,因为后一个可选参数只会使您的 zip 路由更加复杂,并且需要额外处理 id 是否实际传递给您的路由。

【讨论】:

  • 当我将重定向更改为:res.redirect('/rest/pluto/v1/plugin/zip/'+ id); 时,它可以工作。有什么想法吗?
  • 是的,你定义了你的路由有一个前缀,所以当你调用重定向时,你必须将该前缀添加到路由中。
【解决方案2】:

路径/zip/:id 需要一个路径参数而不是查询参数。

你应该像这样重定向

res.redirect('/zip/'+ id);

【讨论】:

  • 当我将重定向更改为:res.redirect('/rest/pluto/v1/plugin/zip/'+ id); 时,它可以工作。有什么想法吗?
  • 可能你的路由器被配置为前缀/rest/pluto/v1/plugin/
  • 这是app.jsvar plugin = require('./routes/plugin');app.use(tools.getUrlPrefix() + '/v1/plugin', plugin);中的配置方式
  • 这样解释,plugin 中的所有端点都将具有该前缀。
猜你喜欢
  • 2020-06-10
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
相关资源
最近更新 更多