node.js中的计时问题

时间:2012-11-01 15:36:25

标签: node.js express

我无法理解如何正确处理节点回调中的分配。我正在阅读一个配置文件,并使用道具解析.yaml在快递应用程序中设置它的值。当我尝试使用我显然设置的东西时,我无法app.get这些值。 (道具模块需要cfg_decoder)。 console.log()在回调中正常工作,但是如何在回调之外处理app.get或知道何时设置了值?

app = express()

fs.readFile('./config.yaml', function (err,data) {
  if (err) {
    return console.log(err);
  }

  cfg = cfg_decoder(data);
  app.set('title', cfg['title'])
  app.set('port', cfg['port'])

  console.log(app.get('title'))

});

另外,这是设置配置选项的好方法吗?

1 个答案:

答案 0 :(得分:1)

只要快捷方式对象已经实例化,您就可以在任何范围内使用app.get()方法。

你可以让你的fs.readFile()函数返回你的设置值,然后让app.set()在read函数的范围之外完成。

function read(file){
    var content;
    fs.readFileSync(file, function (err, data) {
        if (err) return console.log(err);
        content = cfg_decoder(data);
    });
    return content;
}

var config = read('./config.yaml');
app.set('title', cfg['title'])
app.set('port', cfg['port'])

对于我的应用程序,我使用config.js文件,或者您可以使用config.json文件(这会更容易)。在我的.js文件中,我只有一个对象数组声明,并将它导出该对象。

<强> Config.js

var config = {
    host: '127.0.0.1',
    port: '8000',
    title: 'Title',
    /* etc */
};
module.exports = config;

<强> App.js

var config = require('./config'),
    express = require('express'),
    app = express();

app.set('title', config.title);
app.listen(config.port, config.host);

我希望这会有所帮助。