#1969·elysia

onError 返回 status() 会破坏共享的 NotFoundError 唯一实例 - 第一次 404 之后的每一次 404 都会变成 500

作者: guiwatanabe创建于 2026年8月19日更新于 2026年8月19日
标签bug

Elysia的哪个版本在运行?

爱丽西亚@1.4.29

你的电脑是什么平台?

达尔文 25.5.0 arm64臂

你在使用什么样的环境

1.3.14 国家

你在使用动态模式吗?

没有

  • 什么步骤可以复制虫子?

当一个全局的 Error 处理器返回一个状态(...) 响应时, Elysia 变换了抛出的错误而不是返回的响应 。 对于无与伦比的路径来说,这个变异是组成了General Handler的单一的"非FoundError"实例(NotFoundError Encent),它创造了一次并重复了每个请求,因此腐败持续了服务器的寿命:

  • 第1个未匹配的请求:错误.status QQ 404,错误.message QQ "NOT FOUND"
  • 每一个后续未匹配的请求:错误. status QQ "NOT FOUND"(字符串代码),错误.message QQ未定义

自定义错误- 翻译逻辑读取错误. status 后自后404起出现错误(在我们的生产应用中,所有未匹配的路径在前404后返回了500个).

从“ elysia” 导入 { Elysia, Not FoundError}

新爱丽西亚( ) .on Error (({ 错误,状态})} {{ 如果(非Found Error的反例) control.log ('thrown with status:', 错误. status, 'QQ消息:', 错误. message) 返回状态( 404, “未找到的习惯” ) ) (中文(简体) ). . listen( 3000) (中文(简体) ).

等待获取( “ http:// localhost: 1: 00/ missing ”) 等待获取( “ http:// localhost: 1: 00/ missing ”)


输出 :

以状态丢出 : 404 QQ 消息: NOT FOUND 以状态丢出 : NOT FOUND QQ 消息: 未定义


什么是预期的行为?

从返回的响应中读取状态/ 消息, 而不是所抛出的错误 - 如错误. status =  r.code; 错误. message =  r. reswer - 或完全避免改变共享的 NotFoundError 实例( 每个请求构建它, 或冻结它) 。

你看见什么了?

无回复( N)

补充资料

在'src/compose.ts:2699'(组成ErrorHandler)中,块处理在 *r 上但变异出错的 Error 处理器返回值守护符:


`如果(r of Elysia Custom status response)+
`error.status=error.code\n' + 数据格式
`error.message=err.reswer ' +
`}`

一些相关的问题: #1363

您是否尝试去掉“ node modules” 和“ bun.lock” 并再次尝试?

内容来源: elysiajs/elysia