Lambda函数MySQL结果不适用于NodeJs 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

我在节点6.10中有一个代码,它正在工作。。。 但是如果我把它转换成节点8.10,它就不工作了

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()的返回值。