带有Angular.js的Nodejs / HapiJs

时间:2015-04-15 12:34:02

标签: javascript angularjs node.js hapijs

有人可以解释我如何将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代码正常工作。我感谢每一个回复或我可以看到的一些资源。

4 个答案:

答案 0 :(得分:8)

您的方法是api而不是服务静态文件。 像这样的服务器静态文件:

// static file
server.route({
    method: 'GET',
    path: '/{param*}',
    handler: {
        directory: {
            path: Path.join(__dirname, 'public/app')
        }
    }
});

在此处查看更多信息http://hapijs.com/tutorials/serving-files

答案 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');