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

NodeJS中API请求回调里res.json未执行的解决办法咨询

解决res.json未执行的问题

我来帮你排查这个问题!你的代码里有两个关键问题导致res.json没有执行,咱们一步步梳理:

1. request模块的回调参数签名错误

你用的request库,它的回调函数标准参数是 (err, response, body),但你写的是 (err, stdout, body)。这个错误会导致:

  • 你拿到的stdout其实是HTTP响应对象(包含状态码、headers等),而非你预期的输出内容
  • 隐性的逻辑混乱可能让代码在某些分支下跳过res.json的执行

2. 缺失错误处理分支

你现在只打印了err,但如果请求真的出错(比如localhost:3001服务未启动、网络问题),代码会停在console.log(err),不会执行后续的res.json,客户端会一直处于等待响应的状态。


修改后的完整代码

api.app.get('/url', function(req, res) {
  request({
    url: "http://localhost:3001/myUrl",
    method: 'GET',
    headers: {
      'Content-Type': "application/json",
      'Accept': "application/json",
    }
  }, function (err, response, body) {
    // 优先处理错误情况,避免请求挂起
    if (err) {
      console.error('内部请求出错:', err);
      return res.status(500).json({success: false, message: '请求后端服务失败'});
    }

    // 可以额外判断响应状态码,确保请求成功
    if (response.statusCode !== 200) {
      console.warn('后端服务返回异常状态码:', response.statusCode);
      return res.status(response.statusCode).json({success: false, message: '后端服务返回异常'});
    }

    console.log('响应体:', body);
    // 确保走到这里时正常返回响应
    res.json({success:true, data:"raed"});
  });
});

额外建议:改用更现代的请求库

request库已经被标记为弃用了,推荐用axios或者原生fetch(Node.js 18+支持),它们的Promise/async-await写法更清晰,也更容易维护错误处理:

用axios的示例

const axios = require('axios');

api.app.get('/url', async (req, res) => {
  try {
    const response = await axios.get('http://localhost:3001/myUrl', {
      headers: {
        'Content-Type': "application/json",
        'Accept': "application/json",
      }
    });
    
    console.log('响应体:', response.data);
    res.json({success:true, data:"raed"});
  } catch (err) {
    console.error('请求出错:', err.message);
    res.status(500).json({success: false, message: '内部请求失败'});
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:48:34