角度获取 http 错误状态代码 0 未知错误的原因可能是什么(在我的情况下)?

问题描述 投票:0回答:0

最近angular应用出现bug

通常它是这样工作的:

  1. 用户点击按钮。
  2. Angular 触发器方法,它做一些事情,然后向我的 NestJS api 发出请求。
  3. API 生成 PDF 文件,然后将其作为缓冲区返回。
  4. Angular 从响应中接收 PDF 文件作为 blob,然后在新选项卡中将其显示给用户。

错误描述如下:

大约 1% 的请求返回错误。大约 99% 的请求都可以正常工作。 但是 API 总是接收请求,然后总是正确返回 PDF 缓冲区(日志中没有错误,它表示响应代码状态为 200)。所以角度正确发送请求,但有时没有收到响应(???)。

我永远无法重现此类错误/行为,只有用户可以:D

这是 Angular 接收到的错误对象:

{
    "headers": {
        "normalizedNames": {},
        "lazyUpdate": null,
        "headers": {}
    },
    "status": 0,
    "statusText": "Unknown Error",
    "url": "https://[my_hidden_url]/multirep/offer?OfferNo=448589",
    "ok": false,
    "name": "HttpErrorResponse",
    "message": "Http failure response for https://[my_hidden_url]/multirep/offer?OfferNo=448589: 0 Unknown Error",
    "error": {
        "isTrusted": true
    }
}

这是我的 API 端点的结尾(也许响应设置有问题?):

const PDFBuffer = await this.mreport.generateOfferPDFAndGetBuffer(pagesReadyToMerge);

console.log('PDF Buffer length and PDFBuffer type: ', PDFBuffer.length, typeof PDFBuffer);

res.set({
  'Content-Type': 'application/pdf',
  'Content-Length': PDFBuffer.length,
  'Cache-Control': 'no-cache, no-store, must-revalidate',
  'Pragma': 'no-cache',
  'Expires': 0,
});
  
res.send(PDFBuffer);

这里是触发角度方法的一部分(这条线捕获错误):

offerPdf = await this.service.getOfferPDF(`https://[my_hidden_url]/multirep/offerOfferNo=${offerNo}`);

这是向我的 api 发出请求的服务方法:

getOfferPDF(url: string): Promise<any> {
  return new Promise((resolve, reject) => {
    this.http.get(url, { responseType: 'blob' }).subscribe(
      res => {
        if (res) {
          resolve(res);
        } else {
          reject(res);
        }
      },
      error => {
        reject(error);
      },
    );
  });
}

根据我对“0 Unknown Error”的研究,它可能与:

  • 不正确的 CORS 配置(在 NestJS 中我使用下面的代码)
const server = express();
const app = await NestFactory.create(AppModule, 
    new ExpressAdapter(server)
);
app.enableCors();
  • AdBlock(无法通过这种方式重现错误)
  • 缓慢/无互联网连接(无法通过这种方式重现错误)

附加信息:

我上面提供的错误对象来自数据库(角度错误处理系统捕获并保存在那里)所以我真的不知道在浏览器控制台中显示的是什么错误——它可能与状态 0 不同。

angular nestjs http-error
© www.soinside.com 2019 - 2024. All rights reserved.