Lambda函数MySQL结果不适用于NodeJs 8.10
我在节点6.10中有一个代码,它正在工作。。。 但是如果我把它转换成节点8.10,它就不工作了Lambda函数MySQL结果不适用于NodeJs 8.10,mysql,node.js,amazon-web-services,aws-lambda,Mysql,Node.js,Amazon Web Services,Aws Lambda,我在节点6.10中有一个代码,它正在工作。。。 但是如果我把它转换成节点8.10,它就不工作了 var mysql = require("mysql"); var connection = mysql.createConnection({ host: " localhost", user: "root", password: "", database: "parser_db" }); exports.handler = async event => { connect
var mysql = require("mysql");
var connection = mysql.createConnection({
host: " localhost",
user: "root",
password: "",
database: "parser_db"
});
exports.handler = async event => {
connection.connect();
let response = {
statusCode: 400,
body: { Method: "Invalid", event }
};
var readTable = "SELECT * FROM documents where id = " + mysql.escape(1);
connection.query(readTable, function(err, results, fields) {
if (err) throw err;
else {
response = {
statusCode: 200,
body: { results }
//body: { results }
};
console.log(response);
return response;
}
});
};
谁能帮我查出这个问题吗。如果我在单独的文件中执行MySQL查询并返回结果集,那么它也不起作用
注意:如果我使用console.log(response)打印结果,而不是返回
显示正确的结果
问题是您正在从connection.query()回调函数中返回响应。这使得response成为回调函数的返回值,而不是外部Lambda函数的返回值 重组此代码的一种方法如下所示:
exports.handler = async (event) => {
connection.connect();
return new Promise((resolve, reject) => {
const readTable = `SELECT * FROM documents where id = ${mysql.escape(1)}`;
connection.query(readTable, (err, results, fields) => {
if (err) {
reject(err);
} else {
resolve({statusCode: 200, body: {results}});
}
});
});
};
除了@jarmod的答案外,您还可以使用该方法提示
连接。查询
,以便使用等待
关键字,使代码更简单
const util = require('util');
exports.handler = async (event) => {
connection.connect();
const readTable = `SELECT * FROM documents where id = ${mysql.escape(1)}`;
const connQueryPromisified = util.promisify(connection.query).bind(connection);
const result = await connQueryPromisified(readTable);
return {statusCode: 200, body: {results}};
};
除了“它不起作用”之外,你对这个问题了解更多吗?这并没有给任何人太多的机会。我的意思是它不会返回任何结果。。。代码执行很好。。。我在note@bobrodes中提到了让我改变一下。您将
console.log
放在哪里?就在返回响应
行旁边?请现在检查代码。。。在控制台中打印响应,但不返回任何内容@bobrodest问题是您正在从connection.query()回调函数中返回响应。这使得response成为回调函数的返回值,而不是外部Lambda函数的exports.handler()的返回值。