鉴于 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 服务器获取解决方案之前完成的。定义解决方案后,如何使其呈现页面?我知道这是非常小而愚蠢的事情,并且确实是 Node 的核心,但请帮助我理解。
最佳答案
connection.query 的第二个参数是在数据库返回后运行的回调。为什么不将 res.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.js 时,回调可能会有点棘手。您只需要考虑需要发生的步骤以及哪些是异步的。从那里你只需要确保你的回调允许过程继续。
关于node.js - NodeJS 获取和传递变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12356286/