我目前正在为可能有很多用户的移动应用开发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数据库的高性能连接?
答案 0 :(得分: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);
});