【问题标题】:when should a function return in hapijs route call函数何时应该在 hapijs 路由调用中返回
【发布时间】:2016-05-25 02:40:13
【问题描述】:

我有两个不同的例子,一个来自 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');
    }
});

这里我假设回复语句的值被返回,示例的其余部分是相同的。那么这两种方法是一样的吗?调用 return 或不调用它在这里没有什么区别(我已经执行了两者)但在其他情况下是否重要?也许等式中也有某种形式的中间件,它们是我们不调用 return 的原因吗?

【问题讨论】:

    标签: javascript node.js hapijs


    【解决方案1】:

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

    那为什么要回来?

    在调用回调时添加return(这就是reply() 接口)只是一种很好的做法,它标志着您打算让函数在该点停止执行。它可以防止任何人在该行之后添加要执行的代码。

    From hapi style guide:

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

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

    查看这两个代码示例以了解我的意思:

    错了!

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      相关资源
      最近更新 更多