【问题标题】:Npm mysql + AWS Lambda: Cannot enqueue Query after invoking quitNpm mysql + AWS Lambda:调用退出后无法排队查询
【发布时间】:2020-03-08 16:36:58
【问题描述】:

我正在创建一些测试 AWS Lambda 函数,并且正在使用 npm mysql 包连接到 RDS 数据库。我有以下代码,它确实有效。但是,对函数的每一次其他命中都会导致错误。

代码:

exports.handler = (event, context, callback) => {
    connection.query("SELECT * FROM `cubes`", function (error, results, fields) {
        if (error) {
            connection.destroy();
            throw error;
        } else {
            // connected!
            console.log(results);
            callback(null, results);
            connection.end(function (err) { callback(err, results);});
        }
        return context.logStreamName
    });
};

错误:

{"errorType":"Error","errorMessage":"Cannot enqueue Query after invoking quit.","trace":> ["Error: Cannot enqueue Query after invoking quit."," at Protocol._validateEnqueue ( /var/task/node_modules/mysql/lib/protocol/Protocol.js:215:16)"," 在 Protocol._enqueue (/var/task/node_modules/mysql/lib/protocol/Protocol.js:138:13) "," 在 Connection.query (/var/task/node_modules/mysql/lib/Connection.js:201:25)"," 在 Runtime.exports.handler (/var/task/index.js:10:16) "," 在 Runtime.handleOnce (/var/runtime/Runtime.js:66:25)"]}

我一直在寻找解决方案,但没有找到可行的解决方案。我什至尝试注释掉connection.end() 部分,但随后该功能完全超时。根据 https://stackoverflow.com/a/15267082/1015214 之类的帖子,似乎只要在代码中的任何位置使用 connection.end() 就可以了,因为无论如何它总是在最后被触发,但 AWS Lambda 设置可能有所不同? ..

【问题讨论】:

标签: mysql amazon-web-services npm aws-lambda


【解决方案1】:

我有这个确切的问题。我在exports.handler 函数之外创建了我的连接var connection = mysql.createConnection({ ... });。根据https://gitmemory.com/issue/mysqljs/mysql/1296/491553221。全局变量在所有 lambda 执行中保持不变。因此,我将连接创建移到了exports.handler 函数中,问题就解决了。不过我是 lambda 新手,所以可能会有更好的实现。

【讨论】:

    猜你喜欢
    • 2021-12-13
    • 2023-03-21
    • 2012-12-29
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 2018-05-18
    相关资源
    最近更新 更多