【问题标题】:Why does this node-mysql insert yield an array?为什么这个 node-mysql 插入会产生一个数组?
【发布时间】:2014-06-23 15:35:10
【问题描述】:

根据node-mysqldocumentation,在主键为auto_increment的表中插入一行的结果是一个对象,其中一个字段是insertId。但是,我在运行下面的代码时看不到这一点。相反,我看到结果是一个双元素数组,其第一个元素是所需类型的对象,但其第二个元素是 undefined。特别是,下面的代码打印:

[ { fieldCount: 0,
    affectedRows: 1,
    insertId: 12,
    serverStatus: 2,
    warningCount: 0,
    message: '',
    protocol41: true,
    changedRows: 0 },
  undefined ]

谁能解释文档和观察到的行为之间的这种差异?

代码:

var mysql = require("mysql")
var Q = require("q")


var db = {
        "host": "localhost",
        "user": "root",
        "password": "xyz",
        "database": "study"
}

var pool  = mysql.createPool(db);
var getConnection = Q.nbind(pool.getConnection, pool)

getConnection().then(function (connection) {
    Q.ninvoke(connection, 'query', "insert into tsheet (cname) values('reformation');")
        .then(
            function (rslt) {
                console.log(rslt)
                process.exit(0)
            })
}).done()

这是表格:

mysql> describe tsheet;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| cid   | int(11)      | NO   | PRI | NULL    | auto_increment |
| cname | varchar(256) | NO   |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

【问题讨论】:

    标签: javascript mysql node.js promise q


    【解决方案1】:

    node-mysqlexpects a callback 带有 三个 参数:err, rows, fields。 Q 将后两个参数放入一个数组中,以便仅使用一个参数调用下一个函数。 (err 在.catch 中单独处理)。由于这是一个 INSERT,因此 fields 参数未定义。

    如果您想分别获取这两个参数,请使用.spread:

    Q.ninvoke(connection, 'query', "insert into tsheet (cname) values('reformation');")
      .spread(
        function (rslt, fields) {
          console.log(rslt)
          process.exit(0)
        });
    

    【讨论】:

    • 好答案,我想添加.get在这里也很有用。
    • 如果您已经将一些(node-mysql 的)知识带到了桌面上,我希望这是一个很好的答案。对我来说,对不起,但答案是不可理解的。使用.spread 是标准票价,但是将三个参数减少到两个有点神秘。
    • @Roamer-1888 怎么样?
    • SomeKittens,您的最新编辑有所帮助,但“所以只有一个回调”仍然让我感到困惑。
    • @Roamer-1888 我的错。脑放屁。
    猜你喜欢
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    相关资源
    最近更新 更多