我有一个使用Node.js,Express,Firebase 3.4.0和Angular.js构建的应用程序。在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
,最好作为数组传递,以便在视图中操作和呈现数据。
谢谢!
答案 0 :(得分:1)
首先,index.html没有业务数据,只是在DOM准备就绪时在客户端上实现AngularJS应用程序。
然后用于处理用户触发器的专用Angular service
。
此服务通过使用$http
GET请求向服务器请求JSON有效负载。
在服务器端,您使用新路由处理此请求:
app.get('/users', function (res, req) {
// send the users as JSON
})
当Angular收到有效回复时,它会有用户并可以选择将它们呈现为controller
这次往返行程似乎很浪费,但它具有自治的优势,因此您可以在应用程序的生命周期内多次重复使用此对话框。
如果您希望在/
路线上预填充用户。您需要使用服务器端模板引擎,以便在<script></script>
中注入index.html
,其中包含某种全局变量,其中包含客户端应用的初始状态:
<script>window.__INITIAL_STATE__ = { users: … };</script>
这个命名是任意的,它只是你选择的约定,所以Angular会知道在它启动时首先检查它。