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