Node.js Lambda函数未运行MySQL查询

时间:2020-04-10 20:23:43

标签: mysql node.js amazon-web-services aws-lambda

我有一个安装了mysql库的Node.js Lambda函数。当我运行它时,它不执行query()函数,只是跳过了它。这是我的代码:

const mysql = require('mysql');

const con = mysql.createConnection({
  host     : process.env.RDS_HOSTNAME,
  user     : process.env.RDS_USERNAME,
  password : process.env.RDS_PASSWORD,
  port     : process.env.RDS_PORT
});

exports.handler = async (event) => {
  con.query("UPDATE users SET status=-1 WHERE users.id = ?", [event.params.querystring.id], function (err, result) {
    if (err) throw err;
    return {
      success: true
    };
  });
  return {
    error: true,
    message: "Nothing happened"
  };
};

运行此命令时,我得到的错误/设置没有任何结果。如何获取执行查询的信息?

1 个答案:

答案 0 :(得分:0)

您的退货声明:

return {
  success: true
};

与您的功能handler不相关。相反,它与您定义为query的“回调”的匿名函数有关。本质上,在调用con.query时,您要求它执行查询,然后在完成查询后(将来的任何时候),调用回调函数,并从查询中返回并解析结果。完成此操作后,您的函数仅返回“负数”情况。

您可以将handler更改为以下内容:

exports.handler = (event) => {
  return new Promise((resolve,reject) => {
    con.query("UPDATE users SET status=-1 WHERE users.id = ?", [event.params.querystring.id], function (err, result) {
      if (err) reject(err);
      resolve({
        success: true
      });
    });
  });
};

请注意,在呼叫方您将需要执行以下一项操作:

  1. 等待呼叫,例如var res = await handler(...)
  2. 使用then和回调,例如handler(...).then(res => {...})

(如果您需要调用方的更具体示例,请也共享调用handler函数的代码。)