Hapi.js 17. *:静态内容用于目录处理程序

时间:2018-07-12 20:15:36

标签: javascript node.js hapijs

我正在将Inert与Hapi.js结合使用,并且有一个简单的目录处理程序设置可以服务于React App:

  {
    method: 'GET',
    path: '/{param*}',
    handler: {
      directory: {
        path: '.',
        redirectToSlash: true,
        index: true,
      },
    },
  }

这在访问http://localhost:8080时很好用。当我添加/ anything时,我得到一个404。

如何获取所有重定向到已定义路径的请求?我已经阅读了Inert文档,并尝试了Hapi.js API文档中的多个想法,但无济于事。

谢谢

2 个答案:

答案 0 :(得分:0)

当响应为404时,我使用了"engineOptions": { port: 9222 // Or whatever port you wish to assign } 生命周期钩子给Hapi总是发送我的onPreResponse

index.html

这样,它总是退回到我的ui,这使react-router可以处理非api路由。您可以在the docs.

中详细了解Hapi的生命周期

答案 1 :(得分:-1)

这是我的设置,用于响应投放和正常工作。

路由配置:

{
                method: 'GET',
                path: '/{param*}',
                config: Controller.dashboard
            },

控制器:

exports.dashboard = {
    auth: false,
    description: 'ui build request handler',
    handler: async (request, h) => {
        return h.file(config.get('uiBuildPath') + 'index.html', {confine: false});
    }
};

config.get('uiBuildPath')返回服务器中我的react app build目录的路径。只是这个 我将路由配置放在路由定义的末尾,这是确切的顺序。确保将此定义结尾

server.route([
    {
        method: 'GET',
        path: '/login',
        options: Controller.login
    },        
    {
        method: 'GET',
        path: '/logout',
        options: Controller.logout
    },
    {
        method: 'GET',
        path: '/',
        config: Controller.dashboard
    },
    {
        method: 'GET',
        path: '/{param*}',
        config: Controller.dashboard
    },
]);