您是否可以为尚未拥有给定端点处理程序的所有动词创建Express Router处理程序?

时间:2014-11-15 15:47:16

标签: node.js express

我有一个只能用于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.*会成为可接受的解决方案吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

对于每个(支持的)HTTP方法,

.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.
    });