Node.js 从firebase检索并在ejs中渲染
所以我基本上是在尝试为我的ejs前端做一个“foreach”循环,但我似乎无法在server.js中重新渲染快照。我似乎无法将变量放入res.render()中。从firebase检索数据供参考没有问题 我已经尝试过各种方法,比如在参考中移动它等等Node.js 从firebase检索并在ejs中渲染,node.js,firebase-realtime-database,ejs,Node.js,Firebase Realtime Database,Ejs,所以我基本上是在尝试为我的ejs前端做一个“foreach”循环,但我似乎无法在server.js中重新渲染快照。我似乎无法将变量放入res.render()中。从firebase检索数据供参考没有问题 我已经尝试过各种方法,比如在参考中移动它等等 app.get('/',函数(req,res){ var ref=database.ref(“课程”); //var ref=firebase.database().ref(“用户”); 参考“值”,功能(快照){ snapshot.forEach(
app.get('/',函数(req,res){
var ref=database.ref(“课程”);
//var ref=firebase.database().ref(“用户”);
参考“值”,功能(快照){
snapshot.forEach(函数(childSnapshot){
var childData=childSnapshot.val();
});
});
res.render('页面/索引'{
ChildData:ChildData
});
});
使用此
app.get('/', function(req, res) {
var ref = database.ref('Courses');
// var ref = firebase.database().ref("users");
ref.on("value", function (snapshot) {
snapshot.map(function (childSnapshot) {
var childData = childSnapshot.val();
});
res.render('pages/index', {
ChildData:childData
});
});
});
将response send方法移动到
ref.on
的回调中,并将forEach
更改为map
,因为map是同步的,所以它将首先完成迭代,并在响应中发送数据数据是从Firebase异步加载的,因为这可能需要一些时间。应用程序的主代码不会等待数据从服务器返回,而是直接继续。然后,当数据可用时,将使用该数据调用回调
这意味着任何需要来自数据库的数据的代码都需要在该回调中
app.get('/', function(req, res) {
var ref = database.ref('Courses');
ref.once("value", function (snapshot) {
var childData;
snapshot.forEach(function (childSnapshot) {
childData = childSnapshot.val();
});
res.render('pages/index', {
ChildData:childData
});
});
});
主要变化:
- 我将
移动到回调中,以便它在数据可用后运行res.render
- 我在循环之前声明
,这样循环之外的代码也可以使用它var childData
- 我使用
而不是上的一次
,因此数据只加载一次
snapshot
是一个对象,它没有map
方法。不过,它确实有一个forEach
方法,所以这就是通常用来循环它的方法。谢谢,它可以工作!但我用另一个变量数组替换了var childdata。并在childData快照下方添加了array.push