Resitfy中res.send()之后调用next()的重点是什么?

时间:2016-10-10 18:36:13

标签: node.js restify

我熟悉Express,但对Restify很新。 Restify的文档有很多例子在next()之后调用res.send(),如下所示:

server.get('/echo/:name', function (req, res, next) {
  res.send(req.params);
  return next();
});

这似乎是一些Restify专家推荐的模式:

The consequences of not calling next() in restify

这样做的真实用例是什么?在你调用res.send()之后,链中的下一个处理程序可以做什么吗?

1 个答案:

答案 0 :(得分:1)

在我做了更多的研究后,我想我找到了答案。

只有在next()之后调用res.send()的实际用例是您希望安装'后呈现'类型的中间件以在路由人员完成工作后捕获所有交易。

在其他情况下,它只会为每个请求添加不必要的开销,因为它会扫描其余路由以查找下一个匹配。

大多数中间件都是“预渲染”类型,无论如何都不需要next()调用。即使对于后期渲染类型的中间件,依赖于next()的自愿调用也是非常危险的。您更愿意使用更加防错的方法,例如https://github.com/jshttp/on-finished

next()之后调用res.send()是一种不好的做法,在大多数情况下会造成不必要的开销。它应该只在绝对需要时才使用,你知道自己在做什么。