我为我的快速服务器设置了2条路线,它们看起来非常接近。它们基本上是相同的url,除了一个是post而另一个是get,并且get有一个额外的路由param(这是可选的)。现在这些似乎工作正常,但是如果我不在get调用中添加可选参数,它会认为我正试图点击帖子。我希望能够在没有传递第二个可选参数的情况下点击获取调用。让我告诉你到目前为止我所拥有的:
router.param('itemID', (req, res, next, itemID) => {
verbose("itemID=", itemID);
next();
});
router.param('navigationType', (req, res, next, navigationType) => {
if (!navigationType) {
next();
}
verbose("navigationType=", navigationType);
next();
});
router.route('/:itemID/navigations')
.post(controllers.addActivity)
.all(routes.send405.bind(null, ['POST']));
router.route('/:itemID/navigations/:navigationType')
.get(controllers.listActivities)
.all(routes.send405.bind(null, ['GET']));
routed.send405方法如下所示:
function send405(methods, req, res) {
res.set('Allow', methods.join(','));
res.status(405).json({
message: `Method '${req.method}' Not Allowed.`
});
}
所以现在问题是如果我开始使用/blah123/navigations
并且不添加/:navigationType
变量,它会认为我正在尝试使用post方法。我很擅长与此合作,并希望得到任何帮助或见解。谢谢!
答案 0 :(得分:0)
当您声明路线时,请说GET /admins/:id
,它会匹配对GET /admins/1
或GET /admins/john
的所有请求。但是当你只做GET /admins
时,它将无法找到,因为你没有声明GET路由匹配该模式。
要使用此功能,您必须指定navigationType
是一个可选参数,并且首先放置GET请求,然后是POST,就像这样。
router.route('/:itemID/navigations/:navigationType?')
.get(controllers.listActivities)
.all(routes.send405.bind(null, ['GET']));
router.route('/:itemID/navigations')
.post(controllers.addActivity)
.all(routes.send405.bind(null, ['POST']));