sql >> Database >  >> RDS >> Mysql

Een MySQL-database opvragen vanuit een NodeJS AWS Lambda-functie

Het probleem was dat ik mijn context.succeed in mijn callbacks moest plaatsen. Veel dank aan sqlbot, omdat zijn gepraat over callbacks me ertoe bracht te onderzoeken waar de uitvoering ervan feitelijk eindigde.

Dus blijkbaar, als je AWS Lambda gebruikt, als de "context" eindigt voordat je callbacks worden gebeld, krijg je je callbacks niet. Dus hoewel ik al mijn callbacks als volgt had geplaatst:connect -> query -> end, de eerste callback van de keten van connect wordt nooit aangeroepen omdat "context.succeed" meteen daarna werd aangeroepen, wat de uitvoering beëindigde.

Hier is mijn code vanaf nu (er wordt nu een goede query uitgevoerd):

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. Hoe kan ik een lijst krijgen van alle functies die zijn opgeslagen in de database van een bepaald schema in PostgreSQL?

  2. Veld bijwerken indien niet null

  3. Omgaan met trage zoekopdrachten met PostgreSQL

  4. utf-8 versus latin1