3

flatiron を使用して小さなフレームワークを構築しようとしています。nconf を使用してすべての構成ファイルを読み込み、アプリ内のどこからでも利用できるようにしたいと考えています。私のルート ディレクトリには、config/bootstrap.js から構成データを取り込みたい app.js があります。

構成/構成/js

module.exports =
  { 'app' :
    { "host"   : "localhost"
    , "port"   : process.env.port || 3000
    }
  }

ブートストラップ.js:

var nconf   = require('nconf')
  // database config
  , dsource = require('./datasource')
  // general or user config
  , config  = require('./config')

// allow overrides
nconf.overrides({
  'always': 'be this value'
});

// add env vars and args
nconf.env().argv();

// load in configs from the config files
var defaults = {}
  // so we can iterate over each config file
  , confs = [dsource, config]

// for every config file
confs.forEach(function(conf)
{
  // get each key
  for (var key in conf)
  {
    // and add it to the defaults object
    defaults[key] = conf[key]
  }
})
// save the defaults object
nconf.defaults(defaults)

// logging this here works and properly shows the port setting
console.log('app port : ' + nconf.get('app:port'))

module.exports = nconf

そのため、ファイルからコンソールログを記録するとき。すべてが正常に読み込まれるようです。しかし、それをエクスポートしようとして、app.js から conf.get('app:port') として要求すると、機能しません。

app.js (「flatiron create app」のバニラ app.js のみ)

var flatiron = require('flatiron')
  , app = flatiron.app
  , path = require('path')
  , conf = require('./config/bootstrap')

app.config.file({ file: path.join(__dirname, 'config', 'config.json') });

app.use(flatiron.plugins.http);

app.router.get('/', function () {
  this.res.json({ 'hello': 'world' })
});

// this doesnt work, conf
app.start(conf.get('app:port'));

では、どうすればこれを適切に機能させて、アプリのどこでも構成を利用できるようにすることができますか。理想的には、次のような場所からどこからでも構成を利用できるようにしたいと考えていますapp.config

これは nconf を使用する最良の方法ですか? 多くの例を見つけることができないようです。私が見るものはすべて、実際の nconfig サンプル ファイル内から構成情報を取得しているだけです。どこからでもファイルの外からではなくapp.config

それとも、私はそれを正しく使用していませんか?それを行うより良い方法はありますか?理想的には、このブートストラップ ファイルを使用して、すべての構成とリソース/ビュー (RVP スタイル アプリ) をロードして、すべてをロードしたいと考えています。

これは、レイアウト、アイデアについて私が持っている一般的なアイデアです

|-- conf/
|   |-- bootstrap.js
|   |-- config.js
|-- resources
|   |-- creature.js
|-- views/
|-- presenters/
|-- app.js
|-- package.json
4

2 に答える 2

1

あなたの設定は、次のようにアプリにアクセスできるどこからでも利用できます:

app.config.get('google-maps-api-key')

次のようにロードした場合:

app.config.file({ file: path.join(__dirname, 'config', 'config.json') })
于 2013-02-19T10:33:59.380 に答える
0

これは、JSON 構成をロードする正しい方法です。

nconf.use('file', {
  file: process.cwd() + '/config.ini'
, format: nconf.formats.json
});
于 2012-09-08T10:37:49.740 に答える