以前我是PHP开发人员,所以这个问题可能对你们中的一些人来说很愚蠢。
我在节点js上使用mysql。
client.query('SELECT * FROM users where id="1"', function selectCb(err, results, fields) {
req.body.currentuser = results;
}
);
console.log(req.body.currentuser);
我尝试将结果集(结果)分配给变量(req.body.currentuser),以便在函数外部使用它,但它无效。
请你告诉我解决方法。
答案 0 :(得分:1)
查询调用是异步的。因此,selectCb
的执行时间晚于console.log
。如果您将console.log
来电置于selectCb
,它就能正常运作。
通常,您希望从selectCb
回调中调用取决于查询结果的所有内容。这是Node.JS中的基本架构原则之一。
答案 1 :(得分:1)
client.query
调用与node.js中的几乎所有内容一样,是异步。这意味着该方法只是启动请求,但继续执行。因此,当它到达console.log时,req.body.currentuser
尚未定义任何内容。
您可以查看是否将控制台日志移动到回调中,它将起作用:
client.query('SELECT * FROM users where id="1"', function selectCb(err, results, fields) {
req.body.currentuser = results;
console.log(req.body.currentuser);
});
因此,您需要围绕此要求构建代码。事件驱动的函数式编程(就是这个)可能很难首先解决。但是一旦你得到它,它就会很有意义。