@easyweb/错误
用于 Easyweb 微服务的共享 HTTP 错误分类学: 有机器可读代码的打出错误类, 以及序列化的快递中件.
以前这些班都住在这里 @easyweb/authentication他们搬进来了 @easyweb/[email protected] ——错误处理是交叉的,是一项需要的服务 ConflictError 不应依赖JWT包来获得.
安装
npm install @easyweb/errors
express@^5 是一种同伴依赖,属于消费服务.
接线
在每个路由器之后, 上载全部和处理器 :
import { errorHandler, notFoundHandler } from "@easyweb/errors";
import logger from "./lib/logger";
app.use("/auth", authRouter);
app.all(/.*/, notFoundHandler);
app.use(errorHandler({ logger }));
通过服务皮诺的例子。 默认是 console,它工作但产生无结构的输出,没有服务名称,没有编辑,也没有请求id.
| 选项 | 默认 | |
|---|---|---|
logger | console | 任何东西 error 财务报告和审定财务报表 warn。 。 。 . |
logClientErrors | false | 警告层的日志4xx 关闭因为客户错误不是事件. |
includeRequestId | true | 包含 requestId 在体内. |
fallbackMessage | "Something went wrong" | 未识别错误的正文文本 . |
响应形状
{
"errors": [
{ "message": "Email is already registered", "field": "email", "code": "CONFLICT" }
],
"requestId": "0f4d…" // omitted when requestContext has not run
}
message 财务报告和审定财务报表 field 并保持不变. code 并且是客户唯一应该分行的.. message 自由式英语写在掷出地点, 部分已经是印度尼西亚语.
requestId 来自 req.requestId,设置 requestContext 内 @easyweb/authentication,与 x-request-id 响应头。 它被防御性地读取,所以这个软件包并不依赖于认证软件包.
类
| 状态 | 类 | 构造器 |
|---|---|---|
| 400个 | BadRequestError | (message) |
| 400个 | RequestValidationError | (errors) ——接受 { field, message } 或者说 { msg, path }每个条目 |
| 401 (中文(简体) ) | NotAuthorizedError | (message = "Not authorized") |
| 403 (韩语) | ForbiddenError | (message = "Forbidden") |
| 404 (韩语) | NotFoundError | () ——无路线路径 |
| 404 (韩语) | ResourceNotFoundError | (resource, id?) ——域对象 |
| 409个 | ConflictError | (message, field?) |
| 422个 | UnprocessableEntityError | (message) |
| 429个 | TooManyRequestsError | (message?, retryAfterSeconds?) |
| 500个 | InternalServerError | (message = "Something went wrong") |
| 500个 | DatabaseConnectionError | () |
| 502 (中文(简体) ) | BadGatewayError | (message?) |
| 第503条 | ServiceUnavailableError | (message?, retryAfterSeconds?) |
| 504 (中文(简体) ) | GatewayTimeoutError | (message?) |
retryAfterSeconds 变成一个 Retry-After 头曰.
挑一个
- 401对403 ——401意为"我们不知道你是谁";403意为"我们知道,你可能不知道". 为角色失败而返回401会让客户端回合出现无法成功的再校正循环.
- 400对409 -400人说请求有问题 如果请求是罚款和 状态 冲突( 重复的电子邮件, 已经核实的账户) , 即 409 : 重试相同的请求无济于事 .
- 400对404 —— 说
BadRequestError("User not found")责怪打电话的人问了一些没有的东西。 使用ResourceNotFoundError。例外:在登录时,“没有这样的用户”是一个NotAuthorizedError,或端点成为账户编号甲骨文. - 500对503 500表示我们的密码破了 暂时减少的依赖性为503个,管弦乐团对两者有不同的对待.
处理者的行为
- A 类
CustomError连载着它自己的地位和身体. - 身体保护者
SyntaxError(malform JSON)变成400,而不是500. - 一个非
CustomError带有数字status编号 :statusCode内[400,599]保留它——堆栈中的几个库设置了一个准确的库. - 其它的都是500块
fallbackMessage。 。 。 .
在第2至4个分支上 message 堆叠是 永远 序列化:它们可以命名一个表格,一个查询,或者一个秘密. 只信任状态 .
isCustomError
处理器的分支 isCustomError(err)没有 err instanceof CustomError。 。 。 .
instanceof 比较构造器身份, 所以当此软件包的两个复制件在一个过程中存在时, 失败了 node_modules/@easyweb/authentication/node_modules/。失败是静默的和完全的:每次错误都停止匹配,变成通用的500,而类型仍然检查,建筑仍然通过.
两项辩护理由: @easyweb/authentication 声明此软件包为 依赖性 所以npm无法筑巢 CustomError 携带一个 __easywebError 该品牌 isCustomError 掉头 如果您添加了依赖于此软件包, 请基于同样的原因声明为对等方 .
以 :
npm ls @easyweb/errors # must show exactly one, deduped at the top level
出版
npm run build && npm publish
build 运行 clean 先说 没有它,一个重新命名或被删除的源文件会留下一个孤儿 dist/ 船在焦油丸中.