如何将参数传递给nodejs中的mysql查询回调

Jul*_*lio 15 mysql callback node.js

我试图找出将自定义数据传递给查询调用的正确方法,以便在回调中使用.我在nodejs(所有最新版本)中使用MySQL库.

我调用了connection.query(sql,function(err,result){...});

我找不到一种方法来1)将自定义数据/参数传递给调用,以便2)它可以在调用回调时使用.那么这样做的正确方法是什么?

我有以下(伪代码):

...
for (ix in SomeJSONArray) {
    sql = "SELECT (1) FROM someTable WHERE someColumn = " + SomeJSONArray[ix].id;
    connection.query(sql, function (err, result) {
      ...
      var y = SomeJSONArray[ix].id;
    };
}
Run Code Online (Sandbox Code Playgroud)

从上面的代码中,我需要能够将查询中使用的"ix"的当前值传递给回调本身.

我怎么做?

Chr*_*ris 30

如果您使用的是node-mysql,请按照文档说:

connection.query(
    'SELECT * FROM table WHERE id=? LIMIT ?, 5',[ user_id, start ], 
    function (err, results) {

    }
);
Run Code Online (Sandbox Code Playgroud)

文档还具有正确转义字符串的代码,但在查询调用中使用数组会自动为您进行转义.

https://github.com/felixge/node-mysql

  • 谢谢Chris,但我的问题不在于SQL字符串本身内部的数据编码,而在于传递我希望通过回调返回的其他数据,而不是结果集的一部分.正如您在我的示例中所看到的,ix值将是外部循环中当前值的值,而不是我在数组索引中使用的值. (2认同)

sda*_*day 9

要用完整的答案/示例来回答最初的问题,请使用匿名函数包装回调函数,如果要传入数据,则会立即创建包含"快照"的作用域.

var ix=1;
connection.query('SELECT 1',
    (function(ix){
        return function(err, rows, fields) {
            console.log("ix="+ix);
            console.log(rows);
        };
    })(ix));
Run Code Online (Sandbox Code Playgroud)

对于那些刚接触这个概念的人,就像我20分钟前一样,最后的})(ix)); 是传递给(function(ix){的外部var ix = 1值.可以重命名(function(abc){如果你更改了console.log("ix ="+ abc);

fwiw(感谢Chris提供的填充空白以获得解决方案的链接)