使用Postman Desktop Agent请求时遇read ECONNRESET错误求助
解决Postman发送请求时出现的"Error: read ECONNRESET"问题
核心问题:请求目标端口错误
你的Express服务器运行在3000端口,但你用Postman向localhost:27017/articles发送请求——27017是MongoDB的服务端口,它只处理MongoDB协议的通信,不支持HTTP请求,因此会直接重置连接,导致你看到的Error: read ECONNRESET错误。
立刻把Postman的请求地址改成localhost:3000/articles,这是解决该错误的关键。
代码中需要修正的其他问题
除了端口问题,你的代码还有几处细节需要调整,避免后续出现其他异常:
- 错误的save函数定义
原save函数参数是err,但函数内调用article.save()时,article变量未定义,正确的写法应该是接收要保存的文档实例:
async function saveArticle(article) { try { const savedArticle = await article.save(); console.log(savedArticle + " saved"); return savedArticle; } catch (err) { console.log(err); throw err; } }
- 重复的请求解析配置
Express 4.16+已经内置了body-parser的功能,你重复配置了bodyParser.urlencoded和express.urlencoded,保留一组即可,推荐使用Express内置的版本:
// 替换重复的body-parser配置 app.use(express.urlencoded({ extended: true })); app.use(express.json());
- POST路由缺少响应返回
当前POST路由只打印日志,没有给客户端返回任何响应,会导致Postman一直等待直到超时。需要添加响应语句:
app.post("/articles", async function(req, res) { console.log("post request") console.log(req.body.title); console.log(req.body.content); // 创建新文章并保存 const newArticle = new Article({ title: req.body.title, content: req.body.content }); try { const savedArticle = await newArticle.save(); res.status(201).json(savedArticle); } catch (err) { res.status(500).json({ error: err.message }); } });
- mongoose.connect的混合写法问题
async函数中同时使用await和回调函数,容易造成逻辑混乱,建议统一用try/catch处理连接错误:
async function main() { try { await mongoose.connect("mongodb://localhost:27017/wikiDB", settings); console.log("Mongdb connected (new code)"); } catch (err) { console.log("Error while connecting to mongDB" + err); } }
修正后的完整代码
//jshint version:6 var express = require('express'); const mongoose = require('mongoose'); let ejs = require('ejs'); //express setup const app = express(); //EJS setup with express app.set('view engine', 'ejs'); // 静态资源目录 app.use(express.static("public")); // 请求解析配置(Express内置,替代body-parser) app.use(express.urlencoded({ extended: true })); app.use(express.json()); //Mongoose setup mongoose.set("strictQuery", false); var settings = { reconnectTries: Number.MAX_VALUE, autoReconnect: true }; async function main() { try { await mongoose.connect("mongodb://localhost:27017/wikiDB", settings); console.log("Mongdb connected (new code)"); } catch (err) { console.log("Error while connecting to mongDB" + err); } } main().catch(err => console.log(err)); const articleSchema = new mongoose.Schema({ title: String, content: String }); const Article = mongoose.model("Article", articleSchema); async function saveArticle(article) { try { const savedArticle = await article.save(); console.log(savedArticle + " saved"); return savedArticle; } catch (err) { console.log(err); throw err; } } app.get("/articles", function(req, res) { Article.find(function(err, foundArticles) { if (!err) { res.send(foundArticles); } else { res.send(err) } }); }); app.post("/articles", async function(req, res) { console.log("post request") console.log(req.body.title); console.log(req.body.content); const newArticle = new Article({ title: req.body.title, content: req.body.content }); try { const savedArticle = await saveArticle(newArticle); res.status(201).json(savedArticle); } catch (err) { res.status(500).json({ error: err.message }); } }); app.listen(3000, function() { console.log("Server started on port 3000"); });
内容的提问来源于stack exchange,提问作者Michael Womack
相关产品推荐
相关产品推荐

