node.js - 在 nodejs 中管理配置以从文件和环境变量中获取变量
问题描述
我有一个配置文件,其中存储了密码并使用了数据
'use strict';
export default {
dbProd: {
connectionString: 'postgres://...',
},
dbDev: {
connectionString: 'postgres://...',
},
...
}
我还有一个postgresql数据库连接文件
'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"
},
当我收集一个用于生产的项目以通过 连接到数据库时dbProd
,如果开发转移到dbDev
. 如何实施?
解决方案
您应该考虑使用 node-package 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')
推荐阅读
- python - 使用 Python win32com 获取 Excel 工作表列表
- python-3.x - 如何从共享相同键的元组列表中找到平均值?
- mmap - 完整且用户友好的 mmap 文档
- python - 将css链接到html的Django问题
- finite-automata - 将此 NFA 转换为 DFA
- deployment - 您如何将 blazor wasm grpc-web 应用程序部署到 azure?
- spring - TCP Client Spring 与 Legacy Server 的集成
- javascript - PixiJs Sprites 在顶部添加行
- python - 如何获得某个数字的固定排列数
- ubuntu - nginx 不会使用 100% cpu