VPS上NodeJS连接MongoDB后请求报错:HTTP访问MongoDB原生驱动端口
问题解决:访问接口时出现MongoDB HTTP访问错误
核心原因
你发起请求时用的端口是MongoDB的服务端口(比如默认的27017),而非NodeJS应用监听的端口,导致请求直接打到了MongoDB服务上,因此出现该错误提示。
解决步骤
1. 区分NodeJS端口与MongoDB端口
- MongoDB默认端口为
27017(若修改过配置则用自定义端口),这是数据库服务的通信端口,不能用来访问NodeJS接口。 - 找到你NodeJS代码中
app.listen()指定的端口(如3000、8080这类),这才是访问接口的正确端口。
2. 修正接口访问地址
将请求地址从http://serverip:mongodb_port/fetchData改为http://serverip:nodejs_port/fetchData,例如NodeJS用3000端口的话,正确地址是http://serverip:3000/fetchData。
3. 修复代码拼写错误
你的连接代码里module.export是拼写错误,应改为module.exports,否则其他模块无法正确引用数据库连接对象:
// 错误写法 module.export = connection; // 正确写法 module.exports = connection;
4. 验证数据库连接有效性
虽然控制台输出连接成功,可添加简单查询确认连接真实可用:
const mongoose = require('mongoose'); const URL = "mongodb://serverIp:27017/dbname"; const connection = mongoose.connect(URL, { useNewUrlParser: true, useUnifiedTopology: true, serverSelectionTimeoutMS: 5000, family:4 }) .then(async () => { console.log("Successfully Connected DB"); // 测试查询目标集合的文档数量 const docCount = await mongoose.connection.collection('your_collection_name').countDocuments(); console.log(`集合文档数:${docCount}`); }) .catch((e) => console.log("DB CONNECTION ERROR: "+e)); module.exports = connection;
5. 检查VPS防火墙配置
确保NodeJS监听的端口在VPS防火墙中处于开放状态,允许外部访问(比如Linux系统用ufw allow 3000命令开放3000端口,具体命令根据VPS系统调整)。
内容的提问来源于stack exchange,提问作者TheAnswer
相关产品推荐
相关产品推荐

