Javascript 将aws lambda连接到rds的已断开响应

Javascript 将aws lambda连接到rds的已断开响应,javascript,amazon-web-services,aws-lambda,amazon-rds,amazon-lex,Javascript,Amazon Web Services,Aws Lambda,Amazon Rds,Amazon Lex,我正在尝试将lambda函数连接到rds,以便在Amazon Lex上查询它,但我似乎无法连接到rds。vpc和安全组部分已经解决,因为它们只处理一个简单的功能。下面是我的代码示例${connection.status}正在返回断开连接。如果我能得到任何帮助,我将不胜感激。谢谢 为了清楚起见,我实际上在顶部定义了一个分派函数。导出处理程序在下面进行。编辑代码以使其非常清晰 function dispatch(intentRequest, callback) { const session

我正在尝试将lambda函数连接到rds,以便在Amazon Lex上查询它,但我似乎无法连接到rds。vpc和安全组部分已经解决,因为它们只处理一个简单的功能。下面是我的代码示例${connection.status}正在返回断开连接。如果我能得到任何帮助,我将不胜感激。谢谢

为了清楚起见,我实际上在顶部定义了一个分派函数。导出处理程序在下面进行。编辑代码以使其非常清晰

function dispatch(intentRequest, callback) {
    const sessionAttributes = intentRequest.sessionAttributes;
    const slots = intentRequest.currentIntent.slots;
    const mysql = require('mysql');

    var connection = mysql.createConnection({
        host: 'xxx',
        user: 'admin',
        password: 'xxx',
        database: 'xxx',
        port: 3306
    });

    exports.handler = (event, context) => {
        connection.connect(function (err) {
            if (err) {
                context.fail();
            } else {
                context.succeed('Success');
            }
        });
    };

    callback(close(sessionAttributes, 'Fulfilled', {
        'contentType': 'PlainText',
        'content': `Thank you ${connection.state}`
    }));
}

// Route the incoming request based on intent.
// The JSON body of the request is provided in the event slot.
exports.handler = (event, context, callback) => {
    try {
        dispatch(event, (response) => {
            callback(null, response);
        });
    } catch (err) {
        callback(err);
    }
};

由于RDS连接的初始化是异步的,因此需要在
connection.connect的回调中移动逻辑

const mysql = require('mysql');

var connection = mysql.createConnection({
    host: 'xxx',
    user: 'admin',
    password: 'xxx',
    database: 'xxx',
    port: 3306
});

exports.handler = (event, context, callback) => {
    connection.connect(function (err) {
        if (err) {
            callback(err);
        } else {
            callback(null, close(sessionAttributes, 'Fulfilled', {
                'contentType': 'PlainText',
                'content': `Thank you ${connection.state}`
            }));
        }
    });
};
编辑:
请记住
回调
中参数的顺序。第一个参数应该是错误,第二个参数是响应。

由于RDS连接的初始化是异步的,您需要在
连接的回调中移动逻辑。connect

const mysql = require('mysql');

var connection = mysql.createConnection({
    host: 'xxx',
    user: 'admin',
    password: 'xxx',
    database: 'xxx',
    port: 3306
});

exports.handler = (event, context, callback) => {
    connection.connect(function (err) {
        if (err) {
            callback(err);
        } else {
            callback(null, close(sessionAttributes, 'Fulfilled', {
                'contentType': 'PlainText',
                'content': `Thank you ${connection.state}`
            }));
        }
    });
};
编辑:
请记住
回调
中参数的顺序。第一个参数应该是错误,第二个参数是响应。

我认为在
连接中使用回调可能会发生一些异步处理。connect
函数它可能在
连接之前命中Lambdas
回调
函数。connect
函数触发

此外,将回调保留在
exports.handler

尝试将您的函数更新到以下位置

const mysql = require("mysql");

 var connection = mysql.createConnection({
 host     : 'xxx',
 user     : 'admin',
 password : 'xxx',
 database : 'xxx',
 port : 3306
});

exports.handler = async (event, context) => {
 await connection.connect(function(err) {
   if (err) context.fail();
   else context.succeed('Success');
 });

callback(close(sessionAttributes, 'Fulfilled',
 {'contentType': 'PlainText', 'content': `Thank you ${connection.state}`}));
};

我相信在
连接中使用回调可能会发生一些异步处理。connect
函数可能会在
连接触发之前命中Lambdas
回调
函数。connect
函数

此外,将回调保留在
exports.handler

尝试将您的函数更新到以下位置

const mysql = require("mysql");

 var connection = mysql.createConnection({
 host     : 'xxx',
 user     : 'admin',
 password : 'xxx',
 database : 'xxx',
 port : 3306
});

exports.handler = async (event, context) => {
 await connection.connect(function(err) {
   if (err) context.fail();
   else context.succeed('Success');
 });

callback(close(sessionAttributes, 'Fulfilled',
 {'contentType': 'PlainText', 'content': `Thank you ${connection.state}`}));
};

请将
exports.handler
声明为
async
,否则将导致错误。您好,感谢您的回复。我尝试将异步函数添加到其中以匹配等待函数,但它从lambda生成了空响应。我的代码如下:
exports.handler=async(event,context)=>{await connection.connect(函数(err){if(err)context.fail();else context.Success('Success');});callback(close(sessionAttributes,'impleted',{'contentType':'PlainText','content':'Thank you${connection.state});}有趣,如果你在回调中为你的连接添加了任何注释。connect是否会在CloudWatch日志中打印它们?嘿,Chris,谢谢你的回复。我对上面的原始代码做了一些小的修改。你能看看这是否是个问题吗。非常感谢。请将
exports.handler
声明为
async
,否则将导致错误。您好,感谢您的回复。我尝试将异步函数添加到其中以匹配等待函数,但它从lambda生成了空响应。我的代码如下:
exports.handler=async(event,context)=>{await connection.connect(函数(err){if(err)context.fail();else context.Success('Success');});callback(close(sessionAttributes,'impleted',{'contentType':'PlainText','content':'Thank you${connection.state});}有趣,如果你在回调中为你的连接添加了任何注释。connect是否会在CloudWatch日志中打印它们?嘿,Chris,谢谢你的回复。我对上面的原始代码做了一些小的修改。你能看看这是否是个问题吗。非常感谢。错误消息显示存在未处理的错误响应。感谢您的响应。这表明它收到了来自lambda的空响应。你好@MaiKaY谢谢你的回复。我编辑了上面的代码以使其更清晰。我实际上定义了一个分派函数。你能看看这是否是一个潜在的问题吗?非常感谢。错误消息显示存在未处理的错误响应。感谢您的响应。这表明它收到了来自lambda的空响应。你好@MaiKaY谢谢你的回复。我编辑了上面的代码以使其更清晰。我实际上定义了一个分派函数。你能看看这是否是一个潜在的问题吗?非常感谢。