从 node/express 中的变量设置环境

时间:2021-05-26 10:28:03

标签: node.js express routes environment

我需要对节点 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);

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

谢谢

1 个答案:

答案 0 :(得分: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。

使用 dotenv 安装 npm i dotenv or yarn add 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 as,

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 数据库等(反之亦然)

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

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

创建一个 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')