@keq-request/exception
用于抛出/捕获异常的 Middleware。并且可控制抛出的异常是否触发 retry。
安装
- npm
- pnpm
- yarn
使用方法
import { request } from "keq"
import {
throwException,
catchException,
RequestException,
} from "keq-exception"
request
.use(
catchException((err) => {
if (err instanceof RequestException && err.code === 401) {
context.redirect("/login")
return
}
throw err
})
)
// throwException 的回调函数必然在`await next()`后运行
// 可以在回调函数中尝试获取 Response
.use(
throwException(async (ctx) => {
if (ctx.response && ctx.response.status >= 400) {
const body = await ctx.response.json()
throw new RequestException(ctx.response.status, body.message)
}
})
)RequestException(statusCode[, errorMessage[, retry]])
| 参数 | 默认值 | 描述 |
|---|---|---|
| statusCode | - | 错误码 |
| message | '' | 错误信息 |
| retry | true | 异常是否会触发retry |
Middleware
validateStatusCode
验证 Response 的 status,并抛出对应的 RequestException:
status在200-399范围内时,不抛出异常status = 400时,抛出BadRequestException(statusText)status = 401时,抛出UnauthorizedException(statusText)status = 403时,抛出ForbiddenException(statusText)status = 404时,抛出NotFoundException(statusText)status = 405时,抛出MethodNotAllowedException(statusText)status = 406时,抛出NotAcceptableException(statusText)status = 407时,抛出ProxyAuthenticationRequiredException(statusText)status = 408时,抛出RequestTimeoutException(statusText)status = 409时,抛出ConflictException(statusText)status = 412时,抛出PreconditionFailedException(statusText)status = 413时,抛出ContentTooLargeException(statusText)status = 414时,抛出UriTooLongException(statusText)status = 415时,抛出UnsupportedMediaTypeException(statusText)status = 418时,抛出ImATeapotException(statusText)status = 429时,抛出TooManyRequestsException(statusText)status为其他400-499的数值时,抛出RequestException(status, statusText, false)status = 500时,抛出 `InternalServerErrorException(statusTextstatus = 501时,抛出NotImplementedException(statusText)status = 502时,抛出BadGatewayException(statusText)status = 503时,抛出ServiceUnavailableException(statusText)status = 504时,抛出GatewayTimeoutException(statusText)status为其他500-599的数值时,抛出RequestException(status, statusText, true)
示例
import { request } from "keq"
import { validateStatusCode } from "@keq-request/exception"
request.use(validateStatusCode())Plugin
ValidateStatusCode
用于 @keq-request/cli 的 Plugin,其主要功能有:
- 删除
openapi/swagger文档中的异常响应定义 - 添加
validateStatusCodeMiddleware
Options
| 参数 | 是否必填 | 类型 | 默认值 | 描述 |
|---|---|---|---|---|
| modules | 否 | string[] | undefined | 生效的 module 名称列表 |
示例
.keqrc.ts
import { DefineKeqConfig } from "@keq-request/cli"
import { ValidateStatusCode } from "@keq-request/exception/plugins"
const config: DefineKeqConfig = {
// ...
plugins: [
new ValidateStatusCode(/* { modules: [...] } */)
],
}