Unicode 特殊字符 U+FFFD 从我的 Nest.JS API 返回,但只是有时

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

我在 Nest.Js API 中遇到以下问题: 每天大约 3 到 5 次,每次大约 1 小时,API 响应无法正确处理 UTF-8 特殊字符。例如,像

这样的 JSON 响应

{ "name":"若昂·佩索阿" } 返回为 {“姓名”:“若奥·佩索阿”}.

在调试时,我得出的结论是,字符在 API 逻辑之后被损坏,可能是在嵌套序列化器中。例如,在此代码片段中:

console.log(sendResourceDto);
const { data } = await firstValueFrom(
  this.httpService
    .post(
      process.env.OTHER_SERVICE + '/resource',
      sendResourceDto,
      {
        headers: {
          'Content-Type': 'application/json; charset=utf-8',
        },
      }
    ).pipe( /* ... */ )
);

控制台日志中的字符仍然正确,但是一旦请求到达 OTHER_SERVICE(也是我们的代码库),它们就会损坏。这也会发生在常规控制器调用中。

我将这些时期与数据库、服务器或外部服务(在我的例子中是 AWS Lambda)中可能的使用高峰进行了比较,但我发现没有相关性。

我没有排除但可能存在的另一个选择是问题可能出在 NGINX 上。但是,我相信这不太可能,因为 OTHER_SERVICE 和我的 API 在本地进行通信,无需服务器的反向代理配置。

任何相关的事情都可以帮助我

我在开发中测试了几十种可能性,但无法重现问题。尽管如此,我试图在生产中强制发生错误,但它并没有发生。它只会在任意时间发生。”

node.js docker nginx unicode nestjs
1个回答
0
投票

在 Docker 上运行的 NestJS 应用程序是否也发生过同样的情况。使调试变得更加困难的是,容器启动时服务运行良好,但在随机时间(大约 30 分钟)之后,它开始失败并在 API JSON 响应中返回损坏的字符,正如您所描述的那样。

一旦开始返回损坏的字符,它就会保持这种状态,直到容器重新启动。

虽然我不能告诉你确切的原因,但原因与节点图像有关。

node:21.6.1-bookworm-slim
按预期工作,但升级到
node:22.7.0-bookworm-slim
我们收到此错误。

© www.soinside.com 2019 - 2024. All rights reserved.