文件夹结构为
。环境
MONGODB_URL = mongodb://localhost/EmployeeDB
。config
export default {
MONGODB_URL: process.env.MONGODB_URL
}
。server.js
import express from 'express'
import mongoose from 'mongoose'
import config from './config'
import dotenv from 'dotenv'
const app = express()
const PORT = 5000
dotenv.config()
const MONGODB_URL = config.MONGODB_URL
mongoose.connect(MONGODB_URL,{
useCreateIndex: true,
useNewUrlParser: true,
useUnifiedTopology: true
}, error=>{
if(error){
console.log("Error occurred "+error)
}else{
console.log("Database successfully connected")
}
})
app.listen(PORT,()=>{
console.log("Server started at port "+PORT)
})
现在它抛出错误为error[MongooseError]:openURI()
的uri
参数必须是一个字符串,得到“undefined”。 确保mongoose.connection()
或mongoose.createConnection()
的第一个参数是字符串。
如果我将字符串直接放在。config文件中作为
export default {
MONGODB_URL: "mongodb://localhost/EmployeeDB"
}
它工作得很好,但是如果我使用process.env.mongodb_url
,那么它会抛出上面提到的错误。 为什么当我使用process.env.mongodb_url
时会抛出错误?
我认为您必须在.env
中赋值变量,赋值符号=
周围不带空格
MONGODB_URL=mongodb://localhost/EmployeeDB
当您调用dotenv.config()
时,dotenv
将加载.env
文件中的变量,并将其分配给process.env
,这发生在导入./config
之后。
但是您不能在import
语句之前调用dotenv.config()
,因此dotenv
为您提供了一个使用import'dotenv/config'
的选项,因此您必须确保该行位于import config from'./config'
之前,最好的方法是将其放在顶部。
import dotenv from 'dotenv/config'
import express from 'express'
import mongoose from 'mongoose'
import config from './config'
const MONGODB_URL = config.MONGODB_URL
/* ... */
您试图在.config
文件上使用dotenv,但dotenv在该文件上不可用。
一个好的方法是创建一个config
目录,其中包含一个index.js文件,您可以在其中共享环境变量并在代码中使用dotenv模块。
您的代码将如下所示:
config/index.js:
require('dotenv').config();
module.exports = {
MONGODB_URL: process.env.MONGODB_URL,
};
。环境:
MONGODB_URL=mongodb://localhost/EmployeeDB
然后可以在任何需要的地方使用env变量,只需调用:
server.js:
const config = require('../config');
console.log(`Mongo URL: ${config.MONGODB_URL}`)
通过这种方式,您的代码得到了更有条理的“IMHO”。