You need to enable JavaScript to run this app. MEAN栈开发中如何在成功获取数据后终止API GET请求
优惠活动
大模型
产品
解决方案
定价
更多

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: "查询失败" });
  }
});

关键修改说明

  1. 全局复用MongoDB连接:仅在服务启动时建立一次连接,所有请求复用同一个连接实例,避免频繁开关连接的性能损耗
  2. 路由处理函数增加async标识,直接在内部处理查询逻辑,拿到结果后调用res.json()返回数据,自动结束当前HTTP请求
  3. 补充错误分支的响应返回:哪怕查询出错,也返回异常响应,不会让请求一直处于等待状态
  4. 新增MongoClient配置参数useNewUrlParser: true、useUnifiedTopology: true,解决控制台的弃用警告

内容的提问来源于stack exchange,提问作者Tanzeel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 07:15:04