Код Middle HTTP-сервер, Express, NestJS спрашивают часто обновлено
Ошибки домена в HTTP-ответ (problem+json)
Условие
Напиши toHttpError(err, { exposeInternal = false } = {}): превращает объект ошибки в ответ { status, body }, где body в стиле RFC 9457 (problem details): { type, title, status, detail? , errors? }.
Ошибки приходят простыми объектами с полем code:
VALIDATION→ 400, titleValidation failed,errorsизerr.fields(как есть);UNAUTHENTICATED→ 401Unauthorized;FORBIDDEN→ 403Forbidden;NOT_FOUND→ 404Not found,detailизerr.message;CONFLICT→ 409Conflict,detailизerr.message;RATE_LIMIT→ 429Too many requests;- всё остальное → 500
Internal error;detailсerr.messageтолько еслиexposeInternal.
type всегда about:blank. Поля detail/errors не добавлять, если для них нет данных.
Примеры
toHttpError({"code":"NOT_FOUND","message":"User 7 not found"}) // {"status":404,"body":{"type":"about:blank","title":"Not found","status":404,"detail":"User 7 not found"}}
toHttpError({"code":"VALIDATION","fields":[{"path":"email","msg":"invalid"}]}) // {"status":400,"body":{"type":"about:blank","title":"Validation failed","status":400,"errors":[{"path":"email","msg":"invalid"}]}}
toHttpError({"code":"FORBIDDEN","message":"role user"}) // {"status":403,"body":{"type":"about:blank","title":"Forbidden","status":403}}
Как подойти
Подсказки: 2
- Таблица
code → [status, title]. - Проверяй код через
hasOwnProperty, а неmap[err.code]: у объекта есть унаследованные ключи.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Курсорная пагинация по (created_at, id)
Следующий вопрос
Разбор query string с повторяющимися ключами