Hapi 是一个 Node.js 的 Web 框架,它以插件化的方式构建,使得开发者可以根据自己的需求选择性地使用不同的插件来扩展框架的功能。其中,Hapi-Api-Errors 是一个用于处理 API 错误的插件,可以帮助我们更好地管理和处理错误。
安装 Hapi-Api-Errors
使用 npm 安装 Hapi-Api-Errors:
npm install hapi-api-errors
使用 Hapi-Api-Errors
在 Hapi 中使用 Hapi-Api-Errors 需要进行如下步骤:
- 注册插件
- 配置插件
- 在路由中使用插件
注册插件
在 Hapi 中注册插件的方式有很多种,这里我们演示一种常见的方式:在服务器启动时通过 server.register
方法注册插件。
const Hapi = require('hapi'); const HapiApiErrors = require('hapi-api-errors'); const server = new Hapi.Server(); server.connection({ port: 3000, host: 'localhost', }); server.register({ register: HapiApiErrors, options: { // 配置选项 }, }, (err) => { if (err) { console.error(err); } });
配置插件
Hapi-Api-Errors 的配置选项包括:
errorKey
:错误信息的键名,默认为error
。stackKey
:堆栈信息的键名,默认为stack
。responseCodeKey
:响应状态码的键名,默认为code
。isHttpError
:判断是否为 HTTP 错误的函数,默认为判断状态码是否在400
到599
之间。override
:覆盖现有错误处理程序的选项,默认为false
。
server.register({ register: HapiApiErrors, options: { errorKey: 'err', stackKey: 'stackTrace', responseCodeKey: 'status', isHttpError: (err) => { return err.status >= 400 && err.status <= 599; }, override: true, }, }, (err) => { if (err) { console.error(err); } });
在路由中使用插件
在路由处理程序中,可以使用 reply
方法的 HapiApiErrors
扩展方法来返回错误响应。
server.route({ method: 'GET', path: '/users/{id}', handler: (request, reply) => { const id = request.params.id; if (!id) { return reply.badRequest('User ID is required'); } // 查询用户信息 const user = getUserById(id); if (!user) { return reply.notFound('User not found'); } return reply(user); }, });
reply
的 HapiApiErrors
扩展方法包括:
badRequest
:返回 400 错误。unauthorized
:返回 401 错误。forbidden
:返回 403 错误。notFound
:返回 404 错误。conflict
:返回 409 错误。unprocessableEntity
:返回 422 错误。internal
:返回 500 错误。
示例代码
下面是一个完整的示例代码:
const Hapi = require('hapi'); const HapiApiErrors = require('hapi-api-errors'); const server = new Hapi.Server(); server.connection({ port: 3000, host: 'localhost', }); server.register({ register: HapiApiErrors, options: { errorKey: 'err', stackKey: 'stackTrace', responseCodeKey: 'status', isHttpError: (err) => { return err.status >= 400 && err.status <= 599; }, override: true, }, }, (err) => { if (err) { console.error(err); } }); server.route({ method: 'GET', path: '/users/{id}', handler: (request, reply) => { const id = request.params.id; if (!id) { return reply.badRequest('User ID is required'); } // 查询用户信息 const user = getUserById(id); if (!user) { return reply.notFound('User not found'); } return reply(user); }, }); server.start((err) => { if (err) { console.error(err); } else { console.log(`Server running at: ${server.info.uri}`); } }); function getUserById(id) { // 查询用户信息的逻辑 }
总结
Hapi-Api-Errors 插件可以帮助我们更好地处理 API 错误,让我们的代码更加简洁和易读。在使用该插件时,我们需要注册插件、配置选项和在路由中使用插件。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/658b73e7eb4cecbf2d0b7cb0