鉴于node.js的异步特性,我在查找变量“传递”时遇到了一些麻烦(我知道这不是正确的术语,我会解释)。
请查看以下内容:
connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
if(err) {
throw err;
}
var solution = rows[0].solution;
});
res.render('index', { title: solution });
你可以想象,我得到了reference error, solution is not defined
。
这是因为res.render
是在从mysql服务器获取解决方案之前完成的。
一旦定义了解决方案,如何让它呈现页面?我知道这是一个非常小而且愚蠢的事情,并且真的是节点的核心,但请帮助我理解。
答案 0 :(得分:6)
connection.query的第二个参数是你在数据库返回后运行的回调。为什么不把res.render行放在回调中呢?这样,在准备好数据之前不会调用render函数。
connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
if(err) throw err;
var solution = rows[0].solution;
res.render('index', { title: solution });
});
当您第一次开始使用Node时,回调可能会有点棘手。您只需要考虑需要发生的步骤以及哪些步骤是异步的。从那里你只需要确保你的回调允许进程继续。