节点js:将mysql结果分配给请求

时间:2012-02-22 09:19:50

标签: mysql node.js

以前我是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),以便在函数外部使用它,但它无效。

请你告诉我解决方法。

2 个答案:

答案 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);
});

因此,您需要围绕此要求构建代码。事件驱动的函数式编程(就是这个)可能很难首先解决。但是一旦你得到它,它就会很有意义。