我是Node.JS / Express世界的初学者,所以我在这里寻求一些帮助,如何完成我想要的工作。
我有这个中间件,我正在从Firebase中的数据库中读取数据,并将此数据推送到一个对象数组中。我的问题是:我什么时候可以使用res.render来渲染视图并发送数据?因为我总是得到“无法在发送后设置标题”错误,而且我知道原因,我只是无法弄清楚解决这个问题的最佳方法。
exports.regulation = (req, res, next) => {
const collisions = [];
const collisionsRef = firebase.database().ref('/collisions').once('value').then((data) => {
data.forEach((elem) => {
// console.log(elem.val());
const collision = {};
collision.id = elem.getKey();
collision.userId = elem.val().userId;
const userRef = firebase.database().ref('/users/' + elem.val().userId).once('value').then((user) => {
collision.user = user.val().name;
collision.status = elem.val().status;
collision.timestamp = elem.val().timestamp;
collisions.push(collision);
// console.log(collisions.length);
}).catch((err) => {
// next(err);
});
});
// res.render('regulation', {collisions: collisions});
});
};
谢谢! :)
答案 0 :(得分:1)
同步运行对firebase和res.render函数的请求。 Async.js library series function可用于同步运行函数。
const collisions = [];
function getData(callback) {
const collisionsRef = firebase.database().ref('/collisions').once('value').then((data) => {
data.forEach((elem) => {
// console.log(elem.val());
const collision = {};
collision.id = elem.getKey();
collision.userId = elem.val().userId;
const userRef = firebase.database().ref('/users/' + elem.val().userId).once('value').then((user) => {
collision.user = user.val().name;
collision.status = elem.val().status;
collision.timestamp = elem.val().timestamp;
collisions.push(collision);
// console.log(collisions.length);
}).catch((err) => {
// next(err);
});
});
callback(null, 'one');
}
async.series([
getData,
function(callback) {
res.render('regulation', {collisions: collisions});
callback(null, 'two');
}
]);