【问题标题】:Hapi v16.x.x: compose multiple route plugins into oneHapi v16.x.x:将多个路由插件合二为一
【发布时间】:2018-04-26 00:14:37
【问题描述】:

我目前使用这样的插件注册我的路线:

server.js:

const movieRoutes = require('./movies/routes');
server.register([ userRoutes, movieRoutes ], err => {
...
    server.start( err => {
    ...
    });
});

电影/routes.js:

exports.register = (server,options,next) => {
   server.route(...); // first route
   server.route(...); // second route
}

基本上我在上面的 movies/route.js 中定义了所有的路由处理程序

我想做的是能够将其拆分为单独的文件,然后以某种方式要求它们返回到movies/routes.js。有没有办法做到这一点?

在伪代码中:

movies/routes.js

exports.register = (server,options,next) => {
   // require first route
   // require second route
}

我想这样做的原因是因为 routes.js 变得很长,我想将它们分成单独的文件。

【问题讨论】:

    标签: javascript hapijs


    【解决方案1】:

    您可以将函数导出到文件中:

    const fooBar = function() {}
    
    exports.fooBar = fooBar;
    

    然后在声明路由的文件中需要处理函数(以伪代码形式)。

    const fooBar = require('fooBar');
    exports.register = (server,options,next) => {
      server.route({
        method: 'GET',
        path: '/path',
        handler: fooBar
      });
    
      next();
    }
    

    另一方面,我所做的是我需要大量包含小批量路由的小文件......我认为它更干净

    【讨论】:

    • 需要注意的是,我依赖于附加到服务器对象的数据库对象。我怎么能包括这个?因为处理程序只能接受请求和回复(版本 16)
    • 您可以将服务器绑定到函数:fooBar.bind(null, server) 但在我看来它开始变脏了
    • 我想通了!我需要server.app.db,它仍然可以通过request.server.app.db 的请求对象访问。这使我可以像在您的示例中一样在其他地方定义我的函数,并且正如我想要的那样!偶然发现有关预处理程序的讨论,启发了我们检查这一点。
    • 我最初的问题是假设如果我提取了处理程序,我就无法访问服务器对象,但我发现情况并非如此。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 2011-11-15
    • 2018-04-17
    相关资源
    最近更新 更多