Skip to content

Instantly share code, notes, and snippets.

@ctala
Created December 5, 2019 20:03

Revisions

  1. ctala renamed this gist Dec 5, 2019. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. ctala created this gist Dec 5, 2019.
    100 changes: 100 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,100 @@
    'use strict';

    const mysql = require('mysql2');
    const connectionParams = {
    host: process.env.DB_HOST,
    user: process.env.DB_USER,
    password: process.env.DB_PASS,
    database: process.env.DB_NAME,
    port: process.env.DB_PORT,
    };

    let connection;

    module.exports.hello = async event => {

    console.log("Starting query ...", connectionParams);
    connection = mysql.createConnection(connectionParams);

    /**
    * Inicializamos los resultados por defecto del return.
    * En primera instancia siempre retornamos error a menos que se demuestre lo contrario
    */
    let queryResult;
    let statusCode = 500;
    let bodyMessage = {};

    /**
    * Siempre retornamos en el finally, lo que hacemos es cambiar el contenido del mensaje.
    */
    try {
    await connect(); //Conectamos
    queryResult = await testQuery(); //Generamos la query
    await connectionEnd(); //Cerramos conexión
    statusCode = 200;
    bodyMessage = queryResult;

    } catch (error) {
    console.log(error);
    statusCode = 500;
    bodyMessage = {
    error: error
    }
    } finally {
    return responseMessage(statusCode, bodyMessage);
    }
    };



    function responseMessage(statusCode = 200, body = {}) {
    return {
    statusCode: statusCode,
    body: JSON.stringify(body,
    null,
    2
    ),
    };
    }


    function connect() {
    return new Promise((resolve, reject) => {
    connection.connect(function (err) {
    if (err) {
    console.error('error connecting: ' + err.stack);
    reject(err);
    } else {
    resolve(connect.threadId);
    }
    })
    })
    }


    function testQuery() {
    return new Promise((resolve, reject) => {
    connection.query("SELECT * FROM user LIMIT 10", function (err, result, fields) {
    if (err) {
    reject(err);
    } else {
    console.log(result);
    resolve(result);
    }
    });
    })
    }

    function connectionEnd() {
    return new Promise((resolve, reject) => {
    connection.end(function (error, results) {
    // The connection is terminated now
    console.log("Connection ended");
    if (error) {
    reject(error);
    } else {
    resolve(results);
    }
    });
    })
    }