【问题标题】:SELECT not working in node.jsSELECT 在 node.js 中不起作用
【发布时间】:2013-07-03 04:10:53
【问题描述】:

我正在尝试使用 node.js 在我的 SQL 数据库上使用 SELECT 查询,下面的 SELECT 查询应该可以工作,但不能。这很奇怪,因为我认为这应该可以工作,但它甚至没有进入 client.query 函数。我还复制了我的 INSERT 查询,该查询实际上正在向您展示我与数据库的连接工作正常。

我在 SELECT 查询中做错了什么?

创建连接

var mysql = require('mysql');
var client = mysql.createConnection({
    host: '***',
    user: '***',
    password: '***',
    database: '***'
});

SELECT 查询(不工作)

    function query(sql){
      var returnvalue = "tempVal";
      client.connect();
      client.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
        returnvalue = "doens't even enter function";
        if (err) throw err;

        returnvalue = rows[0].solution;
      });
      client.end();    
      return returnvalue;
    }

INSERT 查询(正在运行)

function query(sql){
  client.connect();
  client.query('INSERT INTO users (username) VALUES("foo")');
  client.end();
}

【问题讨论】:

  • 欢迎来到 async 的精彩世界!你不能那样做。

标签: mysql node.js


【解决方案1】:

由于.query() 是一个异步方法,您将无法将return 值作为回调将在评估return 之后调用。

你必须继续 callback 模式:

function query(sql, callback) {
    client.connect();
    client.query(sql, function (err, rows, fields) {
        if (err) {
            callback(err);
        else
            callback(null, rows, fields);
    });

    client.end();
}

更正:似乎client.end() 将允许当前查询在连接实际关闭之前完成。

使用end() 关闭连接,确保在向 mysql 服务器发送退出数据包之前执行所有剩余的查询。

不过,在回调中调用 .end() 对于许多 API 来说是司空见惯的,因为它们会切断任何待处理的操作。

【讨论】:

    猜你喜欢
    • 2021-11-29
    • 1970-01-01
    • 2021-04-03
    • 2016-01-17
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多