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

Node.js中Axios POST请求返回ERR_EMPTY_RESPONSE问题求助

问题排查与解决方案

1. 优先排查邮件发送环节

你的注册流程比登录多了await new Email(newUser, url).sendWelcome();这一步,这是最可能导致后端未返回响应的原因:

  • 临时注释掉该行代码,重新测试注册功能。如果此时res能正常获取值,说明问题出在sendWelcome方法中:
    • 检查邮件服务配置(如SMTP参数)是否正确,能否正常发送邮件;
    • 确认sendWelcome内部是否正确处理异步逻辑,是否存在Promise挂起或未捕获的错误;
    • 确保邮件发送失败时,错误能被传递到全局错误处理中间件,避免后端挂起不返回响应。

2. 检查全局错误处理中间件

你的signup用catchAsync包裹,若sendWelcome抛出错误,catchAsync会将错误传给next。需确保Express应用有正确的全局错误处理中间件,捕获错误并返回标准响应:

app.use((err, req, res, next) => {
  err.statusCode = err.statusCode || 500;
  err.status = err.status || 'error';

  res.status(err.statusCode).json({
    status: err.status,
    message: err.message
  });
});

若无此中间件,后端遇错时不会返回任何响应,导致前端Axios请求超时或拿到undefined。

3. 验证后端接口响应

用Postman或curl直接调用POST /api/v1/users/signup:

  • 若Postman也收不到响应,说明后端未发送响应,重点排查sendWelcome和错误处理逻辑;
  • 若Postman能收到响应,问题出在前端:
    • 检查Axios响应拦截器,确保拦截器未返回undefined(比如处理逻辑后忘记返回response);
    • 确认注册请求的URL、请求头与登录请求完全一致,无跨域或配置差异。

4. 确认catchAsync实现正确性

确保catchAsync能正确捕获异步函数错误并传递给next:

const catchAsync = fn => {
  return (req, res, next) => {
    fn(req, res, next).catch(next);
  };
};

若catchAsync实现有误,会导致错误无法被捕获,后端挂起不返回响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:00:38