How to provide a mysql database connection in single file in nodejs

前端 未结 6 626
一整个雨季
一整个雨季 2020-12-04 08:42

I need to provide the mysql connection for modules. I have a code like this.

var express = require(\'express\'),
app = express(),
server = require(\'http\').         


        
6条回答
  •  攒了一身酷
    2020-12-04 09:43

    I took a similar approach as Sean3z but instead I have the connection closed everytime i make a query.

    His way works if it's only executed on the entry point of your app, but let's say you have controllers that you want to do a var db = require('./db'). You can't because otherwise everytime you access that controller you will be creating a new connection.

    To avoid that, i think it's safer, in my opinion, to open and close the connection everytime.

    here is a snippet of my code.

    mysq_query.js

    // Dependencies
    var mysql   = require('mysql'),
        config  = require("../config");
    
    /*
     * @sqlConnection
     * Creates the connection, makes the query and close it to avoid concurrency conflicts.
     */
    var sqlConnection = function sqlConnection(sql, values, next) {
    
        // It means that the values hasnt been passed
        if (arguments.length === 2) {
            next = values;
            values = null;
        }
    
        var connection = mysql.createConnection(config.db);
        connection.connect(function(err) {
            if (err !== null) {
                console.log("[MYSQL] Error connecting to mysql:" + err+'\n');
            }
        });
    
        connection.query(sql, values, function(err) {
    
            connection.end(); // close the connection
    
            if (err) {
                throw err;
            }
    
            // Execute the callback
            next.apply(this, arguments);
        });
    }
    
    module.exports = sqlConnection;
    

    Than you can use it anywhere just doing like

    var mysql_query = require('path/to/your/mysql_query');
    mysql_query('SELECT * from your_table where ?', {id: '1'}, function(err, rows)   {
        console.log(rows);
    });
    

    UPDATED: config.json looks like

    {
            "db": {
            "user"     : "USERNAME",
            "password" : "PASSWORD",
            "database" : "DATABASE_NAME",
            "socketPath": "/tmp/mysql.sock"
        }
    }
    

    Hope this helps.

提交回复
热议问题