什么时候应该在hapijs路由呼叫中返回一个函数

时间:2016-05-24 14:19:38

标签: javascript node.js 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');
    }
});

这里我假设返回了reply语句的值,并且示例的其余部分是相同的。这两种方法一样吗?呼叫返回或不呼叫它在这里有所作为(我已经执行了两者)但在其他情况下是否重要?也许某种形式的中间件也会出现在这个等式中,它们是我们不能回复的原因吗?

1 个答案:

答案 0 :(得分:3)

hapi不使用处理程序的返回值(参见the code)。您的2个样本在功能上是等效的。

为什么要回来?

在调用回调时添加return(这是reply()接口是什么)只是一个很好的做法,标志着你打算让函数在那时停止执行。它可以防止任何人在行之后添加代码来执行。

From hapi style guide

  
      
  • 应始终使用显式返回
  • 调用回调   

这对于简单的例子来说似乎毫无意义,但这是一个很好的习惯。它可能会在更复杂的场景中挽救你的生命,确保回调只被调用一次并具有正确的值。

请参阅这两个代码示例以了解我的意思:

WRONG!

const diffuseBomb = function (person, callback) {

    if (person === 'james bond') {
        callback('PHEW! We\'re saved!');
    }

    callback('BOOOM!');
};

diffuseBomb('james bond', (sound) => console.log(sound));

RIGHT!

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