sql >> Databáze >  >> RDS >> Mysql

Dotazování databáze MySQL z funkce NodeJS AWS Lambda

Problém byl v tom, že jsem do zpětných volání potřeboval vložit svůj kontext.succeed. Mnohokrát děkuji sqlbotovi, protože jeho řeč o zpětných voláních mě přivedla ke studiu, kde věci ve skutečnosti končí.

Pokud tedy při používání AWS Lambda „kontext“ skončí dříve, než vám budou zavolána zpětná volání, nebudete zpětná volání přijímat. Takže i když jsem všechna svá zpětná volání umístil takto:connect -> dotaz -> konec, první zpětné volání řetězce z connect se nikdy nezavolá, protože "context.succeed" bylo voláno hned poté, což ukončilo provádění.

Zde je můj kód od nynějška (teď probíhá správný dotaz):

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. MySQL:jak provést zabezpečení na úrovni řádků (jako je virtuální privátní databáze Oracle)?

  2. Šifrování v klidu a/nebo AES_ENCRYPT

  3. Postupujte podle návrhu tabulky uživatelské databáze

  4. Trendy databázového hardwaru a infrastruktury