【问题标题】:MongoDB connection error nodejs express mongooseMongoDB连接错误nodejs express mongoose
【发布时间】:2021-03-17 10:00:52
【问题描述】:

我是初学者,正在尝试使用 node 和 express 和 mongoose 测试与 MongoDB 的一些基本连接,但找不到返回未定义的原因

我正在使用 dotenv 模块来使用环境变量,任何建议

MongooseError:openUri()uri 参数必须是字符串,得到“未定义”。确保第一个参数为mongoose.connect()mongoose.createConnection() 是一个字符串。

这是我的代码

// index.js

import app from './app'
import './database'

app.listen(app.get('port'))
console.log('Greetings from express')
// database.js

import mongoose from "mongoose";
import config from './config'

(async () => {
    const db = await mongoose.connect(config.mongodbURL, {
        useNewUrlParser: true,
        useUnifiedTopology: true,
    });
    console.log('Database connected to:', db.connection.name);
})();
// config.js
import { config } from "dotenv";
config();

export default {
    mongodbURL: process.env.MONGODB_URI,
};
// .env
MONGODB_URI = mongodb://localhost/tasksapi

【问题讨论】:

    标签: node.js mongodb mongoose dotenv


    【解决方案1】:

    如果您不修改配置文件,那么您可能不必拥有 config.js 文件,您只需在 index.js 中调用 config(),之后加载的任何文件都可以访问 @987654323 @。

    在这种情况下,您的代码如下所示:

    // index.js
    
    import {config} from 'dotenv'
    config()
    
    import app from './app'
    import './database'
    
    app.listen(app.get('port'))
    console.log('Greetings from express')
    
    // database.js
    
    import mongoose from "mongoose";
    import config from './config'
    
    (async () => {
        const db = await mongoose.connect(process.env.MONGODB_URI, {
            useNewUrlParser: true,
            useUnifiedTopology: true,
        });
        console.log('Database connected to:', db.connection.name);
    })();
    

    或者,如果您希望保留您的config.js,那么在index.js 中调用dotenv 的config() 也将确保在config.js 导出它们时加载您的envvar。

    【讨论】:

    • 嘿,谢谢,这完全有道理,即使正如@Kandonga 所说,但如果我更改为字符串 const db = await mongoose.connect('mongodb://localhost/tasksapi' 得到一个 MongooseServerSelectionError: connect ECONNREFUSED 127.0.0.1,我会尝试并得到同样的错误:27017
    • 如果你得到 ECONNREFUSED 并且 URI 没问题,那么它一定与你的 MongoDB 配置有关 - 你有本地运行的 mongodb,设置为免身份验证登录等吗?
    【解决方案2】:

    是的,你在这里做什么

    await mongoose.connect(config.mongodbURL,
    

    改成await mongoose.connect(process.env.mongodbURL,

    并像这样将 mongodb url 存储在 config.env 文件中

    mongodbURL=mongodb+srv://USERNAME:<PASSWORD>@cluster<CLUST>/<DBNAME?retryWrites=true&w=majority
    

    ,这对你有用

    【讨论】:

      猜你喜欢
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 2022-09-23
      • 1970-01-01
      • 2017-04-06
      • 2020-02-09
      相关资源
      最近更新 更多