43df41287f
Глобальный репортер в api.js (грузится на всех страницах) ловит необработанные JS-ошибки
(window 'error') и rejected-промисы ('unhandledrejection') в браузере пользователя и шлёт
в POST /api/client-errors. Дедуп по сигнатуре + лимит 15/страницу, только для залогиненных,
keepalive, не флудит и сам не падает.
Бэкенд: routes/clientErrors (auth + rate-limit 20/мин на юзера) → clientErrorController
пишет в общий error_log с level='client' (message/stack/route=url/method=kind/user_id),
поля обрезаются. Появляются в существующей админ-вкладке «Ошибки» с бейджем «БРАУЗЕР»
(фиолетовый акцент vs розовый у серверных). Тест client-errors.test.js 5/5.
lint:routes 0; node --check всех файлов.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
12 lines
598 B
JavaScript
12 lines
598 B
JavaScript
'use strict';
|
|
const router = require('express').Router();
|
|
const { authMiddleware } = require('../middleware/auth');
|
|
const rateLimit = require('../middleware/rateLimit');
|
|
const ctrl = require('../controllers/clientErrorController');
|
|
|
|
router.use(authMiddleware);
|
|
// Не больше 20 отчётов в минуту с пользователя — защита от флуда циклящихся ошибок.
|
|
router.post('/', rateLimit({ windowMs: 60_000, max: 20, byUser: true, message: 'Слишком много отчётов об ошибках' }), ctrl.report);
|
|
|
|
module.exports = router;
|