Interactive Playground
当前部署环境只有 2C4G。为了避免构建阶段因 Monaco、Rollup Browser 和 类型分析导致 OOM,这个版本只保留教程内容,不内嵌在线 Playground。
bun run build:full如需完整交互体验,请在更高配置环境执行上面的完整构建命令。
它接受类似于处理程序的 context,但包括额外的内容:
import { Elysia } from 'elysia'
new Elysia()
.onError(({ code, status }) => {
if(code === "NOT_FOUND")
return '呃~ 你迷路了吗?'
return status(418, "我错了!但我可爱,所以你会原谅我,对吧?")
})
.get('/', () => 'ok')
.listen(3000)您可以返回一个 status 来覆盖默认的错误状态。
您可以如下提供带有 错误代码 的自定义错误:
import { Elysia } from 'elysia'
class NicheError extends Error {
constructor(message: string) {
super(message)
}
}
new Elysia()
.error({
'NICHE': NicheError
})
.onError(({ error, code, status }) => {
if(code === 'NICHE') {
// 类型为 NicheError
console.log(error)
return status(418, "我们不知道你是怎么来到这里的")
}
})
.get('/', () => {
throw new NicheError('自定义错误消息')
})
.listen(3000)Elysia 使用 错误代码 来缩小错误类型的范围。
建议注册自定义错误,因为 Elysia 可以缩小类型范围。
您还可以通过向类添加 status 属性来提供自定义状态代码:
import { Elysia } from 'elysia'
class NicheError extends Error {
status = 418
constructor(message: string) {
super(message)
}
}如果抛出错误,Elysia 将使用此状态代码,详情请参见 自定义状态代码。
您还可以通过提供 toResponse 方法直接在错误中定义自定义错误响应:
import { Elysia } from 'elysia'
class NicheError extends Error {
status = 418
constructor(message: string) {
super(message)
}
toResponse() {
return { message: this.message }
}
}如果抛出错误,Elysia 将使用此响应,详情请参见 自定义错误响应。
我们尝试扩展 Elysia 的上下文。
import { Elysia } from 'elysia'
class YourError extends Error {
status = 418
constructor(message: string) {
super(message)
}
}
new Elysia()
.error({
"YOUR_ERROR": YourError
})
.onError(({ code, status }) => {
if(code === "NOT_FOUND")
return "嗨,你好"
})
.get('/', () => {
throw new YourError("A")
})
.listen(3000)