如何从nodejs中的其他文件回调函数?
问题描述:
我开始使用异步编程,我做了一个nodejs应用程序,我在一些文件中分割了代码:index.js,ctlUser.js,DAO.js等等...... Index.js是主要文件它需要ctlUser和ctlUser需要DAO.js ... DAO连接到数据库和执行查询...如何从nodejs中的其他文件回调函数?
抽象,我的结构是这样的......
Index.js
var ctlUser = require('./ctlUser.js');
var username = ctlUser.getUserName('1');
console.log("Return from ctlUser" + username);
ctlUser.js
var DAO = require('./DAO.js');
var getUserName = function(id){
var userName = DAO.executeQuery("SELECT username FROM tbUsers WHERE id = " + id);
console.log(Return from DAO = userName);
return username;
}
个
DAO.js这里是样样精...
var mysql = require('mysql');
var executeQuery = function(query) {
var connection = mysql.createConnection({
host : SERVER,
user : USER,
password : PASSWORD,
database : DATABASE
});
connection.connect();
connection.query(query, function(err, rows, fields) {
if (err) throw err;
connection.end();
console.log("Here in DAO: " + rows[0].username);
return rows[0].username;
});
};
的$ node index.js
输出是:
Return of ctlUser: undefined
Return of DAO: undefined
Here in DAO: Filipe Tagliacozzi
林抽象所有模块的出口everithing正常工作与固定变量,但数据库的响应不要..如何在此结构中实现回调以将userName引用到index.js?
答
更改DAO.js模块中的executeQuery函数以使用回调:
var executeQuery = function(query,callback) {
var connection = mysql.createConnection({
host : SERVER,
user : USER,
password : PASSWORD,
database : DATABASE
});
connection.connect();
connection.query(query, function(err, rows, fields) {
if (err) throw err;
connection.end();
console.log("Here in DAO: " + rows[0].username);
callback(rows[0].username);
});
};
链通过您getUserName函数的回调中ctlUser.js:
var getUserName = function(id,callback){
DAO.executeQuery("SELECT username FROM tbUsers WHERE id = " + id ,function(username){
console.log("Return from DAO =" ,userName);
callback(username);
});
}
然后使用它在index.js像这样:
var ctlUser = require('./ctlUser.js');
ctlUser.getUserName('1',function(username){
console.log("Return from ctlUser" + username);
});
答
它们未定义,因为您尚未导出任何内容。
节点文件在您需要它们时执行,但返回的内容是导出的内容。
在ctlUser.js需要getUserName导出为这样: -
exports.getUserName = getUserName;
并在您需要的executeQuery导出为这样DAO.js: -
exports.executeQuery = executeQuery;
+0
林抽象的所有模块出口..其工作的罚款 – 2013-05-14 14:28:01
..这是我在谈论什么...我现在尝试tnx ,,, – 2013-05-14 14:30:11
我在 “callback(rows [0] .username)”的DAO行中得到一个错误“未定义不是函数” – 2013-05-14 14:44:37
在getUserNam的console.log行中缺少引号e函数在ctlUser.js中。我修复并测试过。现在它为我工作。 – 2013-05-14 16:27:13