[英]I got error while connecting to mongodb in nodejs
我的文件夾結構為
.env
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]: The uri
parameter to openUri()
must be a string, got "undefined"。 確保mongoose.connect()
或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,但 dontenv 在其上不可用。
一個好的方法是創建一個包含 index.js 文件的config
目錄,在那里您可以共享環境變量並在代碼中使用 dotenv 模塊。
您的代碼將是這樣的:
配置/index.js :
require('dotenv').config();
module.exports = {
MONGODB_URL: process.env.MONGODB_URL,
};
.env :
MONGODB_URL=mongodb://localhost/EmployeeDB
然后你可以在任何你想調用的地方使用 env 變量:
server.js :
const config = require('../config');
console.log(`Mongo URL: ${config.MONGODB_URL}`)
通過這種方式,您的代碼會變得更有條理“恕我直言”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.