Javascript 具有错误工作流的Nodejs回调
我是NODE的新手,正在尝试以下代码:Javascript 具有错误工作流的Nodejs回调,javascript,mysql,node.js,Javascript,Mysql,Node.js,我是NODE的新手,正在尝试以下代码: require('../../constants.js'); function dbConnect() { var mysql = require('mysql'); var connection = mysql.createConnection({ host : DB_HOST, database : DB_NAME, user : DB_U
require('../../constants.js');
function dbConnect() {
var mysql = require('mysql');
var connection = mysql.createConnection({
host : DB_HOST,
database : DB_NAME,
user : DB_USER,
password : DB_PASS,
});
connection.connect(function(err) {
console.log("Database is connected ...");
});
return connection;
}
function dbDisconnect(connection) {
connection.end();
console.log("Closing DB Connection");
}
function findPlayer(surname) {
var connection = dbConnect();
console.log("Finding -> " + surname);
var query = 'SELECT * FROM players WHERE surname = "' + surname + '"';
connection.query(query, function(err, rows, fields)
{
if (err) throw err;
for (var i in rows) {
console.log('Players: ', rows[i].surname);
}
});
dbDisconnect(connection);
}
exports.findPlayer = findPlayer;
之后,我有一个laucher文件:
require('./constants.js');
var aar = require('./libs/DBManager.js')
console.log('Loading DBManager');
var player = aar.findPlayer('Potter');
console.log(player);
正确的工作流程是:
- 加载数据库管理器
- 数据库已连接
- 查找->波特
- 玩家:波特
- 关闭数据库连接
- 加载数据库管理器
- 查找->波特
- 关闭数据库连接
- 未定义
- 数据库已连接
- 玩家:波特
我怎么了?是否存在回调问题?在确定查询完成之前,您正在关闭连接。 您应该将
dbDisconnect(连接)置于断开状态代码>在查询结束后但在回调内部
connection.query(query, function(err, rows, fields)
{
if (err) throw err;
for (var i in rows) {
console.log('Players: ', rows[i].surname);
}
dbDisconnect(connection);
});
而且findPlayer没有返回任何内容,因此console.log(player)代码>将是未定义的Javascript本质上是异步的,它不等待I/O操作。任何网络调用(包括连接到数据库的请求)都属于I/O操作
问题是,您正在请求一个DB连接,在它返回之前,您正在打电话为玩家获取数据。我建议您将回调方法传递给
dbConnect(callback)
在该回调中,传递要执行的查询或操作:
创建一个回调方法,该方法包含检索玩家信息的代码
调用dbConnect()以建立与数据库的连接,并将回调作为参数传递
建立连接后,执行回调
完成后,可以关闭连接,但要确保关闭连接的代码在回调中,并且只有在从Db接收到数据后才执行
相反,如果您对ORM感到满意,我建议您尝试一下,它将创建和断开与DB的连接的要求抽象出来,这样您就可以专注于crud操作。请同时指定文件名,解释有点混乱。但是你需要考虑的是,连接到DB是异步的,所以当你请求连接到db NoDE.js时,向前移动并执行下一个语句。因此,您将获得连接到数据库的消息。代码的第一部分是libs/DBManager.js,第二部分是index.js。您能给我一个关于它的代码示例吗?