sql >> Databasteknik >  >> RDS >> Mysql

Fråga efter en MySQL-databas från en NodeJS AWS Lambda-funktion

Problemet var att jag behövde sätta mitt sammanhang. lyckas i mina återuppringningar. Stort tack till sqlbot, eftersom hans tal om återuppringningar ledde till att jag studerade var saker och ting faktiskt slutade genomföras.

Så tydligen när du använder AWS Lambda, om "sammanhanget" slutar innan dina återuppringningar blir uppringda, får du inte dina återuppringningar. Så även om jag hade gjort alla mina callbacks så här:connect -> query -> end, den första callbacken i kedjan från connect anropas aldrig eftersom "context.succeed" anropades direkt efteråt, vilket avslutade exekveringen.

Här är min kod från och med nu (får en korrekt fråga nu):

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. ta bort duplicerande fält i php-mysql resultatrader

  2. Varför Oracle-skärmar??? för specialtecken som åäö

  3. mysql-struktur för kommentarer och kommentarsvar

  4. Konvertera tabell från MyISAM till INNODB