Javascript 带有Angular.js的Nodejs/HapiJs

Javascript 带有Angular.js的Nodejs/HapiJs,javascript,angularjs,node.js,hapijs,Javascript,Angularjs,Node.js,Hapijs,有人能告诉我如何将nodejs(hapi服务器)与AngularJs结合起来吗?我想我可以捕捉到对我的Hapi服务器发出的每个请求,并使用angularjs的routes/REST等对这些请求做出反应 服务器正在运行,并按照我的预期为我提供index.html,但是我太笨了,没有把app.js挂在我的app.js上。我想我的方法是完全错误的 哈皮 index.html(标题) my index.html中的内联AngularJs代码工作正常。我非常感谢我能看到的每一个回复或一些资源。您的方法

有人能告诉我如何将nodejs(hapi服务器)与AngularJs结合起来吗?我想我可以捕捉到对我的Hapi服务器发出的每个请求,并使用angularjs的routes/REST等对这些请求做出反应

服务器正在运行,并按照我的预期为我提供index.html,但是我太笨了,没有把app.js挂在我的app.js上。我想我的方法是完全错误的

哈皮

index.html(标题)



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

您的方法是针对api,而不是针对静态文件。 服务器静态文件如下所示:

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

在这里查看更多信息

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

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


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

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

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

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

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


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

我将以下代码用于索引文件:

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');
server.route({
method: 'GET',
path: '/{param*}',
handler: {
  directory: {
    path: path.resolve(path.resolve(__dirname, '..', 'directory_name'))
  }
}
});
var Inert = require('inert');