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

MERN Stack无法通过.env文件中的URI连接MongoDB问题

MongoDB连接失败问题排查与解决

问题现象

在MERN应用中通过.env文件配置MongoDB URI时,出现两种连接错误:

  1. 当URI带双引号时,报错:
URI must include hostname, domain name, and tld
[nodemon] app crashed - waiting for file changes before starting...
  1. 去掉双引号后,报错:
Invalid scheme, expected connection string to start with "mongodb://" or "mongodb+srv://"

相关代码片段

config/db.js

const connectDB = async () => {
  try {
    await mongoose.connect(process.env.MONGOURI, {
    });

    console.log(`MongoDB Connected...`);
  } catch (err) {
    console.error(err.message);
    // Exit process with failure
    process.exit(1);
  }
};

module.exports = connectDB;

根目录.env文件(错误格式)

PORT = 5000
MONGOURI =
    "mongodb+srv://<my_username_is_here>:<password_is_here>@gmttcluster.cvloz.mongodb.net/myFirstDatabase?retryWrites=true&w=majority"

根目录server.js

const express = require("express");
const colors = require("colors");
const dotenv = require("dotenv").config();
const { errorHandler } = require("./middleware/errorMiddleWare");
const connectDB = require("./config/db");
const port = process.env.PORT || 5000;

connectDB();

const app = express();

app.use(express.json());
app.use(express.urlencoded({ extended: false }));

app.use("/home", require("./routes/teeTimeRoutes"));

app.use(errorHandler);

app.listen(port, () => console.log(`Server started on port ${port}`));

错误原因分析

  1. 带双引号的情况:.env文件中,变量值的双引号会被dotenv当作字符串的一部分解析,最终process.env.MONGOURI的值是包含双引号的"mongodb+srv://...",MongoDB驱动无法识别带引号的URI,导致主机名解析失败。
  2. 去掉引号但换行缩进的情况:URI被换行并缩进,导致值的开头存在空格,最终URI变成 mongodb+srv://...,驱动识别不到开头的mongodb+srv://协议头,触发scheme错误。

解决方案

修正.env文件中MONGOURI的格式:

  • 不要给URI加双引号
  • 不要换行或缩进,将URI完整写在同一行
  • 确保URI开头没有多余空格

正确的.env文件示例:

PORT = 5000
MONGOURI=mongodb+srv://<my_username_is_here>:<password_is_here>@gmttcluster.cvloz.mongodb.net/myFirstDatabase?retryWrites=true&w=majority

额外检查项

  • 可以在server.js中临时添加console.log(process.env.MONGOURI),启动服务后查看输出的URI是否与预期一致,确认没有多余的引号或空格。
  • 如果用户名或密码包含特殊字符(如@、:、/等),需要对其进行URL编码后再填入URI。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:24:40