Javascript 有时车把不会加载对象
我正在尝试使用res.render传递的对象创建div。但是,如果刷新页面,有时会创建div,有时不会创建div。我也使用引导 js/express:Javascript 有时车把不会加载对象,javascript,node.js,express,handlebars.js,Javascript,Node.js,Express,Handlebars.js,我正在尝试使用res.render传递的对象创建div。但是,如果刷新页面,有时会创建div,有时不会创建div。我也使用引导 js/express: router.get('/', checkSignIn, function(req, res, next) { db = new sqlite3.Database(file); var tasks = {}; db.serialize(function () { var query = "SELECT ta
router.get('/', checkSignIn, function(req, res, next) {
db = new sqlite3.Database(file);
var tasks = {};
db.serialize(function () {
var query = "SELECT tasks.id, tasks.name, tasks.status FROM tasks JOIN users ON users.privilege = tasks.privilege WHERE users.id = '" + req.session.userid + "'";
db.all(query, function (err, rows) {
for(i = 0; i < rows.length; i++) {
tasks[i] = {
name: rows[i].name,
status: rows[i].status
};
console.log(tasks[i]);
}
});
});
db.close();
res.render('index', {
title: 'Home',
css: ['style.css', 'dist/wu-icons-style.css'],
username: req.session.username,
tasks: tasks
});
});
哈佛商学院:
根据我添加的console.log,tasks对象每次都会正确填充。所以我认为问题在于车把
我在这里找到了一个解决方案:,但我不使用这个。我试过了./name和./status,但没用。有人能帮我吗?您的问题是异步javascript,而不是手柄。您的tasks对象正在填充,但在此之前您正在呈现html。如果您将console.logtasks放在db.close的当前位置之后,它将是一个空对象。您需要在数据库调用中移动render函数:
router.get('/', checkSignIn, function(req, res, next) {
db = new sqlite3.Database(file);
db.serialize(function () {
var query = "SELECT tasks.id, tasks.name, tasks.status FROM tasks JOIN users ON users.privilege = tasks.privilege WHERE users.id = '" + req.session.userid + "'";
db.all(query, function (err, rows) {
var tasks = {};
for(i = 0; i < rows.length; i++) {
tasks[i] = {
name: rows[i].name,
status: rows[i].status
};
console.log(tasks[i]);
}
res.render('index', {
title: 'Home',
css: ['style.css', 'dist/wu-icons-style.css'],
username: req.session.username,
tasks: tasks
});
});
});
db.close();
});
很抱歉迟了回复,但是谢谢你的回答。成功了。但是,在db.all中移动db.close会产生错误。因此,我只在db.all函数中移动了res.render,这很有效。所以它不工作,因为它在上一个函数完成之前就开始渲染了,对吗?
router.get('/', checkSignIn, function(req, res, next) {
db = new sqlite3.Database(file);
db.serialize(function () {
var query = "SELECT tasks.id, tasks.name, tasks.status FROM tasks JOIN users ON users.privilege = tasks.privilege WHERE users.id = '" + req.session.userid + "'";
db.all(query, function (err, rows) {
var tasks = {};
for(i = 0; i < rows.length; i++) {
tasks[i] = {
name: rows[i].name,
status: rows[i].status
};
console.log(tasks[i]);
}
res.render('index', {
title: 'Home',
css: ['style.css', 'dist/wu-icons-style.css'],
username: req.session.username,
tasks: tasks
});
});
});
db.close();
});