You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS接口操作数据库正常但不返回状态码无响应问题排查

问题原因
  • 核心问题:你仅调用了res.status()方法设置响应状态码,没有调用res.send()、res.json()、res.end()等方法结束响应流程,服务端一直没有将响应数据返回给客户端,所以接口会持续处于等待状态。
    你代码中所有return res.status(200)、return res.status(500)的逻辑都只设置了状态码,没有执行结束响应的操作,只有catch分支调用了res.json()才会正常返回。
  • 次要问题:代码中的print("error")是前端环境的方法,Node.js环境没有内置print方法,执行到这行代码会抛出未定义错误,也可能进一步导致响应卡住。
修复方案

在所有设置完状态码的位置补充结束响应的逻辑即可,参考修改如下:

exports.flagUser = async (req, res) => {
      try {
        const user = await FlaggedUser.findOne({ userId: req.body.userId });
    
        if (user) {
          if (user.flaggedBy.includes(req.body.flaggedBy.toString())) {
            console.log("error");
            // 补充返回逻辑结束响应
            return res.status(500).json({msg: "不可重复标记该用户"});
          } else {
            console.log("user found");
            await user.updateOne({
              $inc: { flagCount: 1 },
              $addToSet: { flaggedBy: req.body.flaggedBy },
            });
            // 补充返回逻辑结束响应
            return res.status(200).json({msg: "标记成功"});
          }
        } else {
          const flaggedUser = new FlaggedUser({
            _id: new mongoose.Types.ObjectId(),
            userId: req.body.userId,
            flagCount: 1,
            flaggedBy: [req.body.flaggedBy],
          });
          await flaggedUser.save();
          console.log("flag");
          // 补充返回逻辑结束响应
          return res.status(200).json({msg: "标记成功"});
        }
      } catch (error) {
        console.log(error);
        return res.status(500).json({
          message: error.message
        });
      }
    };

内容的提问来源于stack exchange,提问作者Emir Kutlugün

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:42:02