我正在使用HapiJS开发RESTful API。

我正在使用HapiJS v17来利用async / await。

我的意图是不处理每条路线中的异常,而要集中处理所有unhandledRejection。

我试图实现此目的的方法是在服务器启动时尽早收听unhandledRejection事件。

process.on('unhandledRejection', (reason, p) => {
    console.log('Unhandled Rejection at:', p, 'reason:', reason);
});


然后,例如,在我的业务逻辑代码中,我有意不捕获被拒绝的promise(例如数据库错误),希望我能够在process.on('unhandledRejection'的回调中对其进行处理

但是console.log语句永远不会触发。

例如:

handler: async (request, h) => {
            const user = request.user;

            const userIdToUpdate = request.params.id;

            const firstName = request.payload.firstName;
            const lastName = request.payload.lastName;
            const roles = request.payload.roles;

            const updatedUser = await UserCtrl.updateUser(userIdToUpdate, firstName, lastName, roles, user.tenantId.toString());

            const response = h.response(updatedUser.sanitize());
            response.type('application/json');
            return response;
        }


UserCtrl.updateUser返回一个Promise,比方说数据库连接已断开,我假设应该拒绝Promise,但是为什么未触发process.on('unhandledRejection', (reason, p) => {

最佳答案

我认为HapiJS捕获了您的请求处理程序的错误。

查看代码-似乎错误catched there

不确定以何种格式以及在什么条件下将其进一步抛出。

无论如何,我都不会依赖于这种逻辑的框架,至少要用自己的包装器包装所有处理程序并在其中记录所有错误。

09-19 08:54