【问题标题】:Nodejs / HapiJs with Angular.jsNodejs / HapiJs 与 Angular.js
【发布时间】:2015-06-21 10:07:44
【问题描述】:

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

【问题讨论】:

    标签: javascript angularjs node.js hapijs


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      你的猜测是正确的。如果您愿意使用 Hapi 和 AngularJS,推荐的方法是将您的 Hapi 应用程序作为一个使用 JSON 传输数据的 RESTful Web 服务,而您的 AngularJS 应用程序将是您的 Web 界面。

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

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

      【讨论】:

        【解决方案3】:

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

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

        然后服务器端可以专门用于监听 API 请求并做出响应。它不应该交付您的客户端应用程序文件。它通常应该提供 JSON 响应。

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

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

        【讨论】:

          【解决方案4】:

          我将这段代码用于索引文件:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-12-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多