我无法理解如何正确处理节点回调中的分配。我正在阅读一个配置文件,并使用道具解析.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'))
});
另外,这是设置配置选项的好方法吗?
答案 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);
我希望这会有所帮助。