【发布时间】:2022-12-10 00:05:35
【问题描述】:
我有一个项目,我正在使用 Node js 作为后端。 我在捕获与授权 401 相关的错误时遇到问题。 如果出现类型授权错误,我想返回一个带有消息的对象并将其用作中间件,但它不起作用。
我仍然收到 Html 错误而不是对象。
授权处理程序:
function handler(err, req, res, next) {
if (err.name === 'UnauthorizedError') {
// jwt authentication error
return res.status(401).json({success: false, message: "The user is not authorized"})
}
next();
}
module.exports = handler;
App.js:调用中间件:
const handler=require('./helpers/error-handler');
app.use(handler);
数据库处理程序:处理与数据库相关的错误
"use strict";
/**
* Get unique error field name
*/
const uniqueMessage = error => {
let output;
try {
let fieldName = error.message.substring(
error.message.lastIndexOf(".$") + 2,
error.message.lastIndexOf("_1")
);
output =
fieldName.charAt(0).toUpperCase() +
fieldName.slice(1) +
" already exists";
} catch (ex) {
output = "Unique field already exists";
}
return output;
};
/**
* Get the erroror message from error object
*/
exports.errorHandler = error => {
console.log('=================================================================')
console.log(error);
console.log('=================================================================')
let message = "";
// if (error.name==="UnauthorizedError"){
// message=error.name + ": " + error.message;
// }
if (error.code) {
switch (error.code) {
case 401:
message="User not authorized";
break;
case 11000:
case 11001:
message = uniqueMessage(error);
break;
default:
message = "Something went wrong";
}
} else {
for (let errorName in error.errorors) {
if (error.errorors[errorName].message)
message = error.errorors[errorName].message;
}
}
return message;
};
【问题讨论】: