我需要对节点 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);
请建议我将如何解决这个问题。
谢谢
答案 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_dev
和 test_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
接下来,在 package.json
例如。 dev: NODE_ENV=dev nodemon app.js
和 start: 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')