【问题标题】:Is it possible do define a global base path in hapi是否可以在 hapi 中定义全局基本路径
【发布时间】:2018-02-13 15:50:54
【问题描述】:

我希望每个 hapi 路由路径都以前缀 (/api/1) 开头,而不将其添加到每个路由中。这可能吗?

以下路由应该可以使用路径/api/1/pets 而不是/pets

const Hapi = require('hapi');
const server = new Hapi.Server();
server.route({
    method: 'GET',
    path: '/pets'
})

【问题讨论】:

    标签: javascript node.js hapijs hapi.js


    【解决方案1】:

    我在Hapi docs 中没有看到这样的选项。不过,我可以建议你一个小的解决方法。做一些功能:

    function createRoutePath(routePath) {
      return `/api/1${routePath}`;
    }
    

    然后这样使用:

    server.route({
        method: 'GET',
        path: createRoutePath('/pets')
    });
    

    更新: 作为另一种解决方法,保持原样,并设置代理 Web 服务器。例如 nginx。

    【讨论】:

    • 如果这是唯一的方法,那么在路径 path: prefix + '/pets' 中使用常量会更容易。
    • 嗯,使用 nginx 并没有那么糟糕。它在生产中被广泛使用,所以再添加一条规则也没问题。
    【解决方案2】:

    似乎您无法为整个应用程序全局执行此操作。但是可以为插件中定义的所有路由添加前缀:

    server.register(require('a-plugin'), {
        routes: {
            prefix: '/api/1' 
        }
    });
    

    希望这会有所帮助。

    以防万一,如果您要尝试通过事件为新路线添加基本路径,这是行不通的。

    【讨论】:

    • 但这意味着我需要将我的路线包装在一个插件中?
    • 确实如此,但不会有太大变化。实际上,这是 hapi 鼓励的模块化 hapi 应用程序的一种方式。
    【解决方案3】:

    最好的办法是在路径中使用常量 -

    server.route({
       method: 'GET',
       path: constants.route.prefix + '/pets')
    });
    

    并在静态 constants.js 文件中定义常量

    【讨论】:

    • 看来这个解决方案是最简单的并且有租约开销。因此,我会接受它,但其他答案也提供了可能的解决方案。
    猜你喜欢
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    相关资源
    最近更新 更多