node.js mysql 在 HANDLER RESOLVED 附近插入 ER_PARSE 错误

node.js mysql insert ER_PARSE ERROR near HANDLER RESOLVED

我在 Node.JS (6.10.3) 上使用 npm 包 mysql (2.13.0) 在 AWS Lambda 中编写了一个 API 运行ning。这是使用 Serverless 部署和管理的。

我正在使用以下代码将单行插入到 MariaDB RDS 实例的 table 中:

var mysql = require('mysql');

var connection = mysql.createConnection({
  "host": process.env.CONFIG_HOST,
  "user": process.env.CONFIG_WRITE_USER,
  "password": process.env.CONFIG_WRITE_PW,
  "database": process.env.CONFIG_DB,
  "connectionLimit": 1
});

module.exports.post = (event, context, callback) => {
  var body = JSON.parse(event.body);
  var params = event.someParameter;
  var sql = getSql(body.name);

  console.log(sql);
  connection.query(sql, onQueryComplete(params, callback));
}

const onQueryComplete = function(params, callback) {
  return function(error, result) {
    if (error) {
      console.log(error);
      callback(null, 'some error response');
    }

    // do something else...
  }
}

function getSql(name) {
  return `
    INSERT INTO lds_config.test_table
    (
      name,
      name_hash
    )
    VALUES
    (
      '${name}',
      MD5('${name}')
    );`;
}

如果我检查 table,我可以看到插入已成功完成并添加了新行,但是正在设置错误 - 这意味着某处出了问题(可能在插入之后) .

mysql(在console.log中)返回的错误是:

{
  Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'HANDLER RESOLVED _____');
   // Timeout clearing if needed
       ' at line 2
    at Query.Sequence._packetToError (...\node_modules\mysql\lib\protocol\sequences\Sequence.js:52:14)
    at Query.ErrorPacket <<stack trace continues>>)
  code: 'ER_PARSE_ERROR',
  errno: 1064,
  sqlState: '42000',
  index: 0
}

接下来是第二个错误,指出回调不是函数:

Debug: internal, implementation, error
TypeError: Uncaught error: callback is not a function

类似的代码在 API 的其他地方用于选择。谢谢!

进一步说明: table 是:

CREATE TABLE lds_config.test_table(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(500), name_hash CHAR(32));

console.log(sql); 的结果是:

INSERT INTO lds_config.test_table
(
  name,
  name_hash
)
VALUES
(
  'test01',
  MD5('test01')
);

当我 运行 直接在 mysql workbench 中时,它会起作用。

也包括查询,因为第一个错误是关于 MySQL 语法的。据我所知,关于回调不是函数,它没有在下面的代码中作为参数传递。

const onQueryComplete = function(params) {
  return function(error, result, callback) {
    if (error) {
     console.log(error);
     callback(null, 'some error response');
    }
    // do something else...
  }
}

以上是更正后的。