我使用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中运行它时,它会起作用。
答案 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...
}
}
以上是更正的。