You need to enable JavaScript to run this app. Node.js开发Weather API时Postman请求处理完成后挂起如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Node.js开发Weather API时Postman请求处理完成后挂起如何解决

问题原因

Postman 持续挂起等待的核心原因是 Express 的请求响应流程没有主动终止:
只要客户端发过来的请求,没有通过 res.send()/res.json()/res.end() 这类方法主动返回响应、释放 TCP 连接,Node 服务就会一直保持连接状态直到触发超时阈值,Postman 自然会一直转圈等待。
同时现有代码的异步流程是断裂的:request 库的调用是异步回调实现,代码里用同步赋值的方式拿返回值,永远拿不到实际请求回来的天气数据,就算想给客户端回响应也没有可用的内容。

具体修复步骤

1. 调整 model.js 的异步透传逻辑

原代码里的 getData 是异步执行,不能用同步 return 拿结果,需要通过回调把最终获取的天气数据、错误向外传递:

// model.js
const request = require('request');

function getData(city, callback) { 
  const url = "something";
  request(url, function (err, response, body) {
    if (err) {
      callback(err, null);
      return;
    }
    callback(null, JSON.parse(body));
  });
} 

exports.check = (city, callback) => {
  city = city.toLowerCase();
  getData(city, (err, data) => {
    if (err) {
      callback(err, null);
      return;
    }
    callback(null, data);
  });
};

2. 调整 controller.js 的响应逻辑

controller 层拿到 model 返回的最终结果后,必须主动调用 res 对应的方法结束请求:

// controller.js
const UserModel = require('./model');

exports.check = (req, res) => {
  // 基础入参校验
  if (!req.body.city) {
    return res.status(400).json({
      code: 400,
      message: "请传入city参数"
    });
  }

  UserModel.check(req.body.city, (err, weatherData) => {
    // 异常分支返回错误响应
    if (err) {
      return res.status(500).json({
        code: 500,
        message: "天气服务请求失败",
        error: err.message
      });
    }
    // 成功分支返回天气数据,执行完这行后连接会主动释放,Postman 就会结束等待
    res.status(200).json({
      code: 200,
      data: weatherData
    });
  });
};

3. 路由配置无需调整

原有的路由挂载写法本身没有问题,保持即可:

app.post('/check', UsersController.check);
额外注意事项
  • 不要在 controller 中直接接收 UserModel.check 的同步返回值,这个值永远是 undefined——因为异步请求的执行速度慢于同步代码的执行节奏,同步代码运行完的时候请求还没返回。
  • 所有分支的响应逻辑前都要加 return,避免执行完响应逻辑后继续向下运行其他代码,触发 Cannot set headers after they are sent to the client 的常见报错。
  • request 库目前已停止维护,后续可以替换为支持 Promise 语法的 axios 等库,减少回调嵌套的代码量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 00:24:01