不包括路由 URL 的第一部分



我有一条路线,我在那里建造了两个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

我想这可能是我设置中间件的方式,但不确定。我仍然是节点/快递的新手。

您正在重定向到实际未定义的路由。使用/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是否实际传递到您的路由。

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

你应该像这样重定向

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

最新更新