有人可以解释我如何将nodejs(hapi服务器)与AngularJs结合起来吗?我想我可以抓住每次向Hapi服务器发出的请求,并使用angularjs'路线/ REST等......
服务器正在运行并按照我的预期向我提供我的index.html,但是我要愚蠢地挂钩我的app.js中的角度内容。我猜我的做法完全错了。
哈皮
server.route({
method: 'GET',
path: '/{p*}',
handler: function (request, reply) {
reply.file('public/index.html');
}
});
index.html(标题)
<script src="CDN/angular.min.js"></script>
<script src="./app.js"></script>
我的index.html中的内联AngularJs代码正常工作。我感谢每一个回复或我可以看到的一些资源。
答案 0 :(得分:8)
您的方法是api而不是服务静态文件。 像这样的服务器静态文件:
// static file
server.route({
method: 'GET',
path: '/{param*}',
handler: {
directory: {
path: Path.join(__dirname, 'public/app')
}
}
});
答案 1 :(得分:2)
你的猜测是正确的。如果您愿意与Hapi和AngularJS合作,推荐的方法是将您的Hapi应用程序作为使用JSON传输数据的RESTful Web服务,您的AngularJS应用程序将成为您的Web界面。
通过这种方式,您可以充分利用双方的优势。 AngularJS将使用其服务($http
,$resource
)从您的Web服务获取数据,并通过您的应用程序路径的正确视图显示它。
所有这些基本上都是MEAN stack,但您将使用Hapi代替Express。
答案 2 :(得分:2)
虽然Lugg的建议当然有效,但只有在您没有网络服务器的情况下才适用。您应该将客户端应用程序与服务器应用程序分开组织,或者至少将服务器应用程序放在doc根目录上的文件夹中。
客户端应用程序将设置为静态网站。您的Web服务器将处理index.html和所有重新播放的Angular文件的提供。您的HTML和Angular / Javascript将处理请求部分,js模块等。这样您就可以从所有Web服务器功能和模块中受益。
然后,服务器端可专用于侦听API请求并对其进行响应。它不应该提供您的客户端应用程序文件。它通常应该提供JSON响应。
这种方法更简单,可以创建良好的客户端/服务器分离。它使服务器端专注于提供数据,而客户端侧重于处理UI。这种关注点分离还允许编写其他客户端并与服务器应用程序通信。
我相信我的回答只是对Hodes答案的扩展。我试图让我的答案更明确,但我认为一般的想法是一样的。
答案 3 :(得分:0)
我将此代码用于索引文件:
server.route({
method: 'GET',
path: '/{param*}',
handler: function(request, reply) {
return reply.file(path.resolve(__dirname, '..', 'public/index.html'));
}
});
这对于其他目录:
server.route({
method: 'GET',
path: '/{param*}',
handler: {
directory: {
path: path.resolve(path.resolve(__dirname, '..', 'directory_name'))
}
}
});
对于某些版本的节点,您需要惰性需求
var Inert = require('inert');