node.js - 从 Node lambda 调用时未从 AWS RDS 获取任何结果

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

我需要帮助。我一整天都在阅读 stackechange,但我仍然无法破解这个问题。

我已经启动并运行了无服务器 AWS RDS 数据库。我知道它就在那里,因为我已经通过桌面上的 EC2 实例调整连接到它(此时我设置了我想要的所有表和数据)。

我现在尝试连接到它并使用在 Node 中编写的 lambda 运行东西(我正在学习)。

我得到的代码是这样的:

exports.handler = async (event, context) => {

var mysql = require('mysql');
console.log('Making connection');

var con = mysql.createConnection({
  host: "XXXXXXXXXXXXXXXX.amazonaws.com",
  user: "xxxxx",
  password: "xxxxxx",
  database: "xxxxxx"
});

console.log('About to query');
con.query('SELECT * FROM players', function(error, results, fields) {
  console.log('Query has run');
  console.log('Row Details:', JSON.stringify(results));
  context.succeed(JSON.stringify(results));
});

};

但是对于我的一生来说,我看不到结果回来。我在 cloudwatch 日志中得到这样的信息:

START RequestId: a1e383cc-ee70-11e8-aac6-51ba776a3581 Version: $LATEST
2018-11-22T16:06:55.667Z    a1e383cc-ee70-11e8-aac6-51ba776a3581    Making connection
2018-11-22T16:06:56.356Z    a1e383cc-ee70-11e8-aac6-51ba776a3581    About to query
END RequestId: a1e383cc-ee70-11e8-aac6-51ba776a3581
REPORT RequestId: a1e383cc-ee70-11e8-aac6-51ba776a3581  Duration: 769.66 ms Billed Duration: 800 ms Memory Size: 128 MB Max Memory Used: 24 MB
START RequestId: be7f1fbd-ee70-11e8-981b-c1b991028291 Version: $LATEST
2018-11-22T16:07:43.497Z    a1e383cc-ee70-11e8-aac6-51ba776a3581    Query has run
2018-11-22T16:07:43.515Z    a1e383cc-ee70-11e8-aac6-51ba776a3581    Row Details: undefined
2018-11-22T16:07:43.535Z    be7f1fbd-ee70-11e8-981b-c1b991028291    Making connection
2018-11-22T16:07:43.535Z    be7f1fbd-ee70-11e8-981b-c1b991028291    About to query
END RequestId: be7f1fbd-ee70-11e8-981b-c1b991028291

我认为正在对数据库进行调用,因为我没有看到错误。

我从 AWS Lambda 控制台上的测试函数调用它,我假设我应该看到一些 JSON 作为调用正文返回。然而我得到的只是“null”

我猜由于调用的异步性质,我没有看到结果。但我读到的所有内容都告诉我代码应该可以工作并且应该等待调用返回,或者至少应该在此调用的生命周期内。

我完全被困住了。如果有人能给我一个提示,或者给我指出一个解释如何让它工作的网页,我将非常非常感激。

最佳答案

发生这种情况是由于 async-await 之间的混合造成的和非异步等待代码。要解决此问题,您可以进行的最小更改是删除处理程序函数签名之前的 async 关键字,如下所示:

exports.handler = (事件, 上下文) => {

如果您仍想使用异步函数,则必须使用此处所述的解决方法更新 mysql 查询代码:https://github.com/mysqljs/mysql/issues/1755#issuecomment-345459882

关于node.js - 从 Node lambda 调用时未从 AWS RDS 获取任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53434897/

相关文章:

amazon-web-services - 添加带有 Internet 网关的公共(public)子网和带有 NAT 的私有(private)子网时,RDS 公共(public)访问丢失

node.js - REST API 单元测试,并在 Node.js 中返回 Promise

python - 将现有 Python 应用程序导入 AWS Lambda

node.js - 使用 node.js/express 自动 HTTPS 连接/重定向

amazon-web-services - AWS Serverless,CloudFormation : Error, 尝试将非字符串值填充到变量的字符串中

mysql - AWS Aurora Auto Scaling 组数据库关闭导致 mysql 服务器消失问题

ios - 如何在 Swift 中初始化 AWSCognitoIdentityUserAttributeType?

amazon-web-services - 我的 Lambda 代码在 S3 中的存储位置

javascript - 我正在尝试使用 XSLT 转换 Evernote 的 ENMLinto markdown,并且 node_xslt 提示未知标签和实体

javascript - 在 React Native 中登录凭据无效时如何显示警报消息?