← Wszystkie zadaniaNode.js · Junior

HttpError i bezpieczna odpowiedź

Napisz klasę HttpError (dziedziczy po Error, ma status i message) i funkcję toResponse(error) dla obsługi błędów serwera. Zwraca { status, body: { error } }.

Dla błędów klienta (HttpError ze statusem 4xx) komunikat jest pokazywany bez zmian. Wszystko inne - HttpError 5xx, zwykłe Error, a nawet rzucone napisy czy null - daje { error: "Internal Server Error" }: status 5xx zostaje, a dla czegokolwiek, co nie jest HttpError, to 500. Klient nie może widzieć wewnętrznych szczegółów, takich jak adresy baz danych.

Testy (5)

  1. const e = new HttpError(404, 'User not found');
    expect(e).toBeInstanceOf(Error);
    expect(e).toBeInstanceOf(HttpError);
    expect(e.status).toBe(404);
    expect(e.message).toBe('User not found');
  2. expect(toResponse(new HttpError(404, 'User not found'))).toEqual({ status: 404, body: { error: 'User not found' } });
    expect(toResponse(new HttpError(422, 'Email is invalid'))).toEqual({ status: 422, body: { error: 'Email is invalid' } });
  3. expect(toResponse(new Error('connect ECONNREFUSED 10.0.0.5:5432'))).toEqual({ status: 500, body: { error: 'Internal Server Error' } });
  4. expect(toResponse(new HttpError(503, 'Redis is down at 10.0.0.7'))).toEqual({ status: 503, body: { error: 'Internal Server Error' } });
  5. expect(toResponse('oops')).toEqual({ status: 500, body: { error: 'Internal Server Error' } });
    expect(toResponse(null)).toEqual({ status: 500, body: { error: 'Internal Server Error' } });