You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js用Mongoose连MongoDB遇MongooseServerSelectionError求助

问题原因及解决方法

问题根源

你的连接字符串拼接存在格式错误:host变量已经包含了mongodb://协议前缀,拼接后最终的连接字符串会变成 mongodb://${user}:${pwd}@mongodb://localhost:27017/${database}。这种格式会让Mongoose错误地将mongodb当作主机名去解析,从而触发getaddrinfo ENOTFOUND mongodb错误。

解决方法

有两种简单的修复方式:

方式1:修改host变量,移除协议前缀

把host改成只包含主机地址和端口,再正常拼接:

const mongoose = require("mongoose");
require("dotenv").config();

const user = process.env.MONGODB_USER;
const pwd = process.env.MONGODB_PWD;
// 移除mongodb://前缀,仅保留主机和端口
const host = "localhost:27017";
const database = "todoList";

// 拼接出正确格式的连接字符串
const connectionString = `mongodb://${user}:${pwd}@${host}/${database}`;

mongoose
    .connect(connectionString, {
        useNewUrlParser: true,
        useUnifiedTopology: true,
    })
    .then(() => {
        console.log("Conectado ao banco de dados");
    })
    .catch((err) => {
        console.error("Erro ao conectar ao banco de dados", err);
        process.exit();
    });

方式2:直接拼接正确格式的连接字符串

如果不想修改host变量,可以直接跳过拼接,写出完整的正确连接字符串:

const mongoose = require("mongoose");
require("dotenv").config();

const user = process.env.MONGODB_USER;
const pwd = process.env.MONGODB_PWD;
const database = "todoList";

// 直接构造正确的连接字符串
const connectionString = `mongodb://${user}:${pwd}@localhost:27017/${database}`;

mongoose
    .connect(connectionString, {
        useNewUrlParser: true,
        useUnifiedTopology: true,
    })
    .then(() => {
        console.log("Conectado ao banco de dados");
    })
    .catch((err) => {
        console.error("Erro ao conectar ao banco de dados", err);
        process.exit();
    });

额外说明

  • 如果你的MongoDB没有开启用户认证,完全可以省略user和pwd,直接使用mongodb://localhost:27017/todoList作为连接字符串。
  • 若开启了认证,确保你的账号拥有访问todoList数据库的权限,必要时可以在连接字符串后添加?authSource=admin指定认证源(默认用户是在admin数据库下创建的)。

内容的提问来源于stack exchange,提问作者Eduardo Jordao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 12:05:24