如何在Nodejs应用程序中共享配置变量

时间:2013-10-28 15:51:00

标签: javascript node.js express coffeescript

我是JavaScript / Nodejs的新手。如何在Nodejs应用程序之间共享我的配置。例如:我有config/config.coffee

path = require("path")

module.exports = {
  development:
    db: 'mongodb://localhost/hello'
    root: rootPath = path.normalize(__dirname + '/..')
}

我在config.coffee中添加了app.coffee

express = require("express")

# Load configurations
env = process.env.NODE_ENV || 'development'
config = require("./config/config")[env]

require('./config/boot')

app = express()

现在我想将config变量包含到我的config/boot.coffee中。我该怎么做?我不想将config/config.coffee重新加入config/boot.coffee。这是我的config/boot.coffee文件:

env = process.env.NODE_ENV || 'development'
config = require("./config")[env]
fs = require("fs")
mongo = require("mongoose")

# Bootstrap db connections
mongo.connect config.db

# Bootstrap models
models_path = config.root+"/app/models"
fs.readdirSync(models_path).forEach( (file)->
  require(models_path + '/' + file) if ~file.indexOf('.coffee')
)

# Bootstrap services
services_path = config.root+"/app/services"
fs.readdirSync(services_path).forEach( (file)->
  require(models_path + '/' + file) if ~file.indexOf('_service.coffee')
)

抱歉英语不好:(

2 个答案:

答案 0 :(得分:2)

我相信NodeJS会缓存您的require,因此再次调用require('config')不会导致性能下降。

http://nodejs.org/api/globals.html#globals_require

答案 1 :(得分:2)

您可能需要查看nconf,它可以帮助您为应用程序配置保留一种“瀑布式”方法,从而可以非常透明地混合来自不同来源的配置。

你可以在我编写的这个项目中看到nconf正在运行,unbox,这基本上是我在Node上编写的应用程序的样板文件。您可以查看配置的加载方式here

您可以使用grunt-pemcrypt之类的内容来检查安全的加密文件,并将加密密钥保存在安全的地方,从而提高安全性。

12factor也有一个很好的方法来处理您可能想要查看的应用程序配置。