Node.js中mongodb+srv URI不能含端口号的连接问题排查
解决MongoParseError: mongodb+srv URI cannot have port number错误
可能的问题及修复方案
- 手动添加了端口号:mongodb+srv协议的URI不需要指定端口(默认由DNS SRV记录自动解析),检查你的最终连接URI,确保没有在
@orbitXXXX.huykolo.mongodb.net后面追加:27017这类端口信息。 - 用户名/密码含特殊字符未转义:如果你的用户名(邮箱)或密码包含
@、:、/、%等特殊字符,需要用encodeURIComponent()对其进行编码,否则会破坏URI结构,导致解析时误判为端口。
示例代码:const username = encodeURIComponent(process.env.MONGO_USER); const password = encodeURIComponent(process.env.MONGO_PASSWORD); const uri = `mongodb+srv://${username}:${password}@orbitXXXX.huykolo.mongodb.net/?retryWrites=true&w=majority`; - 连接代码拼接错误:检查你的index.js中URI拼接逻辑,确保没有额外添加端口相关的参数或字符串。比如不要在URI里加入
port配置项,srv格式不支持单独指定端口。
正确的连接代码示例
const express = require('express'); const mongoose = require('mongoose'); require('dotenv').config(); const app = express(); const connectDB = async () => { try { const username = encodeURIComponent(process.env.MONGO_USER); const password = encodeURIComponent(process.env.MONGO_PASSWORD); const uri = `mongodb+srv://${username}:${password}@orbitXXXX.huykolo.mongodb.net/?retryWrites=true&w=majority`; await mongoose.connect(uri); console.log('MongoDB连接成功'); } catch (err) { console.error('连接失败:', err.message); process.exit(1); } }; connectDB(); // 其他Express逻辑...
内容的提问来源于stack exchange,提问作者Nikki
相关产品推荐
相关产品推荐

