← Alle AufgabenNode.js · Junior
HttpError und eine sichere Antwort
Schreib eine Klasse HttpError (erweitert Error, hat status und message) und eine Funktion toResponse(error) für den Fehler-Handler des Servers. Sie liefert { status, body: { error } }.
Bei Client-Fehlern (HttpError mit 4xx-Status) wird die Meldung unverändert gezeigt. Alles andere, ein HttpError mit 5xx, einfache Errors, sogar geworfene Strings oder null, ergibt { error: "Internal Server Error" }: ein 5xx-Status bleibt erhalten, und alles, was kein HttpError ist, bekommt 500. Der Client darf keine internen Details wie Datenbankadressen sehen.
Strg+Enter führt die Tests aus. Tab rückt ein; um den Editor per Tastatur zu verlassen, drücke Esc und dann Tab. Der Code wird in diesem Browser gespeichert.
Tests (5)
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');
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' } });
expect(toResponse(new Error('connect ECONNREFUSED 10.0.0.5:5432'))).toEqual({ status: 500, body: { error: 'Internal Server Error' } });
expect(toResponse(new HttpError(503, 'Redis is down at 10.0.0.7'))).toEqual({ status: 503, body: { error: 'Internal Server Error' } });
expect(toResponse('oops')).toEqual({ status: 500, body: { error: 'Internal Server Error' } }); expect(toResponse(null)).toEqual({ status: 500, body: { error: 'Internal Server Error' } });