在Node.js中管理配置以从文件和环境变量中获取变量

时间:2019-03-14 08:08:36

标签: node.js

我有一个配置文件,其中存储了密码并使用了数据

console.log

我还有一个PostgreSQL数据库连接文件

const nums = [1, 2, 3, 4, 5];

console.log(
  nums.every((num, index) => (
    index !== nums.length - 1
    ? num + 1 === nums[index + 1]
    : true
  ))
);

在我的'use strict'; export default { dbProd: { connectionString: 'postgres://...', }, dbDev: { connectionString: 'postgres://...', }, ... } 文件中,有三个脚本。第一个启动项目,第二个开发,第三个用于生产

'use strict';

import { Pool } from 'pg';
import config from './../config';

export default new Pool({
    connectionString: config.dbDev.connectionString,
    ssl: true
});

当我收集用于生产的项目以通过package.json连接到数据库,并且开发内容已转移到 "scripts": { "start": "nodemon --exec babel-node src/index.js", "devbuild": "babel src --out-dir dev-backend", "build": "babel src --out-dir backend" }, 时,我就需要它。如何实现?

2 个答案:

答案 0 :(得分:2)

您应该考虑使用节点包config NPM Config,因为它使这些事情变得更加容易。

您只需要在default.json文件夹中创建一个/config文件,其中将包含所有开发配置以及在开发或生产中都不会更改的配置。您必须创建的第二个文件是production.json文件,其中包含覆盖默认键:值的所有生产配置。

在您的package.json中,您只需要一个用于生产环境的开始脚本和一个用于开发的脚本。看起来可能像这样:

 "start": "SET NODE_ENV=production& node ./bin/www",
 "dev": "node ./bin/www",

通过设置NODE_ENV=production,配置模块将加载默认配置并查看生产文件内部,以找出在生产模式下必须覆盖哪些值。

default config file的简单示例:

{
    "Services": {
      "api": {
        "username": "user",
        "password": "password",
        "base_url": "https://development.com/test"
      }
    },
    "Network": {
      "proxy": {
        "host": "http://myproxy/",
        "port": 80
      }
    }
  }

如果代理始终是相同的,只是API发生了变化,则production file会像这样:

  {
    "Services": {
      "api": {
        "username": "prodUser",
        "password": "prodPassword",
        "base_url": "https://production.com/test"
      }
    }
  }

现在可以在您的代码中使用它,例如:

const config = require('config');
const serviceConfig = config.get('Services');
const networkConfig = config.get('Network');

networkConfig.get('proxy.host')+":"+networkConfig.get('proxy.port')

答案 1 :(得分:0)

您需要使用 config 软件包或任何其他流行的软件包,这些软件包允许您为每种环境定义不同的配置。

使用 config ,您必须制作 / config 文件夹,您可以在其中放置每个环境的所有配置,如下所示:

 {{serialisedData | json}}

用法:

/config/development.json
/config/production.json

该程序包使用 NODE_ENV 环境变量值来确定要使用的配置,因此您必须在启动应用程序之前设置此变量。

 var config = require('config');
 //...
 var dbConfig = config.get('Customer.dbConfig');
 db.connect(dbConfig, ...);

 if (config.has('optionalFeature.detail')) {
   var detail = config.get('optionalFeature.detail');
   //...
 }