【问题标题】:Node.js express: access application config from required modulesNode.js express:从所需模块访问应用程序配置
【发布时间】:2018-08-25 14:55:44
【问题描述】:

我要构建一个大型 Node.js Express API,因此我想确保我的解决方案架构稳定且可扩展。

每个路由都在其自己的单独文件中定义并存储在 /routes 文件夹中。还有一个 index.js 文件,其中所有子路由都注册到主路由器。

有一个应用配置文件/config/app.js:

module.exports = {
  development: {
    configVar: 123
  },
  test: {
    configVar: 456
  },
  production: {
    configVar: 789
  },
}

配置对象被加载到主应用程序的 index.js 文件中:

const path      = require("path");
const env       = process.env.NODE_ENV || "development";
const config    = require(path.join(__dirname, 'config', 'app.js'))[env];

现在我有了配置对象,我想将它传递给任何消费者。对于 Express 应用程序,它主要是路线。在每个模块中重复加载配置有点多余。所以我设置了我的主要路由模块(/routes/index.js)如下:

const express = require('express');
const router = express.Router();
module.exports = {
  init: function(config) {
    router.use('/test', require('./test').init(config));
    return router;
  }
}

还有 /test 路由(/routes/test.js):

const express = require('express');
const router = express.Router();

module.exports = {
  init: function(config) {
    router.post("/", function(req, res) {
      res.send('hello world');
    });
    return router;
  }
}

我也喜欢这种结构,我可以在测试路由时模拟配置对象。我的问题是,这是否可以被视为 Express 应用程序的良好模式,或者可能需要遵循一些约定。

【问题讨论】:

  • 这应该很好用。只有一件事可能不酷,那就是您的配置是代码的一部分,这可能不是您想要的。不过,您可以使用rc
  • 配置是代码的一部分是什么意思?该配置文件执行 JavaScript,因此它可以包含表达式?我认为这是优势而不是劣势。当然也可以是json文件,分别加载。
  • 部分代码,如检入版本控制。如果您的配置包含密码和应该安全的东西,您可能不希望在版本控制中使用它。我只是说:)

标签: node.js express


【解决方案1】:

有很多方法可以给猫剥皮,还有更多方法可以设置快速项目。

让我觉得改变的一件好事是你的配置方法。您的方法完全有意义,但是有一个名为 config 的模块的工作方式与您说明的方式大致相同,但您不需要列出每个环境的每个选项。

使用此模块,您可以拥有一个包含所有基本配置的default.json 文件。然后,您可以使用与您的环境名称相匹配的文件(例如 developmenttest)覆盖它,而无需手动操作。

更重要的是,它还可以让您从应用程序配置映射到环境变量。您很少希望将应用程序配置值存储在代码库本身中,尤其是在我们谈论 API 密钥和机密时。您要做的最后一件事是将 API 密钥/秘密提交到版本控制中。上面链接的配置模块将允许您定义环境变量映射,这意味着您可以通过系统环境变量来输入它们。

最后我应该指出,有许多模块的行为方式与配置相似,它们的功能都略有不同。您可能还想考虑nconf,这也是一个很棒的模块。

【讨论】:

  • 谢谢,我去研究一下config包。确实,使用具有内置所有功能的东西是有意义的。但至于配置文件,您不会在版本控制中提交它们只是常识。我分别备份它们,并提交一个非活动配置文件以显示结构。
  • @Passiday,太好了!如果这回答了您的问题,那么您介意将其标记为对未来的读者正确吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
  • 2021-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多