简介
api-problem
是 npm 上的一个 Node.js 工具包,它可以方便地将错误信息和 HTTP 状态码封装成符合 RFC7807 的 API Problem 对象,并返回到客户端。本文将深入介绍api-problem
的使用方法,以及其在前端开发中的指导意义。
安装
使用 npm
命令进行安装:
npm install api-problem
示例
下面我们通过一个示例来说明 api-problem
的使用方法。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- - -------- -------------------------- - - ----------------------- ----- --- - ---------- -- ----------- --- ------- -- ---------------- ----- ---- ----- -- - ----- ------- - --- --------- ------- ---- ------ ------- ------- ------------- --------- ---------------- --- -------------- --- -- -- --- ------- ---- ----- --- ------------------------------------ ---------------- -- -- - ------------------- -- ------- ---
从上面的代码中我们可以看到,首先我们引入了 api-problem
中的两个类: Problem 和 ProblemJsonErrorMiddleware。在示例中,我们创建了一个路由 /test
,当访问该路由时,返回一个符合 RFC7807 规范的 API Problem 对象,并将其作为 next 的参数抛出。另外,我们还需要添加两个中间件,分别是 body-parser
和 ProblemJsonErrorMiddleware
。最后,使用 express 的 listen 方法监听 3000 端口,随时与客户端进行通信。
我们使用 curl 工具发送 GET 请求:
curl http://localhost:3000/test
服务器将返回一个格式化为 JSON 的错误对象:
{ "status": 400, "title": "参数错误", "detail": "缺失必要的参数:id", "instance": "/test" }
方法和属性
Problem
new Problem(options)
创建一个 API Problem 对象。
- options.status: 表示 HTTP 状态码,可以通过
Problem.STATUS_XXX
常量获取, 默认值是 500。 - options.title: 表示错误的简要描述,必填。
- options.detail: 表示错误的详细描述,可选。
- options.type: 表示错误类型的 URI,可选(不建议使用)。
- options.instance: 表示错误实例的 URI,可选。
const problem = new Problem({ status: Problem.STATUS_BAD_REQUEST, title: '参数错误', detail: '缺失必要的参数:id', instance: req.originalUrl, });
Problem.STATUS_BAD_REQUEST
400,客户端提交了有问题的请求(如请求格式有误、参数错误等)。
Problem.STATUS_FORBIDDEN
403,服务端受到请求,但是拒绝提供服务。
Problem.STATUS_NOT_FOUND
404,请求资源不存在。
Problem.STATUS_SERVER_ERROR
500,服务器内部错误,无法完成请求。
ProblemJsonErrorMiddleware
ProblemJsonErrorMiddleware(options)
创建一个中间件用于处理 Error 对象,并返回为符合 RFC7807 标准的 API Problem 对象。
app.use(ProblemJsonErrorMiddleware());
options.log
当一个 Error 对象被处理时,是否记录到日志中,默认为 true。
注意事项
在使用api-problem
的过程中,有些事项需要特别注意:
problem.detail
不能包含敏感信息,包括但不限于密码、密钥、ID 等信息。- 切勿在生产环境中使用开发者模式,否则客户端将直接看到错误信息。
- 可以通过
ProblemJsonErrorMiddleware
中的 options.customResponseHandler 函数,自定义返回格式。
总结
通过上述示例的介绍,我们可以看到使用 api-problem
可以轻松地将错误信息和 HTTP 状态码转换成符合 RFC7807 标准的 API Problem 对象,并返回到客户端。
在前端开发中,我们可以借助 api-problem
提供的 API Problem 对象,让错误信息整齐规范化,提供更加友好的用户体验,同时有效降低错误调试和维护难度。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5f3d307ddbf7be33b2567102