在开发 Hapi 应用时,异常处理是一个非常重要的话题。在应用中,难免会出现各种各样的错误,如数据库连接失败、请求超时等等。如何处理这些错误,让用户看到友好的提示信息,是一个需要认真思考的问题。
Hapi 应用中的异常处理方式
Hapi 应用中的异常处理方式有很多种,下面介绍几种常见的方式。
1. 使用 try-catch
使用 try-catch 可以捕获代码块中的异常,并进行相应的处理。在 Hapi 应用中,可以在路由处理函数中使用 try-catch,如下所示:
// javascriptcn.com 代码示例 server.route({ method: 'GET', path: '/user/{id}', handler: async (request, h) => { try { const user = await User.findById(request.params.id); if (!user) { throw new Error('User not found'); } return user; } catch (error) { console.error(error); throw Boom.notFound('User not found'); } } });
在上面的代码中,我们使用 try-catch 捕获了 findById 函数可能抛出的异常,并使用 Boom.notFound 函数抛出了一个 HTTP 404 错误。这样做的好处是,可以将错误信息转化为友好的提示信息,让用户更容易理解。
2. 使用 Hapi 的错误处理机制
Hapi 提供了一套完整的错误处理机制,可以让我们更方便地处理异常。我们可以使用 server.ext 方法注册一个错误处理器,如下所示:
// javascriptcn.com 代码示例 server.ext('onPreResponse', (request, h) => { const response = request.response; if (response.isBoom) { const error = response.output.payload; error.message = 'Oops! Something went wrong'; error.statusCode = response.statusCode; return h.response(error).code(response.statusCode); } return h.continue; });
在上面的代码中,我们注册了一个 onPreResponse 的事件处理器,它会在响应返回之前被调用。如果响应是一个 Boom 错误,我们就将它转化成一个包含友好提示信息的 JSON 响应。
3. 使用插件
Hapi 提供了很多插件,可以让我们更方便地处理异常。例如,hapi-error 中间件可以将错误信息转化成友好的 HTML 页面。我们可以在应用中注册这个插件,如下所示:
// javascriptcn.com 代码示例 const HapiError = require('hapi-error'); server.register({ plugin: HapiError, options: { template: 'error', message: 'Oops! Something went wrong' } });
在上面的代码中,我们注册了 hapi-error 插件,并指定了一个名为 error 的模板和一条友好的提示信息。当应用出现错误时,hapi-error 中间件会自动渲染这个模板,并将错误信息传递给它。
总结
在 Hapi 应用中,异常处理是一个非常重要的话题。我们可以使用 try-catch 捕获异常,使用 Hapi 的错误处理机制处理异常,或者使用插件将异常转化成友好的提示信息。无论哪种方式,我们都应该尽可能地让用户看到友好的提示信息,让他们更容易理解应用出现的错误。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/658510bcd2f5e1655dfb760a