如何使用Node和Angular在服务器和客户端之间传输数据?

我有一个使用Node.js,Express,Firebase 3.4.0和Angular.js构build的应用程序。 在服务器端server.js ,我初始化应用程序,然后获取users的数据库引用:

 var express = require('express'); var bodyParser = require('body-parser'); var path = require('path'); var firebase = require("firebase"); var app = express(); app.use(bodyParser.urlencoded({extended: false})); app.use(bodyParser.json()); app.use(express.static(path.resolve(__dirname, 'views'))); // Firebase setup; this is where it messes up... firebase.initializeApp({ apiKey: "apiKey", authDomain: "projectId.firebaseapp.com", databaseURL: "https://databaseName.firebaseio.com", storageBucket: "bucket.appspot.com" }); var db = firebase.database().ref(); var users = db.child('users'); app.listen(process.env.PORT, process.env.IP); app.get('/', function (req, res) { res.sendfile('/views/index.html'); // missing a statement to pass users to the view }); 

现在,这个users引用需要传递给index.html ,最好是作为一个数组,这样数据将被处理并在视图中呈现。

  • 是否有可能做到这一点,我将使用Angular?
  • 我明白模板语言会很方便,但是由于服务器和客户端都使用相同的语言, 所以他们仅仅传递数据不是一种简单而优雅的方式吗?
  • 什么是这种问题的标准方法? 与数据库的连接必须在服务器端打开,所以实际上有许多方法可以将数据传输到客户端进行进一步的操作/分解

谢谢!

首先,index.html没有商业数据,只要在DOM准备就绪的时候在客户端上实例化你的AngularJS应用程序即可。

然后,用于处理用户触发器的专用Angular service 。 此服务通过使用$http GET请求向服务器请求JSON有效内容。

在服务器端,用新的路由处理这个请求:

 app.get('/users', function (res, req) { // send the users as JSON }) 

当Angular接收到有效的响应时,它将拥有用户,并可以select在controller中将其呈现为HTML

这个往返看起来很浪费,但它有自主优势,所以你可以在应用程序的生命周期中多次重复使用这个对话框。

如果您希望预先填充/路由上的用户。 您需要使用服务器端模板引擎,以便您可以在包含某种全局index.html中注入一个<script></script> ,并使用客户端应用程序的初始状态:

 <script>window.__INITIAL_STATE__ = { users: … };</script> 

这个命名是任意的,这只是你select的惯例,所以Angular知道在启动的时候首先检查它。