Hapijs路由注册模式

Hapijs route registration pattern

因为 "Inert" 插件现在必须单独加载。我想注册我的应用程序的路线。我有 2 个选择

1) 导出一个以"server"为参数的函数,编写代码为

module.exports = function(server) {
    server.register('inert', function(err) {});

    server.routes([....]);
}

并且只需从 server.js 调用它为 require('./routes.js')(serverObj)

2) 将路由机制导出为hapi插件

exports.register = function(server, opts, next) {
    server.register('inert', function(err) {});

    server.routes([....]);

    next();
}

并从 server.js 调用它为 server.register(require('./routes.js'), function(err) {});

哪种方法更好/更标准化?或者有没有我不知道的第三种方式。

边问:另外,在server.js文件中调用路由函数/插件之前,是否应该先注册'inert'插件?

server.route() 可以传递一个路由数组,因此您可以简单地将路由导出为一个数组:

routes.js

module.exports = [
    {
        method: 'GET',
        path: '/',
        handler: function (request, reply) {

            ...
        }
    },
    ...
];

然后在进行主应用程序设置时需要该文件:

index.js

server.register(require('inert'), function (err) {

    if (err) {
        throw err;
    }

    server.route(require('./routes'));
    server.start(...)
});

Side Q:另外,在server.js文件中调用路由函数/插件前是否需要先注册'inert'插件?

是的,如果您使用 file handler or the directory 处理程序,您需要确保首先加载惰性,否则在注册路由时会出错。

如果您选择在依赖于这些处理程序的插件中注册路由,您可以使用 server.dependency() 来表达这种依赖性并延迟注册路由,直到加载 inert。这意味着您不必关心在 server.register() 中列出插件的顺序。如果您使用大量插件或在大型 application/team.

上工作,这很有用