带有Node.js和Restify的MySQL数据库池

时间:2016-10-02 23:04:25

标签: javascript mysql node.js restify

我目前正在为可能有很多用户的移动应用开发node.js后端。然而,这是我第一次开发node.js.我正在关注如何通过mysql池连接到mysql数据库的tutorial

我可以创建一个mysql连接并通过我的路由进行查询。

一旦我建立了教程中提到的文件结构,就会出现问题:

dbConnect
-[models]
--users.js
-db.js
-server-ks

我没有收到有关mysql数据库连接的错误消息 - 即使我输入了错误的密码。

// server.js

/////////////////////////////   basic setup ///////////////////////////////////

var restify = require('restify');
var bodyParser = require('body-parser');
var mysql = require('mysql');
var db = require('./db');
var users = require('./models/users');



/////////////////////////////   initilisation of the server   ///////////////////////////////////
var server = restify.createServer({
    name: 'testUsers',
});
server.use(restify.bodyParser({ mapParams: true }));

/////////////////////////////       Säuberung der URL       //////////////////////////////////////////
server.pre(restify.pre.sanitizePath()); 

/////////////////////////////       MySQL Instanz starten   //////////////////////////////////////////

db.connect(db.MODE_PRODUCTION, function (err) {
    if (err) {
        console.log('Unable to connect to MySQL.')
        process.exit(1)
    } else {
        server.listen(8080, function () {
            console.log('Listening on port 8080 ...')
        })
    }
})


/////////////////////////////       implementation of the routes  ///////////////////////////////////
function send(req, res, next) {
var test = users.getAll();
    res.json({ test: 'Hello ' + req.params.name });
    return next();
};

我的DB.js文件如下所示:



    var mysql = require('mysql'),
         sync = require('async')
    
    var PRODUCTION_DB = 'userDB',
        TEST_DB = 'userDB'
    
    exports.MODE_TEST = 'mode_test'
    exports.MODE_PRODUCTION = 'mode_production'
    
    var state = {
        pool: null,
        mode: null,
    }
    
    exports.connect = function (mode, done) {
        state.pool = mysql.createPool({
            connectionLimit: 50,
            host: 'localhost',
            user: 'user',
            password: 'password',
            database: 'userDB' // test
    
            //mode === exports.MODE_PRODUCTION ? PRODUCTION_DB : TEST_DB
        })
    
        
        state.mode = mode
        done()
     }
    
    exports.get = function () {
        return state.pool
    }




可能是,该教程在利用mysql池和node.js方面不遗余力吗?

提前致谢至少试图回答这个问题。

是否有更好的方法sequelize(?)可用于创建与MySQL数据库的高性能连接?

1 个答案:

答案 0 :(得分:1)

看起来创建池对象实际上并不连接到数据库。一个很大的线索是createPool函数不是异步的,如果它在那一刻实际连接,那就是你所期望的。

您必须使用返回的池对象来执行查询,这是异步的。

来自documentation

var mysql = require('mysql');
var pool  = mysql.createPool({
    connectionLimit : 10,
    host            : 'example.org',
    user            : 'bob',
    password        : 'secret',
    database        : 'my_db'
});

pool.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
    if (err) throw err;

    console.log('The solution is: ', rows[0].solution);
});