簡體   English   中英

在 nodejs 中連接到 mongodb 時出現錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM