场合
我正在开发一个使用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),这对我很有用。
答案 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')
}
}
});
没有找到任何最明智的方法来处理这个