Postman调用React+Mongoose项目接口报socket hang up错误如何排查
问题排查方向
1. 优先验证MongoDB连接状态
根接口可正常响应说明Express服务本身运行无问题,/tinder/cards相关接口需要操作数据库,出现超时、报错大概率是MongoDB连接异常导致。你当前代码未添加MongoDB连接的事件监听,无法直接判断连接结果,可以添加监听代码排查连接错误:
// 替换原有mongoose.connect相关代码 const db = mongoose.connection mongoose.connect(connection_url, { useNewUrlParser: true, useCreateIndex: true, useUnifiedTopology:true, }) // 监听连接报错 db.on('error', (err) => { console.error('MongoDB连接失败:', err) }) // 监听连接成功 db.once('open', () => { console.log('MongoDB连接成功') })
启动服务后查看控制台输出,如果出现连接报错,优先检查以下配置:
- MongoDB Atlas的IP白名单是否添加了你当前设备的公网IP,未加白名单的IP会被Atlas直接拒绝连接
- 连接字符串里的数据库用户名、密码是否正确,密码含特殊字符需要做URL转义
- 对应Atlas集群是否处于正常运行状态,有没有被平台暂停
2. 调整服务启动时机
你当前代码是异步建立MongoDB连接的同时直接启动服务,如果请求发起时数据库连接还未完成,会导致数据库操作挂起无响应。可以把服务监听逻辑移到数据库连接成功的回调中:
db.once('open', () => { console.log('MongoDB连接成功') // 把原代码底部的app.listen移到这里 app.listen(port, () => console.log(`listening on localhost: ${port}`)); }) // 删除原代码底部的app.listen逻辑
额外提示:原代码控制台打印的localehost是拼写错误,不影响运行但调试时容易看错,可修正为localhost
3. 检查模型定义与请求参数
- 确认
dbCards.js里的模型规则是否正确,如果设置了必填字段,POST请求未传对应参数会触发Mongoose校验错误,直接返回500 - 用Postman发POST请求时,需要设置请求头
Content-Type: application/json,Body选择raw格式的JSON,否则req.body会拿到空值,导致创建失败
内容的提问来源于stack exchange,提问作者sonicfroots
相关产品推荐
相关产品推荐

