在hapijs路由呼叫时应该什么时候返回

我有两个不同的例子,一个来自makemehapi(某种互动课程),另一个来自官方的hapi.js网站。 第一个看起来像这样 –

var Hapi = require('hapi'); var server = new Hapi.Server(); server.connection({ host: 'localhost', port: Number(process.argv[2] || 8080) }); server.route({ method: 'GET', path: '/', handler: function (request, reply) { reply('Hello hapi'); } }); server.start(function () {}); 

只要看看被调用的server.route方法即可。 处理程序有一个匿名函数,调用reply(...); 并不返回。 现在hapijs网站提到以下呼吁:

 server.route({ method: 'GET', path:'/', handler: function (request, reply) { return reply('hello world'); } }); 

在这里,我假定返回语句的值被返回,而例子的其余部分是相同的。 那么这两种方法是一样的吗? 调用返回或不调用它不会在这里有所作为(我已经执行了这两个),但在一些其他情况下,它会影响吗? 也许在这个等式中也有一些中间件的forms,它们是我们不叫回报的原因吗?

hapi不会使用你的处理程序的返回值(参见代码 )。 你的2个样本在function上是等效的。

那为什么要回来?

当你调用一个callback函数(这就是reply()接口是什么reply()时,添加return值只是一个很好的习惯,它标志着函数在那一刻停止执行的意图。 它可以防止任何人在该行之后添加代码执行。

从hapi风格指南 :

  • 应始终使用显式返回来调用callback函数

这个简单的例子看起来似乎毫无意义,但这是一个很好的习惯。 这可能会在更复杂的情况下挽救你的生命,确保callback只被调用一次并具有正确的值。

看到这两个代码示例,看看我的意思是:

错误!

 const diffuseBomb = function (person, callback) { if (person === 'james bond') { callback('PHEW! We\'re saved!'); } callback('BOOOM!'); }; diffuseBomb('james bond', (sound) => console.log(sound)); 

对!

 const diffuseBomb = function (person, callback) { if (person === 'james bond') { return callback('PHEW! We\'re saved!'); } return callback('BOOOM!'); }; diffuseBomb('james bond', (sound) => console.log(sound));