我有一个只能用于POST的API端点。如果我使用任何其他HTTP动词向该端点发出请求,我会得到一个相当丑陋的非JSON响应:Cannot POST /path/to/api
。如果我可以创建一个语句来处理尚未明确定义的其余HTTP动词,那将是很好的(例如:router.other('/path/to/api', function () { ... });
我尝试使用router.all('/path/to/api', function () { ... });
并且它似乎按照我的要求行事,但是根据Express documentation中给出的内容,它似乎不是解决问题的正确方法。如果我知道我在POST函数中调用router.all()
,那么res.*
会成为可接受的解决方案吗?
感谢您的帮助!
答案 0 :(得分:2)
.all()
实际上adds separate route handlers,这可能效率低下,因为Express可能需要单独检查每个方法。
如果你想要更多的单一解决方案,你可以使用.use()
代替,只需添加一个路由处理程序即可捕获所有内容:
router.post(....)
.use(function(req, res, next) {
// ...
});
答案 1 :(得分:1)
这听起来像.all
对我来说是一个合理的用例。我建议在你的路线上使用链接来简化分组,例如。
router.other('/path/to/api')
.post(fuunction(req, res){
// Handle the API request.
})
.all(function(req, res){
// Respond with an error about invalid METHODs.
});