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