MEAN栈开发中如何在成功获取数据后终止API GET请求
问题原因与修复方案
核心问题
你遇到的请求持续 pending 的根本原因是:Express 路由处理逻辑完成数据库查询后,没有返回任何 HTTP 响应给客户端,导致请求一直处于等待状态直到超时。
其他存在的问题
- 每次请求都重新建立、关闭MongoDB连接,性能损耗极大,生产环境极易出现连接耗尽问题
- MongoClient 初始化缺少参数,触发弃用警告
修复后的完整代码
const uri = 'mongodb://tanzee.......ue&w=majority' const { MongoClient } = require("mongodb"); // 新增配置参数解决弃用警告,全局复用MongoClient连接 const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true }); let moviesCollection; // 服务启动时初始化一次数据库连接 async function initDB() { try { await client.connect(); const database = client.db("mycollection"); moviesCollection = database.collection("movies"); console.log("MongoDB连接初始化完成"); } catch (e) { console.error("数据库连接失败", e); process.exit(1); } } initDB(); router.get('/totalmovies', async function(req, res) { try { const estimate = await moviesCollection.estimatedDocumentCount(); console.log(`Estimated number of documents in the movies collection: ${estimate}`); // 返回响应结束请求 return res.json({ total: estimate }); } catch (e) { console.dir(e); // 出错时也返回响应,避免请求挂起 return res.status(500).json({ error: "查询失败" }); } });
关键修改说明
- 全局复用MongoDB连接:仅在服务启动时建立一次连接,所有请求复用同一个连接实例,避免频繁开关连接的性能损耗
- 路由处理函数增加async标识,直接在内部处理查询逻辑,拿到结果后调用
res.json()返回数据,自动结束当前HTTP请求 - 补充错误分支的响应返回:哪怕查询出错,也返回异常响应,不会让请求一直处于等待状态
- 新增MongoClient配置参数
useNewUrlParser: true、useUnifiedTopology: true,解决控制台的弃用警告
内容的提问来源于stack exchange,提问作者Tanzeel
相关产品推荐
相关产品推荐

