@63pokupki/nodejs-common
Version:
Common nodejs functionality
90 lines • 4.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.fErrorHandler = void 0;
const lib_1 = require("@63pokupki/components/lib");
const Json_1 = require("../Helpers/Json");
var CategoryErrorT;
(function (CategoryErrorT) {
CategoryErrorT["error"] = "error";
CategoryErrorT["logic"] = "logic";
CategoryErrorT["valid"] = "valid";
CategoryErrorT["notice"] = "notice";
})(CategoryErrorT || (CategoryErrorT = {}));
/**
* Обработчик ошибок выполнения
* @param err - обязательно instanceof Error()
* @param ctx
* @param next
*/
const fErrorHandler = async (ctx) => {
// const mattermostSys = new Mattermost.MattermostSys(<any>ctx);
var _a, _b;
let ifDevMode = false;
if (ctx.common.env === 'dev' || ctx.common.env === 'test' || ctx.common.env == 'local') {
ifDevMode = true;
}
const ixErrors = ctx.sys.errorSys.getErrors();
const sTraceError = ctx.sys.errorSys.getTraceList().map(el => el.e.stack).join('\r\n');
let iCodeError = 500; // Коды для серверных ошибок
let tCategoryError = CategoryErrorT.error; // Категория различие ошибки не ошибки
if (ixErrors[lib_1.ErrorT.throwLogic] || ixErrors[lib_1.ErrorT.throwAccess]) { // логическая ошибка
iCodeError = 403;
tCategoryError = CategoryErrorT.logic;
}
if (ixErrors[lib_1.ErrorT.throwValid]) { // ошибка валидации
iCodeError = 400;
tCategoryError = CategoryErrorT.valid;
}
if (ixErrors[lib_1.ErrorT.throwValidDB]) { // ошибка валидации БД
iCodeError = 500;
tCategoryError = CategoryErrorT.error;
}
ctx.status(iCodeError);
if (ifDevMode) {
console.log('=================================== \r\n', new Date(), 'url:', ctx.req.url, '\r\n', '----------------------------------- \r\n', '\r\n', 'err.msg: ', ctx.sys.errorSys.getErrors(), '\r\n', 'err.stack: \r\n ', '----------------------------------- \r\n', sTraceError, '\r\n', '----------------------------------- \r\n', '=================================== \r\n', '\r\n');
}
ixErrors["host"] = ctx.headers["host"];
ixErrors["x-forwarded-for"] = ctx.headers["x-forwarded-for"];
ixErrors["x-real-ip"] = ctx.headers["x-real-ip"];
ixErrors["user-agent"] = ctx.headers["user-agent"];
if (!ixErrors['stop_execute_no_error']) {
const aTraceError = ctx.sys.errorSys.getTraceList();
const aTraceErrorSend = [];
for (let i = 0; i < aTraceError.length; i++) {
const vTraceError = aTraceError[i];
aTraceErrorSend.push({
key: vTraceError.key,
msg: vTraceError.msg,
error: (_a = vTraceError === null || vTraceError === void 0 ? void 0 : vTraceError.e) === null || _a === void 0 ? void 0 : _a.message,
trace: (_b = vTraceError === null || vTraceError === void 0 ? void 0 : vTraceError.e) === null || _b === void 0 ? void 0 : _b.stack
});
}
try { // отправка ошибки в апи
const vErrorForAPI = {
apikey: ctx.sys.apikey || null,
type: 'backend',
category: tCategoryError,
env: ctx.common.host_public,
user_id: ctx.sys.userSys.idUser || 0,
url: ctx.req.url || null,
message: ctx.msg || null,
stack: JSON.stringify(aTraceErrorSend) || null,
request_body: JSON.stringify(ctx.body) || null,
fields: JSON.stringify(ixErrors),
};
ctx.sys.monitoringSys.sendErrorApi('api_error:' + ctx.common.nameApp + ':' + ctx.req.url, {
time_start: Date.now(),
time_end: Date.now(),
val: ctx.sys.userSys.idUser,
msg: (0, Json_1.tryJsonToString)(vErrorForAPI)
});
// await faApiRequest<any>(ctx, ctx.common.hook_url_errors_api, vErrorForAPI);
}
catch (e) {
console.warn('Не удалось отправить ошибку на api');
}
}
ctx.send(JSON.stringify(ctx.sys.responseSys.response(null, 'Ошибка сервера')));
};
exports.fErrorHandler = fErrorHandler;
//# sourceMappingURL=ErrorHandler.js.map