我正在空闲时间开发一个nodejs api,我正在尝试实现测试。我正在从.env文件(使用dotenv加载)加载我的环境变量,其中包括我的开发mongodb数据库的DB_URI,DB_USER和DB_PASSWORD。
现在,我想创建一个单独的数据库进行测试,但是我不知道如何加载不同的变量来连接测试数据库而不是开发数据库。我部署到Heroku,我有不同的环境变量,所以它被覆盖得很好。
我试图在网上找到最佳做法的一些答案,但我一直无法做到。我想创建一个不同的.env文件,但根据https://www.npmjs.com/package/dotenv不建议这样做。
建议其他资源建议对package.json脚本中需要的特定变量进行硬编码。但是,如果我必须更改连接到不同数据库所需的所有变量,那么脚本将是巨大的。
我可以获得一些帮助,了解我应该如何做到这一点吗?
谢谢!
PS:如果需要,我会使用mocha + supertest进行测试。
答案 0 :(得分:15)
在.env文件中,为每个环境添加变量:
DB_URI_DEVELOPMENT="https://someuri.com"
DB_USER_DEVELOPMENT=someuser
DB_PASSWORD_DEVELOPMENT=somepassword
DB_URI_TEST="https://otheruri.com"
DB_USER_TEST=otheruser
DB_PASSWORD_TEST=otherpassword
在development
中启动应用程序:
NODE_ENV=development node server.js
或test
:
NODE_ENV=test node server.js
访问此环境的环境变量:
// don't try to load .env file on Heroku
if (process.env.NODE_ENV !== 'production') {
require('dotenv').config()
}
// get the current environment
var env = process.env.NODE_ENV
// convert to uppercase
var envString = env.toUpperCase()
// access the environment variables for this environment
var dbUri = process.env['DB_URI_' + envString]
var dbUser = process.env['DB_USER_' + envString]
var dbPassword = process.env['DB_PASSWORD_' + envString]
希望有所帮助!