用于nodejs中的测试和开发的不同env变量

And*_*zco 5 environment-variables mocha.js mongodb node.js

我在空闲时间开发了一个nodejs api,我正在尝试实现测试.我正在从.env文件(使用dotenv加载)加载我的环境变量,其中包括我的开发mongodb数据库的DB_URI,DB_USER和DB_PASSWORD.

现在,我想创建一个单独的数据库进行测试,但是我不知道如何加载不同的变量来连接测试数据库而不是开发数据库.我部署到Heroku,我有不同的环境变量,所以它被覆盖得很好.

我试图在网上找到一些最佳实践的答案,但我一直无法做到.我想创建一个不同的.env文件,但不建议根据https://www.npmjs.com/package/dotenv.

建议的其他资源建议硬编码我在package.json脚本中需要的特定变量.但是,如果我必须更改连接到不同数据库所需的所有变量,那么脚本将是巨大的.

我可以帮助理解我应该怎么做吗?

谢谢!

PS:如果需要,我正在使用mocha + supertest进行测试.

Sin*_*lel 17

  1. 在.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
    
    Run Code Online (Sandbox Code Playgroud)


  1. 启动应用程序development:

    NODE_ENV=development node server.js
    
    Run Code Online (Sandbox Code Playgroud)

    或者在test:

    NODE_ENV=test node server.js
    
    Run Code Online (Sandbox Code Playgroud)


  1. 访问此环境的环境变量:

    // 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]
    
    Run Code Online (Sandbox Code Playgroud)


希望有所帮助!