我正在学习node.js所以请耐心等待。
我正在尝试使用express + jade创建一个node.js Web应用程序,它基本上只是一个行队列。 (I.E.取一个数字,排队等候,现在服务4号...除了4将是一个mysql表字段)。该页面将每5秒自动更新一次。页面处理有三个行队列(I.E):3000/1:3000/2:3000/3。
要明确的是,我的应用程序正在运行,但我想确保我正确地执行此操作,而不是仅仅使用糟糕的方法将其破解。
在我的index.js中,我有标准设置:
exports.bio = function(req, res){
res.render('index', {
location: 'Biometrics',
number: bio()
});
};
exports.interview = function(req, res){
res.render('index', {
location: 'Interview',
number: interview()
});
};
exports.docs = function(req, res){
res.render('index', {
location: 'Documentation',
number: doc()
});
};
我目前也在index.js中调用“number:”JSON值的值。
var doc = (function() {
//do javascript and data calls
return a;
});
var bio = (function() {
//do javascript and data calls
return a;
});
var interview = (function() {
//do javascript and data calls
return a;
});
我的问题是:建议的方法是什么,还是我走在正确的轨道上?
答案 0 :(得分:3)
只要函数doc(),bio()和interview()是同步的,这将有效,但很可能不是这种情况,特别是如果他们需要执行某些数据库访问。
如果这些函数是异步的,那么你的看起来应该是这样的:
exports.docs = function(req, res){
// call the doc() function and render the response in the callback
doc(function(err, number) {
res.render('index', {
location: 'Documentation',
number: number
});
});
};
doc()
函数将如下所示:
var doc = (function(callback) {
// This code very likely be async
// therefore it won't return any value via "return"
// but rather calling your function (callback)
db.doSomething(someparams, callback);
});
在db.doSomething()
内,会调用您的函数callback(err, theValue)
答案 1 :(得分:0)
异步方式如下:
exports.docs = function(req, res) {
fetchSomeValueFromMysql(req.param('foo'), function (err, data) {
if (err) {
res.send(500, 'boom!');
return;
}
res.render('index', {
location: 'Documentation',
number: data
});
});
};
答案 2 :(得分:0)
假设您在bio()
;
exports.bio = function (req, res) {
bio(function (err, data) {
if (!err && data) {
res.render('index', {
location: 'Biometrics',
number: data
});
} else {
// handle error or no data
res.render('error');
}
});
}
var bio = function(cb) {
//do javascript and data calls
cb(err, data);
});
同样,有很多方法可以让它发挥作用。但上面应该这样做。