Angular.js 的 Node.js/HapiJs

Nodejs / HapiJs with Angular.js

有人可以向我解释如何将 nodejs(hapi 服务器)与 AngularJs 结合使用吗?我以为我可以捕获对我的 Hapi 服务器发出的每个请求,并使用 angularjs 的路由/REST 等对这些请求做出反应……

服务器是 运行 并且如我所料为我提供我的 index.html,但是我愚蠢地挂钩我的 app.js 以获得 angular 东西。我想我的做法是完全错误的。

哈皮

server.route({
    method: 'GET',
    path: '/{p*}',
    handler: function (request, reply) {
        reply.file('public/index.html');
    }
});

index.html (header)

<script src="CDN/angular.min.js"></script>
<script src="./app.js"></script>

我的 index.html 中的内联 AngularJs 代码工作正常。我感谢每一个回复或我能看到的一些资源。

您的方法适用于 api 而不是提供静态文件。 服务器静态文件如下:

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

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

你猜对了。如果您愿意使用 Hapi 和 AngularJS,推荐的方法是将您的 Hapi 应用程序作为 RESTful 网络服务使用 JSON 传输数据,而您的 AngularJS 应用程序将是您的网络界面。

这样您就可以充分利用双方的优势。 AngularJS 将使用其服务($http$resource)从您的 Web 服务获取数据,并通过应用程序路由的正确视图呈现这些数据。

所有这些基本上都是 MEAN stack,但是您将使用 Hapi 而不是 Express。

虽然 Lugg 的建议确实有效,但它只适用于没有网络服务器的情况。您应该将客户端应用程序与服务器应用程序分开组织,或者至少将服务器应用程序放在文档根目录上方的文件夹中。

客户端应用程序将设置为静态网站。您的 Web 服务器将处理提供 index.html 和所有重新安装的 Angular 文件。您的 HTML 和 Angular/Javascript 将处理请求的部分、js 模块等。这样您就可以从所有 Web 服务器功能和模块中获益。

服务器端可以专门监听 API 请求并响应它们。它不应传送您的客户端应用程序文件。它通常应该提供 JSON 响应。

这种方法更简单并且创建了良好的客户端/服务器分离。它使服务器端专注于传送数据,而客户端专注于处理 UI。这种关注点分离还允许编写其他客户端并与您的服务器应用程序通信。

我相信我的回答只是对 Hodes 回答的扩展。我试着让我的回答更明确一点,但我认为总体思路是一样的。

我将此代码用于索引文件:

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

对于某些版本的节点,您需要 inert require

var Inert = require('inert');