Hapijs路由注册模式



由于"Inert"插件现在必须单独加载。我想注册我申请的路由。我有两个选择

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

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

Side Q:另外,在server.js文件中调用路由函数/plugin之前,我应该注册"惰性"插件吗?

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文件中调用路由函数/插件之前,我应该注册'惰性'插件吗?

是的,如果你正在使用file处理程序或directory处理程序,你需要确保惰性是首先加载的,否则你会在注册路由时得到一个错误。

如果你选择在一个依赖这些处理程序的插件中注册路由,你可以使用server.dependency()来表示这个依赖,并延迟注册路由,直到惰性加载。这意味着你不必关心你在server.register()中列出插件的顺序。

最新更新