1

我无法理解如何正确处理节点回调中的分配。我正在读取配置文件并使用道具在快速应用程序中设置它的值来解析.yaml。当我尝试使用我显然设置的内容时,我无法 app.get 这些值。(props 模块需要 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'))

});

附带说明一下,这是设置配置选项的好方法吗?

4

1 回答 1

1

只要实例化了 express 对象,您就应该能够在任何范围内使用 app.get() 方法。

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

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 文件中,我只有一个对象数组声明并让它导出该对象。

配置.js

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

应用程序.js

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

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

我希望这有帮助。

于 2012-11-01T15:55:20.287 回答