Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wysyłanie zapytań do bazy danych MySQL z funkcji NodeJS AWS Lambda

Problem polegał na tym, że musiałem umieścić mój context.succeed w moich wywołaniach zwrotnych. Wielkie podziękowania dla sqlbota, ponieważ jego rozmowa o wywołaniach zwrotnych doprowadziła mnie do zbadania, gdzie rzeczy faktycznie kończą ich wykonanie.

Najwyraźniej podczas korzystania z AWS Lambda, jeśli „kontekst” kończy się przed wywołaniem wywołań zwrotnych, nie otrzymasz wywołań zwrotnych. Tak więc, mimo że umieściłem wszystkie moje wywołania zwrotne w następujący sposób:connect -> query -> end, pierwsze wywołanie zwrotne łańcucha z connect nigdy nie zostanie wywołane, ponieważ zaraz potem zostało wywołane "context.succeed", co zakończyło wykonywanie.

Oto mój kod od teraz (od teraz pojawia się prawidłowe zapytanie):

var mysql = require('mysql');
var connection = mysql.createConnection({
    ...
});

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

        if (event.session.new) {
            // New Session
            console.log("NEW SESSION");
        }


        switch (event.request.type) {

            case "LaunchRequest":
                // Launch Request
                console.log(`LAUNCH REQUEST`);
                context.succeed(
                    generateResponse({},
                        buildSpeechletResponse("Welcome to an Alexa Skill, this is running on a deployed lamda function", true)
                    )
                );
                break;

            case "IntentRequest":
                // Intent Request
                console.log(`Intent Request`);
                console.log('Then run MySQL code:');
                connection.connect(function(err) {
                    console.log('Inside connection.connect() callback');
                    if (!err) {
                        console.log("Database is connected ... ");
                        connection.query("INSERT INTO Users (user_id) VALUES ('TESTNAME')",
                            function(err, result) {
                                console.log("Inside connection.query() callback")
                                if (!err) {
                                    console.log("Query Successful! Ending Connection.");
                                    connection.end();
                                } else {
                                    console.log("Query error!");
                                }
                            });
                    } else {
                        console.log("Error connecting database ..." + err.message);
                    }
                    context.succeed(
                        generateResponse({},
                            buildSpeechletResponse("Welcome to the incredible intelligent MySQLable Alexa!", true)
                        )
                    );
                });

                break;

            case "SessionEndedRequest":
                // Session Ended Request
                console.log(`SESSION ENDED REQUEST`);
                break;

            default:
                context.fail(`INVALID REQUEST TYPE: ${event.request.type}`);

        }

    } catch (error) {
        context.fail(`Exceptiodn: ${error}`)
    }

};

//Helpers
buildSpeechletResponse = (outputText, shouldEndSession) => {

    return {
        outputSpeech: {
            type: "PlainText",
            text: outputText
        },
        shouldEndSession: shouldEndSession
    };
};

generateResponse = (sessionAttributes, speechletResponse) => {
    return {
        version: "1.0",
        sessionAttributes: sessionAttributes,
        response: speechletResponse
    };
};



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstaw unikalne ciągi 8 losowych znaków

  2. Policz wiersze w bazie danych mysql, w których znacznik czasu znajduje się w przedziale X

  3. MySQL:Tworzenie nowej tabeli z informacjami z zapytania

  4. Jak mogę pominąć dane wyjściowe nagłówka kolumny dla pojedynczej instrukcji SQL?

  5. MYSQL — pobieranie znaczników czasu między datami