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ファイルには、オブジェクト配列宣言があり、そのオブジェクトをエクスポートします。

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);

これがお役に立てば幸いです。

于 2012-11-01T15:55:20.287 に答える