我是js / nodejs / express的新手,并且我自己尝试在类似MVC的模式中构建我的文件
问题是 console.log (在routes.js,最重要的)返回 undefined ,而第二个返回实际数据,并由同样,节点如何以异步方式将数据从模型返回到路径?
在我的server.js
require('./modules/pos/routes')(app);
require('./modules/pos/models/inventory')(app);
在我的routes.js
中module.exports = function(app) {
Inventory = require('./models/inventory')(app);
app.get('/poss', function(req, res) {
var result = Inventory.get();
console.log('result1 is',result); // !
res.end(JSON.stringify(result));
});
}
在我的inventory.js
中module.exports = function(app) {
return {
get : function() {
var res;
app.conn.query('SELECT * FROM users', function(err, rows) {
res = JSON.stringify({users : rows});
console.log("result is ",res); // !
return res;
});
}
}
}
P.S在终端中执行node server
,并浏览到localhost:8000给出
result1 is undefined
result is {"users":[{"id":1, "username": ...blah..
答案 0 :(得分:2)
你的第一个console.log在第二个之前执行。并且get
方法不返回任何内容,因为返回的方法是get
内的方法。为了使您的方法async
添加回调,如下所示:
// inventory.js
module.exports = function(app) {
return {
get : function(cb) {
app.conn.query('SELECT * FROM users', function(err, rows){
if (err) {
return cb(err);
}
res = JSON.stringify({users : rows});
console.log("result is ", res);
cb(null, res)
});
}
};
};
// routes.js
module.exports = function(app) {
var Inventory = require('./models/inventory')(app);
app.get('/poss', function(req, res) {
Inventory.get(function (err, result) {
if (err) {
// do something else in case of error
return;
}
res.end(result); // you don't need to use json stringify here cause the result is serialized
});
});
}