【问题标题】:Integrate all Angular2 and Hapi routes集成所有 Angular2 和 Hapi 路由
【发布时间】:2017-04-06 10:41:16
【问题描述】:

情况

我正在开发一个使用 Hapi 服务器进行 REST 调用和多页 Angular2 网站客户端的 Web 应用程序。

Hapi 将所有 Angular2 文件提供给客户端:

let serverDirPath = path.resolve(__dirname);
server.route({
    method: "GET",
    path: "/{param*}",
    config: {
        auth: false,
        handler: {
            directory: {
                path: path.join(serverDirPath, "../client"),
                index: true
            }
        }
    }
});

调用服务器根成功返回“index.html”,之后Angular2网站就完美运行了!所有对 Hapi 定义的路由的调用也可以正常工作。

问题

但是,如果我对任何 Angular2 定义的路由执行 GET(例如到达页面“/users”),Hapi 找不到该路由并返回错误 404。这可能是因为该路由未定义在哈皮服务器。请注意,如果我从“index.html”页面导航到那里,“/users”路线可以完美运行!

问题

如何通过直接 GET 调用访问“/user”页面?如果可能,我想将所有对 Hapi 路由的调用重定向到相应的 Angular2 路由(如果存在)。

提前谢谢你!

编辑:解决方案

我解决了!在 app.module.ts 的 providers 声明中,我添加了这个:

    {
        // Strategy to serve pages with /#/{path}. It's required to resolve Angular2 routes when using hapi.
        provide: LocationStrategy,
        useClass: HashLocationStrategy
    },

所有 Angular2 url 必须以 /#/ 开头(例如 localhost/#/home),这对我很有用。

【问题讨论】:

  • 嗨,这是我的皮肤。非常感谢。

标签: node.js angular get routes hapijs


【解决方案1】:

我遇到了同样的问题,我已经制作了自定义路由处理程序,就像这样

server.route({
    method: 'GET',
    path: '/{files*}',
    handler: function(req, reply, next) {
        var reg = /(\.js)|(\.css)|(\.png)|(\.jpg)|(\.jpeg)|(\.eot)|(\.woff)|(\.ttf)|(\.eot)|(\.svg)/;
        if(req.params.files && reg.test(req.params.files)) {
            reply.file(req.params.files);
        }
        else{
            reply.file('index.html');
        }

    }

});

还将它添加到连接配置中

server.connection({
...
routes: {
    files: {
        relativeTo: Path.join(__dirname, './public')
    }
  }
});

还没有找到任何最聪明的方法来处理这个问题

【讨论】:

    猜你喜欢
    • 2017-06-14
    • 1970-01-01
    • 2015-05-22
    • 2018-02-12
    • 2017-01-30
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多