Пул БД MySQL с Node.js и восстановить

#javascript #mysql #node.js #restify

#javascript #mysql #node.js #restify

Вопрос:

В настоящее время я разрабатываю node.js серверная часть для мобильного приложения с потенциально большим количеством пользователей. Однако это мой первый раз в разработке node.js . Я следил за учебным пособием о том, как подключиться к базе данных mysql через пулы mysql.

Я могу создать одно соединение с 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:

Похоже, что создание объекта пула фактически не подключается к базе данных. Большая подсказка заключается в том, что функция createPool не является асинхронной, чего можно было бы ожидать, если бы она действительно подключалась в этот момент.

Вы должны использовать возвращаемый объект пула для выполнения запроса, который является асинхронным.

Из документации:

 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);
});