mysql - 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"
};
};
当我运行它时,我得到了我设置的错误/没有发生的结果。如何让它执行查询?
解决方案
你返回声明:
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
});
});
});
};
请注意,在调用方您将需要执行以下操作之一:
- 等待电话,例如
var res = await handler(...)
- 使用
then
和回调,例如handler(...).then(res => {...})
(如果您想要更具体的调用方示例,请分享调用您的handler
函数的代码)。
推荐阅读
- ffmpeg - ffmpeg 多个文本/徽标元素
- laravel - Laravel 多支点关系
- azure-pipelines - Azure DevOps (VSTS) 通过 YAML 链接变量组
- sql - 使用 IF/ELSE 语句在 SELECT 上触发 PostgreSQL UPDATE
- azure-scheduler - Azure 调度程序长时间运行的 HTTP 操作
- rally - Rally - RallyGridBoard 中的数据上下文和 InlineFilter 问题
- python - 如何避免python中的额外换行?
- reactjs - TypeError: _this2.props.someFunciton 不是函数 - 反应
- r - 使用字符串访问正式的 R 类对象元素
- javascript - 如何通过单击切换特定的 JavaScript 函数?