整合所有Angular2和Hapi路线

时间:2016-11-22 16:42:05

标签: node.js angular get routes hapijs

场合

我正在开发一个使用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
            }
        }
    }
});

成功调用服务器root返回“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网址必须以/#/开头(例如localhost /#/ home),这对我很有用。

1 个答案:

答案 0 :(得分:0)

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

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

没有找到任何最明智的方法来处理这个