node.js - express - res.render():将变量提供给JSON参数的正确格式?

时间:2013-12-17 19:48:45

标签: javascript node.js pug

我正在学习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;
});

我的问题是:建议的方法是什么,还是我走在正确的轨道上?

3 个答案:

答案 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);
});

同样,有很多方法可以让它发挥作用。但上面应该这样做。