【问题标题】:Set environment from the variable in node/express从 node/express 中的变量设置环境
【发布时间】:2021-08-14 14:10:08
【问题描述】:

我需要节点 js api 的要求。我需要在 URL 中设置环境,例如 http://localhost:8000/api/(env)/auth/login,其中 env 可以是 dev、production。

现在我想获取该值,并根据我需要设置数据库连接字符串的值(在环境文件或配置文件中)。

要求是----

开发环境 - http://localhost:8000/api/dev/auth/login :在这种情况下,数据库将是 ----- test_dev 并且所有数据都将被获取/存储在该数据库中 -- 生产环境 - http://localhost:8000/api/prod/auth/login :在这种情况下,数据库将是 test_prod,所有数据都将在 prod 数据库中获取/存储

我很困惑在哪里编写代码以及如何获取环境名称?我将路线设置如下---

**in app.js file - **  app.use("/api/:environment/", apiRouter); //api router is path of api.js

**in api.js file - ** app.use("/auth/", authRouter); //authRouter is path of auth.js

**in auth.js file - ** router.post("/login", AuthController.login);

请建议我将如何解决这个问题。

谢谢

【问题讨论】:

    标签: node.js express routes environment


    【解决方案1】:

    要获取环境名称,您可以尝试这样的操作。

    app.param(function (param, option) {   
    return function (req, res, next, val) {
        if (val === option) {
          next()
        } else {
          next('route')
        }   } })
    
    app.param('enviornment', env)
    
    app.use(`/api/:enviornment/`,(req, res) => {
        res.send(`<h1>Welcome to ${req.params.enviornment}</h1>`); })
    

    但是 ^^ 这是折旧的。

    理想情况下,您应该使用基于.dotenv 的方法,而不是使用/dev/ or /prod/ 端点在开发/生产模式下访问API。

    使用npm i dotenv or yarn add dotenv 安装dotenv

    在根目录下创建.env.dev.env.prod 文件,在各自的文件中添加test_devtest_prod db 配置字符串。

    例如。

    /* .env.dev file */
    MONGO_URL="xxx.....xxx" // test_dev string
    
    /* .env.prod file */
    MONGO_URL="xxx.....xxx" // test_prod string
    

    现在,在您的数据库配置文件中添加 dotenv 作为,

    require('dotenv').config({ path: `.env.${process.env.NODE_ENV}` })
    

    现在,您可以通过process.env.MONGO_URL 访问 MONGO_URL

    接下来,更新package.json中的脚本

    例如。 dev: NODE_ENV=dev nodemon app.jsstart: NODE_ENV=prod node app.js

    现在,根据您运行的脚本,API 在开发/生产环境中得到正确处理。

    如果您运行dev 脚本,则将使用test_dev DB,等等(反之亦然)

    同样,您可以通过这种方式定义和访问所有环境变量。

    如果你有很多环境变量,可以进一步重构,

    创建一个config.js 文件,

    require('dotenv').config({ path: `.env.${process.env.NODE_ENV}` })
    
    const MONGO_URL = process.env.MONGO_URL
    const OAUTH_PROVIDER_ID = process.env.OAUTH_PROVIDER_ID
    const OAUTH_PROVIDER_SECRET = process.env.OAUTH_PROVIDER_SECRET
    const JWT_SECRET = process.env.JWT_SECRET
    
    export {
     MONGO_URL,
     OAUTH_PROVIDER_ID, 
     OAUTH_PROVIDER_SECRET,
     JWT_SECRET
    }
    

    现在,您可以在任何需要的地方解构和使用它。

    例如。在db.config.js

    const { MONGO_URL } = require('./config')
    

    【讨论】:

    • 这不是问题要问的。这是关于如何在运行时环境中更改ENV变量
    • 感谢 Jagan Kartik。我同意理想情况下应该存在,但我需要它从移动应用程序动态访问环境,而无需更改命令和代码级别的任何内容。会有2或3个网址。环境各一。我只想根据url中的值访问数据库。
    • Jagan Kartik,解决方案运行良好,但您能告诉我如何在运行时更改数据库实例吗?
    • 请查看这些示例 Example 1Example 2
    猜你喜欢
    • 2014-12-17
    • 2017-12-08
    • 2019-08-24
    • 2015-06-16
    • 2012-02-06
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多