提问者:小点点

在nodejs中连接到mongodb时出错


文件夹结构为

。环境

    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时会抛出错误?


共2个答案

匿名用户

我认为您必须在.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”。