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

时间:2017-07-06 08:58:10

标签: javascript mysql node.js serverless-framework

我使用npm包mysql(2.13.0)在Node.JS(6.10.3)上编写的AWS Lambda中运行API。这是使用无服务器部署和管理的。

我使用以下代码在MariaDB RDS实例的表中插入一行:

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}')
    );`;
}

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

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的其他地方用于选择。谢谢!

补充说明: 该表是:

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中运行它时,它会起作用。

1 个答案:

答案 0 :(得分:1)

还包括查询,因为第一个错误与MySQL语法有关。关于回调不是一个函数,就我看来,它不会作为参数在下面的代码中传递。

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

以上是更正的。