我正在编写 REST API 并尝试正确处理任何错误。
当API调用成功时,成功对象将返回给调用函数,并将响应发送给客户端。但是如果发生错误,我想将错误返回给调用函数,以便我可以向客户端发送错误消息。
router.delete('/project', (req, res) => {
return DeleteProject(userId, projectId)
.then((response) => {
//handle response
});
});
DeleteProject: (userId, projectId) => {
return deleteProject(userId, projectId)
.then((response) => {
return response
})
.catch((error) => {
console.log('Error in DeleteProject:', error) // This happens.
return error; // this doesn't happen.
})
},
function deleteProject(userId, projectId) {
return Project.deleteOne( ... delete the project... )
.then((response) => {
return response
})
.catch((error) => {
return error
})
}
上面中间函数DeleteProject()中的.catch(error)在发生错误时被触发(即控制台日志发生),但返回并不会返回到路由器。
如何返回错误以供路由器处理?
最佳答案
您可以简单地从其他两个函数中删除 catch
方法,并将 catch
函数放入路由器本身中。然后错误本身将传播到您的路由器功能
router.delete('/project', (req, res) => {
return DeleteProject(userId, projectId)
.then((response) => {
//handle response
}).catch(() => {
// Add catch function here. Any error in "DeleteProject" and "deleteProject" will propagate to here
})
});
DeleteProject: (userId, projectId) => {
return deleteProject(userId, projectId)
.then((response) => {
return response
});
// Remove catch function
},
function deleteProject(userId, projectId) {
return Project.deleteOne( ... delete the project... )
.then((response) => {
return response
});
// Remove catch function
}
关于javascript - 从 .catch(error) 返回未在 Node/Express 中返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47108110/