问题 从其他配置文件访问配置变量


我在配置文件中使用另一个配置文件中的config var设置时遇到问题。例如。

// file - config/local.js
module.exports = {
  mongo_db : {
    username : 'TheUsername',
    password : 'ThePassword',
    database : 'TheDatabase'
  }
}

// file - config/connections.js
module.exports.connections = {
  mongo_db: {
    adapter: 'sails-mongo',
    host: 'localhost',
    port: 27017,
    user: sails.config.mongo_db.username,
    password: sails.config.mongo_db.password,
    database: sails.config.mongo_db.database
  },
}

当我'航行升降机'时,我收到以下错误:

user: sails.config.mongo_db.username,
      ^
ReferenceError: sails is not defined

我可以在其他地方访问配置变量 - 例如,这有效:

// file - config/bootstrap.js
module.exports.bootstrap = function(cb) {
  console.log('Dumping config: ', sails.config);
  cb();
}

这会将所有配置设置转储到控制台 - 我甚至可以在那里看到mongo_db的配置设置!

我很困惑。


12144
2017-09-02 12:02


起源



答案:


你无法访问 sails 在配置文件中,因为在处理这些文件时仍然会加载Sails配置!在 bootstrap.js,您可以访问配置 在引导函数内部,因为在加载Sails后调用该函数,但不是 以上 功能。

任何状况之下, 配置/ local.js 在所有其他配置文件之上合并,因此您可以通过这种方式获得所需内容:

// file - config/local.js
module.exports = {
  connections: {
    mongo_db : {
      username : 'TheUsername',
      password : 'ThePassword',
      database : 'TheDatabase'
    }
  }
}

// file - config/connections.js
module.exports.connections = {
  mongo_db: {
    adapter: 'sails-mongo',
    host: 'localhost',
    port: 27017
  },
}

如果你  需要从另一个配置文件访问,您可以随时使用 require,但不建议这样做。由于Sails根据几个因素(包括当前环境)将配置文件合并在一起,因此您可能会阅读一些无效选项。最好以预期的方式做事:使用 配置/ ENV / * 环境特定设置的文件(例如 配置/ ENV / production.js配置/ local.js 用于特定于单个系统(如计算机)的设置以及用于共享设置的其余文件。


15
2017-09-02 17:01



很酷 - 这很有道理。我想我被@mikermcneil对这个问题的评论抛弃了: stackoverflow.com/questions/18267706 (看到最后的评论,他似乎确认你可以访问其他配置文件中的配置变量)谢谢 - 我将尝试使用config / env和config / local的组合。 - onblur
是的,我不确定他是否真的打算回答之前的评论! - sgress454
我见过的最糟糕的框架。如果您打算在config / http中做任何值得注意的事情,比如说访问redis,则需要复制代码 - r3wt


答案:


你无法访问 sails 在配置文件中,因为在处理这些文件时仍然会加载Sails配置!在 bootstrap.js,您可以访问配置 在引导函数内部,因为在加载Sails后调用该函数,但不是 以上 功能。

任何状况之下, 配置/ local.js 在所有其他配置文件之上合并,因此您可以通过这种方式获得所需内容:

// file - config/local.js
module.exports = {
  connections: {
    mongo_db : {
      username : 'TheUsername',
      password : 'ThePassword',
      database : 'TheDatabase'
    }
  }
}

// file - config/connections.js
module.exports.connections = {
  mongo_db: {
    adapter: 'sails-mongo',
    host: 'localhost',
    port: 27017
  },
}

如果你  需要从另一个配置文件访问,您可以随时使用 require,但不建议这样做。由于Sails根据几个因素(包括当前环境)将配置文件合并在一起,因此您可能会阅读一些无效选项。最好以预期的方式做事:使用 配置/ ENV / * 环境特定设置的文件(例如 配置/ ENV / production.js配置/ local.js 用于特定于单个系统(如计算机)的设置以及用于共享设置的其余文件。


15
2017-09-02 17:01



很酷 - 这很有道理。我想我被@mikermcneil对这个问题的评论抛弃了: stackoverflow.com/questions/18267706 (看到最后的评论,他似乎确认你可以访问其他配置文件中的配置变量)谢谢 - 我将尝试使用config / env和config / local的组合。 - onblur
是的,我不确定他是否真的打算回答之前的评论! - sgress454
我见过的最糟糕的框架。如果您打算在config / http中做任何值得注意的事情,比如说访问redis,则需要复制代码 - r3wt