为啥这个 node-mysql 插入会产生一个数组?

Posted

技术标签:

【中文标题】为啥这个 node-mysql 插入会产生一个数组?【英文标题】: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)

【问题讨论】:

【参考方案1】:

node-mysqlexpects a callback 带有 三个 参数:err, rows, fieldsQ 将后两个参数放入一个数组中,以便仅使用一个参数调用下一个函数。 (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 我的错。脑放屁。

以上是关于为啥这个 node-mysql 插入会产生一个数组?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 Clojure 的瞬态映射中插入 1000 000 个值会产生一个包含 8 个项目的映射?

将一个字符数组分配给另一个会产生错误。为啥?

我有一个包含 0 和 1 值的数组。如果我将它与 -1 相乘,则会产生空数组。为啥?

为啥大型静态数组会产生段错误而动态却不会? (C++)

node-mysql 在查询中使用数组

为啥更新现有密钥的优先级会产生不一致的结果?