NestJS API网关GET请求正常,但POST请求无限挂起的问题排查求助
NestJS API网关GET请求正常,但POST请求无限挂起的问题排查求助
我正在用NestJS构建微服务架构,有一个API网关负责将请求代理到不同的服务(Order、Email、User)。
GET请求一切正常,但发送到Email服务的POST请求会无限挂起,最终因socket hang up失败。
环境配置
API网关里有一个简单的路由配置:
export const routes = { Order: 'http://localhost:3001/api/Order', Email: 'http://localhost:3002/api/Email', User: 'http://localhost:3003/api/User', };
下面是API网关负责代理请求的控制器代码:
@Controller() export class AppController { constructor(private readonly appService: AppService) {} @All('api/:service/*') async proxy( @Param('service') service: string, @Req() req: Request, @Res() res: Response, @Body() body: any, ) { console.log('Service:', service); const path = req.url.replace(`/api/${service}`, ''); try { const response = await this.appService.forwardRequest(req, res, body, path, service); res.status(response.status).json(response.data); } catch (error) { console.error('Proxy request failed:', error); return res.status(500).json({ message: 'Error forwarding request' }); } } }
API网关的服务层用axios(@nestjs/axios)转发请求:
async forwardRequest( req: Request, res: Response, body: any, path: string, service: string, ): Promise<AxiosResponse> { const baseURL = routes[service]; const url = baseURL + path; const configuredHeaders = this.httpHelper.configureHeaders(req.headers); console.log('Forwarding request:', { method: req.method, url, headers: configuredHeaders, body: JSON.stringify(body), }); return lastValueFrom( this.http.request({ method: req.method, url: url, data: body, headers: configuredHeaders, timeout: 10000, // 10 seconds }), ); }
问题现象
- GET请求完全正常!
- 发送到
http://localhost:3000/api/Email/SendEmail的POST请求会无限挂起(其他POST请求也是如此)。 - 但直接调用
http://localhost:3002/api/Email/SendEmail却能正常工作。
我在Email服务里创建了一个测试用的GET端点:
@Get('SendEmail') sendEmailTest() { console.log('Test log!'); return { message: 'Email sent!' }; }
通过API网关访问这个端点完全正常,说明问题只出在POST请求上。
已尝试的排查步骤
- 检查Email服务是否收到请求 → 没有收到(所以问题大概率在API网关)。
- 在main.ts里启用了
express.json()和express.urlencoded()→ 还是挂起。 - 在
forwardRequest()里打印请求体 → 请求体是存在的。 - 给Axios加了10秒超时 → 只是从无限挂起变成10秒后失败。
想请教大家:为什么API网关代理GET请求正常,但POST请求会挂起?是什么原因导致NestJS在代理POST请求时无限挂起?
备注:内容来源于stack exchange,提问作者apoleyta97
相关产品推荐
相关产品推荐

