首页 > 解决方案 > Node.js Lambda 函数未运行 MySQL 查询

问题描述

我有一个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"
  };
};

当我运行它时,我得到了我设置的错误/没有发生的结果。如何让它执行查询?

标签: mysqlnode.jsamazon-web-servicesaws-lambda

解决方案


你返回声明:

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函数的代码)。


推荐阅读