Hapi.js插件回调的用途是什么?

时间:2017-10-03 11:40:38

标签: express plugins routing middleware hapi.js

我是来自express.js的hapi.js的新手我试图理解hapi.js插入概念和express.js中间件之间的区别(如果有的话)。在一些示例和教程中,我看到了插件注册中的回调。 e.g:

// load one plugin
server.register(require('myplugin'), (err) => {

    if (err) {
        console.error('Failed to load plugin:', err);
    }

    server.route({
        method: 'GET',
        path: '/test',
        handler: function (request, reply) {
           reply('test passed');
        }
    });
});

所以我的问题是:在插件注册的回调中声明休息路由与在外面声明此路由有什么用?

更一般地说,我想知道hapi.js框架中插件的执行与express.js中的中间件之间的区别(在express.js中间件在处理请求时一个接一个地执行,直到最后一个中间件被调用。在hapi.js中它是一样的吗?)

感谢您的回答

1 个答案:

答案 0 :(得分:0)

hapi.js中插件注册的顺序与请求生命周期无关。但是,您的插件可能需要按特定顺序声明,以解决依赖性问题,并且如果您需要在注册插件后运行某些代码。

以下是需要此回调的示例:

server.register(require('hapi-auth-jwt'), err => {
 if (err) {
   console.log(err);
   return null;
 }
 server.auth.strategy('token', 'jwt', {

   key: process.env.JWT_SECRET,

   verifyOptions: {
     algorithms: ['HS256']
   }
 });
 server.register(/*other plugins*/)
}

还要记住,插件寄存器功能可以是异步的(通过随时调用 next()

hapi的架构与express非常不同。您可以将其视为块(插件)而不是层(中间件)。它还面向“配置代码”。