рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдЧрд╛рдЗрдб

рдЧрд▓рддрд┐рдпрд╛рдБ рдЕрдЪреНрдЫреА рд╣реИрдВред рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд▓реЗрдЦрдХ, рдЬрд┐рд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдЖрдЬ рд╣рдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╣ рдЖрд╢реНрд╡рд╕реНрдд рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╕рднреА рдХреЛ рдкрддрд╛ рд╣реИред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдбрд░рд╛рд╡рдиреА рд▓рдЧрддреА рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рдиреБрдХрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдХреА рдЧрдИ рдЧрд▓рддреА рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдХреЛ рд╣рд╛рдирд┐ рдкрд╣реБрдБрдЪрд╛рддреА рд╣реИ рдЬрд┐рд╕рдиреЗ рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЙрдирд╕реЗ рд╕реАрдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЕрдЧрд▓реА рдмрд╛рд░ рд╣рдо рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдкрд╣рд▓реЗ рдЧрд▓рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдЬрд░реВрд░рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдм рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВред



рдКрдкрд░ рд╣рдордиреЗ рдЙрди рдЧрд▓рддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдЬреЛ рд▓реЛрдЧ рд░реЛрдЬрдорд░реНрд░рд╛ рдХреА рдЬрд┐рдВрджрдЧреА рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдХреБрдЫ рдФрд░ рд╣реИрдВред рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╣рдореЗрдВ рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рд╣рдореЗрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╕рдВрднрд╡рддрдГ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдпрд╣ рдмрддрд╛рдПрдВ рдХрд┐ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВ рддрд╛рдХрд┐ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЕрдм рди рд╣реЛрдВред

рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╕рд╛рдордЧреНрд░реА рддреАрди рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рд▓реЛрдХрди рджреЗрдВрдЧреЗ рдФрд░ рддреНрд░реБрдЯрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕ рд╕рд╡рд╛рд▓ рдХреЗ рдЬрд╡рд╛рдм рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕рд░реНрд╡рд░ рдХреЛрдб рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЬрдм Node.js + Express.js рдмрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ)ред рдЕрдЧрд▓рд╛, рд╣рдо React.js рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдЬрд┐рди рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╡реЗ рдЙрдирдХреА рдЕрддреНрдпрдзрд┐рдХ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдХреЗ рдХрд╛рд░рдг рдЪреБрдиреА рдЧрдИ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдФрд░ рд░рд┐рдПрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рднреА рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЯреВрд▓ рд╕реЗ рдХреНрдпрд╛ рд╕реАрдЦрд╛ред

рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдХреЛрдб рдЗрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

1. рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рддрд░реАрдХреЗ


рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдХреБрдЫ рдЧрд▓рдд рд╣реБрдЖ рд╣реИ, рддреЛ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

throw new Error('something went wrong') 

рдЗрд╕ рдХрдорд╛рдВрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди, рддреНрд░реБрдЯрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ (рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, "рдлреЗрдВрдХ рджрд┐рдпрд╛")ред рдлреЗрдВрдХ рдмрдпрд╛рди рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╡рд╛рд▓реЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд╛рдп рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред

рд╢реБрд░реБрдЖрддреА рдЬреЗрдПрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЖрдорддреМрд░ рдкрд░ throw рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рдЖрдорддреМрд░ рдкрд░ рднрд╛рд╖рд╛ рд░рдирдЯрд╛рдЗрдо рдпрд╛ рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдлреЗрдВрдХреЗ рдЧрдП рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рдПрдХ ReferenceError: fs is not defined рддрд░рд╣ рдХреБрдЫ рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ ReferenceError: fs is not defined рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

BObject рддреНрд░реБрдЯрд┐


Error рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХрдИ рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд▓реА рд╕рдВрдкрддреНрддрд┐ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рд╡рд╣ message ред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд▓рд╛рдЗрди рдорд┐рд▓рддреА рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рддреНрд░реБрдЯрд┐ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╕рд╛рдВрддреНрд╡рдирд╛ рд╡рд╕реНрддреБ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЕрдкрдиреА message рд╕рдВрдкрддреНрддрд┐ рддрдХ рдкрд╣реБрдВрдЪ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдВрддреНрд╡рдирд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 const myError = new Error('please improve your code') console.log(myError.message) // please improve your code 

рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рджреВрд╕рд░реА рд╕рдВрдкрддреНрддрд┐, рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рддреНрд░реБрдЯрд┐ рд╕реНрдЯреИрдХ рдХрд╛ рдирд┐рд╢рд╛рди рд╣реИред рдпрд╣ рдПрдХ stack рдкреНрд░реЙрдкрд░реНрдЯреА рд╣реИред рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдХреЙрд▓ рд╕реНрдЯреИрдХ (рддреНрд░реБрдЯрд┐ рдЗрддрд┐рд╣рд╛рд╕) рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдСрдкрд░реЗрд╢рди рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЦрд░рд╛рдмреА рд╣реБрдИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЦрд░рд╛рдм рдХреЛрдб рд╣реИ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рдХрд┐рд╕ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реБрдИред рдЗрд╕ рдмрд╛рдд рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ stack рдкреНрд░реЙрдкрд░реНрдЯреА рддрдХ рдкрд╣реБрдВрдЪрдХрд░ рдЖрдк рдХреНрдпрд╛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

 Error: please improve your code at Object.<anonymous> (/Users/gisderdube/Documents/_projects/hacking.nosync/error-handling/src/general.js:1:79) at Module._compile (internal/modules/cjs/loader.js:689:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10) at Module.load (internal/modules/cjs/loader.js:599:32) at tryModuleLoad (internal/modules/cjs/loader.js:538:12) at Function.Module._load (internal/modules/cjs/loader.js:530:3) at Function.Module.runMain (internal/modules/cjs/loader.js:742:12) at startup (internal/bootstrap/node.js:266:19) at bootstrapNodeJSCore (internal/bootstrap/node.js:596:3) 

рдпрд╣рд╛рдВ, рд╢реАрд░реНрд╖ рдкрд░, рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдХреЛрдб рдХреЗ рдЕрдиреБрднрд╛рдЧ рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, рдлрд┐рд░ рдЙрд╕ рд╕реНрдерд╛рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ рдЗрд╕ рдЕрд╕рдлрд▓ рдЕрдиреБрднрд╛рдЧ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ "рд╕рдмрд╕реЗ рджреВрд░" рдЬрд╛рд░реА рд╣реИред

тЦН рдЬрдирд░реЗрд╢рди рдФрд░ рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ


Error рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛, рдЬреЛ рдХрд┐ рдлреЙрд░реНрдо рдХреА рдПрдХ Error рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ new Error() , рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред throw рдСрдкрд░реЗрдЯрд░ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВ, рдЬреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрджрд┐ рдРрд╕реА рддреНрд░реБрдЯрд┐ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рдЦреБрдж throw рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдпрд╛ рдирд╣реАрдВ, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдпрд╛ рднрд╛рд╖рд╛ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ (рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдпрд╛ Node.js рдореЗрдВ) рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реБрдИред рдЖрдЗрдП рд╡рд┐рднрд┐рдиреНрди рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

тЦНрд╕рдВрдХрдЯ рдХреА рдХреЛрд╢рд┐рд╢ ... рдкрдХрдбрд╝


try...catch рдЕрдХреНрд╕рд░ рднреВрд▓ рдЧрдП рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред рдЖрдЬрдХрд▓, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЧрд╣рди рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ async/await рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

 const a = 5 try {   console.log(b) //  b   -   } catch (err) {   console.error(err) //          } console.log(a) //    ,    

рдпрджрд┐ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдордиреЗ рдЕрд╕рдлрд▓ console.log(b) рдХрдорд╛рдВрдб рдХреЛ рдПрдХ try...catch рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ try...catch , рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд░реЛрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

тЦН рдЕрдВрдд рдореЗрдВ рдмреНрд▓реЙрдХ рдХрд░реЗрдВ


рдХрднреА-рдХрднреА рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рд╣реЛ рдпрд╛ рдирд╣реАрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рддреАрд╕рд░реЗ, рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, finally рдореЗрдВ try...catch рдирд┐рд░реНрдорд╛рдг try...catch рдкрдХрдбрд╝реЗрдВред рдЕрдХреНрд╕рд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдЫ рдХреЛрдб рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ try...catch рддреБрд░рдВрдд рдмрд╛рдж рдЖрддрд╛ рд╣реИ try...catch , рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдпрд╣ рдХрд╛рдо рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред

 const a = 5 try {   console.log(b) //  b   -   } catch (err) {   console.error(err) //          } finally {   console.log(a) //        } 

тЦНрдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рддрдВрддреНрд░ - рдХреЙрд▓рдмреИрдХ


рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдЙрди рдХреЛрдб рдХреЗ рд╡рд░реНрдЧреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рддреА рд░рд╣реЗрдЧреАред рдЬрдм рдЬреЗрдПрд╕ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рддрдВрддреНрд░ рдХреЙрд▓рдмреИрдХ (рд╡реИрд╕реЗ, рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдВрдмрдВрдзрд┐рдд рдХреЙрд▓рдмреИрдХ (рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди) рдЖрдорддреМрд░ рдкрд░ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЧрд▓рдд рдкреИрд░рд╛рдореАрдЯрд░ рдЬреИрд╕рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ result - рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рдеред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 myAsyncFunc(someInput, (err, result) => {   if(err) return console.error(err) //           console.log(result) }) 

рдпрджрд┐ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЧрд▓рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдорд╛рди undefined рдпрд╛ null рдорд┐рд▓реЗрдЧрд╛ред рдпрджрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ err рдХреБрдЫ рд╣реИ, рддреЛ рдЗрд╕ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, return рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдпрд╛ if...else рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдФрд░ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП else рдмреНрд▓реЙрдХ рдореЗрдВ рдХрдорд╛рдВрдб рдХрд╛ if...else рдФрд░ рд░рдЦрддреЗ рд╣реИрдВред рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдШрдЯрдирд╛ рдореЗрдВ, рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдмрд╛рд╣рд░ рдХрд░ рджреЗрддрд╛ рд╣реИ, result рдкреИрд░рд╛рдореАрдЯрд░, рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ undefined рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рди рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдХрд░рдирд╛, рдпрджрд┐ рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рддреЛ рд╕реНрд╡рдпрдВ рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдРрд╕рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк result.data рдирд┐рд░реНрдорд╛рдг рдпрд╛ result.data рд╕рдорд╛рди result.data рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

тЦНрдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдореИрдХреЗрдирд┐рдЬреНрдо - рд╡рд╛рджреЗ


рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЙрд▓рдмреИрдХ рдХреЗ рдмрдЬрд╛рдп рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдпрд╣рд╛рдВ, рдмреЗрд╣рддрд░ рдХреЛрдб рдкрдардиреАрдпрддрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рддрдВрддреНрд░ рд╣реИрдВред рдЕрд░реНрдерд╛рддреН, рдЖрдкрдХреЛ рдЙрд╕ рддреНрд░реБрдЯрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдкрд░реЗрд╢рд╛рди рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЧрд┐рд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ catch рдмреНрд▓реЙрдХ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЙрди рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рд╣реБрдП рд╡рд╛рджреЛрдВ рдореЗрдВ рд╣реБрдИ рд╣реИрдВ, рдпрд╛ рдкрд┐рдЫрд▓реЗ catch рдХреЗ рдмрд╛рдж рдХреЛрдб рдореЗрдВ рд╣реБрдИ рд╕рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рд╡рд╛рджреЗ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП catch рдмреНрд▓реЙрдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХреЗрдЧрд╛, рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

 (node:7741) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: something went wrong (node:7741) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code. */ 

рдирддреАрдЬрддрди, рдЖрдк рд╣рдореЗрд╢рд╛ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛, catch рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред

 Promise.resolve(1)   .then(res => {       console.log(res) // 1       throw new Error('something went wrong')       return Promise.resolve(2)   })   .then(res => {       console.log(res) //        })   .catch(err => {       console.error(err) //  ,     ,         return Promise.resolve(3)   })   .then(res => {       console.log(res) // 3   })   .catch(err => {       //      ,      -        console.error(err)   }) 

тЦНAsynchronous рддрдВрддреНрд░ рдФрд░ рдХреЛрд╢рд┐рд╢ ... рдкрдХрдбрд╝


рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ async/await рдирд┐рд░реНрдорд╛рдг рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рдХреНрд▓рд╛рд╕рд┐рдХ рддрд░реАрдХреЗ рдкрд░ рд▓реМрдЯреЗ - try...catch...finally ред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

 ;(async function() {   try {       await someFuncThatThrowsAnError()   } catch (err) {       console.error(err) //       }   console.log('Easy!') //   })() 

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╣реИрдВрдбрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЗрдВред рдирддреАрдЬрддрди, рдЕрдм, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдПрдХрд▓ catch рдЖрдк рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

2. рд╕рд░реНрд╡рд░ рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛


рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рд╣реИрдВ, рддреЛ рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЙрдирдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдФрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд╣рд▓реВ рд╣реИред рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВред рдпрд╣рд╛рдВ рд╣рдо Error рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдлреНрд░рдВрдЯ-рдПрдВрдб рдпрд╛ рд╕рд░реНрд╡рд░ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдмреИрдХрдПрдВрдб рдХреИрд╕реЗ рд╕рдВрд░рдЪрд┐рдд рд╣реИ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рднреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдЖрдк рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдорд╛рди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╕рд░реНрд╡рд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо Express.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЖрдЗрдП рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдПрдХ рдкреНрд░рднрд╛рд╡реА рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХрд┐рд╕ рд╕рдВрд░рдЪрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддреЛ рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдЬрд░реВрд░рдд рд╣реИ:

  1. рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХрд┐рд╕реА рднреА рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рддрдВрддреНрд░ рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди Something went wrong, please try again or contact us рдЬреИрд╕рд╛ рд╕рдВрджреЗрд╢ Something went wrong, please try again or contact us , рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ рдЬреЛ рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛, рдлрд┐рд░ рд╕реЗ рдпрд╛ рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рд▓рд┐рдХ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВред рдпрд╣ рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмреБрджреНрдзрд┐рдорд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ рдХрд┐ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ред рдРрд╕рд╛ рд╕рдВрджреЗрд╢ "рдЕрдВрддрд╣реАрди рдбрд╛рдЙрдирд▓реЛрдб" рдпрд╛ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред
  2. рд╡рд┐рд╢рд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ - рдПрдХ рддрдВрддреНрд░ рдЬреЛ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдиреБрдЪрд┐рдд рдкреНрд░рдгрд╛рд▓реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рджреЗрдиреЗ рдФрд░ рдЙрд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд▓рд╛рд╣ рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдбреЗрдЯрд╛ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЪрд┐рдВрддрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░рд┐рдХреЙрд░реНрдб рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╣ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред

ред рддреНрд░реБрдЯрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд░рдирд╛


рдпрд╣рд╛рдВ рд╣рдо рдорд╛рдирдХ Error рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬреЛрдЦрд┐рдо рднрд░рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреЗ рддрдВрддреНрд░ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИрдВред рд╣рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕реНрдЯреИрдХ рдХреЗ рдирд┐рд╢рд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЪрд╛рд╣рд┐рдПред рдорд╛рдирдХ Error рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдпрд╛рд╕ рдХреЗ рдмрд┐рдирд╛ рд╕реНрдЯреИрдХ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдорд┐рд▓рддреА рд╣реИред рд╣рдо рдЕрдкрдиреА рддреНрд░реБрдЯрд┐ рд╡рд╕реНрддреБ рдореЗрдВ рджреЛ рдЧреБрдг рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ code рдкреНрд░реЙрдкрд░реНрдЯреА рд╣реИ, рдЬрд┐рд╕реЗ рдлреЙрд░реНрдо err.code рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рджреВрд╕рд░рд╛ status рдкреНрд░реЙрдкрд░реНрдЯреА рд╣реИред рдпрд╣ HTTP рд╕реНрдерд┐рддрд┐ рдХреЛрдб рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рднрд╛рдЧ рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред

рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ CustomError рд╡рд░реНрдЧ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдХреЛрдб рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

 class CustomError extends Error {   constructor(code = 'GENERIC', status = 500, ...params) {       super(...params)       if (Error.captureStackTrace) {           Error.captureStackTrace(this, CustomError)       }       this.code = code       this.status = status   } } module.exports = CustomError 

тЦН рд░реВрдЯрд┐рдВрдЧ


рдЕрдм рдЬрдм рд╣рдорд╛рд░реА рддреНрд░реБрдЯрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдорд╛рд░реНрдЧ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреАрдХреГрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рд╕рднреА рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, Express.js рдврд╛рдВрдЪрд╛ рдРрд╕реА рдпреЛрдЬрдирд╛ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕рднреА рдорд╛рд░реНрдЧ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИрдВред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдорд╛рд░реНрдЧ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рд░реНрдЧ рддрд░реНрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдпрджрд┐ рдорд╛рд░реНрдЧ рдлрд╝рдВрдХреНрд╢рди (рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди) рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдорд╛рд░реНрдЧ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рднрд╛рдЧ рдореЗрдВ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдлреНрд░рдВрдЯ-рдПрдВрдб рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП JSON-API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

 {   error: 'SOME_ERROR_CODE',   description: 'Something bad happened. Please try again or contact support.' } 

рдпрджрд┐ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдЬреЛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдордЭ рд╕реЗ рдкрд░реЗ рд╣реИ - рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ - рдмрд╕ рдкрдврд╝рддреЗ рд░рд╣реЗрдВ, рдЬреЛ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдФрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдЖрдк рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд▓реЗрдВрдЧреЗред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдЧрд░ рд╣рдо рдХрдВрдкреНрдпреВрдЯрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ "рдЯреЙрдк-рдбрд╛рдЙрди" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░реЛрдВ рдкрд░ рдкрд╣рд▓реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдлрд┐рд░ рд╡рд┐рд╢реЗрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рдорд╛рд░реНрдЧ рд╣реИрдВрдбрд▓рд░ рдХреЛрдб рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

 const express = require('express') const router = express.Router() const CustomError = require('../CustomError') router.use(async (req, res) => {   try {       const route = require(`.${req.path}`)[req.method]       try {           const result = route(req) //    route           res.send(result) //   ,     route       } catch (err) {           /*                ,    route             */           if (err instanceof CustomError) {               /*                   -                                  */               return res.status(err.status).send({                   error: err.code,                   description: err.message,               })           } else {               console.error(err) //                  //   -                   return res.status(500).send({                   error: 'GENERIC',                   description: 'Something went wrong. Please try again or contact support.',               })           }       }   } catch (err) {       /*          ,    ,  ,            ,  ,          ,                       */       res.status(404).send({           error: 'NOT_FOUND',           description: 'The resource you tried to access does not exist.',       })   } }) module.exports = router 

рд╣рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдХреЛрдб рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕рдордЭрд╛рддреА рд╣реИрдВред рд╣рдо рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рджрд┐рдП рдЧрдП рдРрд╕реЗ рдХреЛрдб рдХреЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╕реЗ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рдЕрдм рдорд╛рд░реНрдЧ рдлрд╝рд╛рдЗрд▓ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред

 const CustomError = require('../CustomError') const GET = req => {   //       return { name: 'Rio de Janeiro' } } const POST = req => {   //       throw new Error('Some unexpected error, may also be thrown by a library or the runtime.') } const DELETE = req => {   //  ,      throw new CustomError('CITY_NOT_FOUND', 404, 'The city you are trying to delete could not be found.') } const PATCH = req => {   //      CustomError   try {       //   -        throw new Error('Some internal error')   } catch (err) {       console.error(err) //    ,           throw new CustomError(           'CITY_NOT_EDITABLE',           400,           'The city you are trying to edit is not editable.'       )   } } module.exports = {   GET,   POST,   DELETE,   PATCH, } 

рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, GET /city рдЕрдиреБрд░реЛрдз const GET = req =>... function рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛ const GET = req =>... , POST /city рдЕрдиреБрд░реЛрдз const POST = req =>... function рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛ const POST = req =>... рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдХреНрд╡реЗрд░реА рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдпреЛрдЬрдирд╛ рднреА рдХрд╛рдо рдХрд░рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлреЙрд░реНрдо GET /city?startsWith=R рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП GET /city?startsWith=R рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ, рддреЛ рдлреНрд░рдВрдЯреЗрдВрдб рдпрд╛ рддреЛ рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдпрд╛ рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рд▓рд┐рдХ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рд╣реЛрддреА рд╣реИ, рдпрд╛ CustomError рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрдиреНрди рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐ рдбреЗрдЯрд╛ рдирд┐рдореНрди рд░реВрдк рдореЗрдВ рдЖрд╡реЗрджрди рдХреЗ рдЧреНрд░рд╛рд╣рдХ рднрд╛рдЧ рдореЗрдВ рдЖрдПрдЧрд╛:

 {   error: 'GENERIC',   description: 'Something went wrong. Please try again or contact support.' } 

CustomError рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 throw new CustomError('MY_CODE', 400, 'Error description') 

рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд JSON рдХреЛрдб рдХреЛ рдлреНрд░рдВрдЯреЗрдВрдб рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 {   error: 'MY_CODE',   description: 'Error description' } 

рдЕрдм рдЬрдм рд╣рдордиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд░реНрд╡рд░ рднрд╛рдЧ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рдмреЗрдХрд╛рд░ рддреНрд░реБрдЯрд┐ рд▓реЙрдЧ рдЕрдм рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реБрдЖред

рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдпрд╣рд╛рдБ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рд╕рд╛рде рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдирд┐рд╣рд┐рдд рд╣реИред рдЖрдк рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЗрд╕реЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

3. рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ


рдЕрдм рд╣рдорд╛рд░реЗ рдлреНрд░рдВрдЯ-рдПрдВрдб рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рддреАрд╕рд░реЗ рднрд╛рдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рднрд╛рдЧ рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред рд╣рдо рдкрд╣рд▓реЗ рд╕рд░реНрд╡рд░ рддреНрд░реБрдЯрд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдХрд░реЗрдВрдЧреЗред рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд░рд┐рдПрдХреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

ред рдЖрд╡реЗрджрди рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реА рджреЗрдВ


рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдбреЗрдЯрд╛ рдХреА рддрд░рд╣, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдШрдЯрдХреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рдЦрдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЬрдм рдШрдЯрдХ рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рддреНрд░реБрдЯрд┐ рдбреЗрдЯрд╛ рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рд▓реА рдмрд╛рд░ рдкреГрд╖реНрда рджреЗрдЦрддрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЙрд╕реА рд╢реИрд▓реА рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдирддрд╛ рд╕реЗ, рдпрд╣рд╛рдВ рдЖрдк 3 рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

  1. рд╡реИрд╢реНрд╡рд┐рдХ рддреНрд░реБрдЯрд┐рдпрд╛рдВ - рдЗрд╕ рд╢реНрд░реЗрдгреА рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХреГрддрд┐ рдХреЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдЖрддреЗ рд╣реИрдВ, рдпрд╛ рддреНрд░реБрдЯрд┐рдпрд╛рдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реА рддрд░рд╣ рдХреА рдЕрдиреНрдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд▓реЙрдЧ рдЗрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
  2. рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд░реНрд╡рд░ рдкрдХреНрд╖ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐рдпрд╛рдВ - рдЗрд╕рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдЧрдИ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рддреЛ рдЗрд╕реА рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╕рд░реНрд╡рд░ рдиреЗ рдЙрд╕реЗ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдкрд╛рд╕рд╡рд░реНрдб рдЧрд▓рдд рдерд╛ред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рднрд╛рдЧ рдореЗрдВ рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдРрд╕реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╢ рд╕рд░реНрд╡рд░ рд╕реЗ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред
  3. рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рднрд╛рдЧ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐рдпрд╛рдВред рдЗрд╕ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕рдВрдмрдВрдзрд┐рдд рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рджрд░реНрдЬ рдПрдХ рдЕрд╡реИрдз рдИрдореЗрд▓ рдкрддреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рд╣реИред

рджреВрд╕рд░реЗ рдФрд░ рддреАрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИрдВ, рдЖрдк рдЙрд╕реА рд╕реНрддрд░ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рд░рд╛рдЬреНрдп рднрдВрдбрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдирдХрд╛ рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдЖрддреЗ рд╣реИрдВред рдиреАрдЪреЗ, рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред

рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рд░рд╛рдЬреНрдп рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЬреИрд╕реЗ рдХрд┐ MobX рдпрд╛ Reduxред

тЦН рд╡реИрд╢реНрд╡рд┐рдХ рддреНрд░реБрдЯрд┐рдпрд╛рдВ


рдЖрдорддреМрд░ рдкрд░, рдРрд╕реЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдПрдХ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдЙрдЪреНрдЪрддрдо-рд╕реНрддрд░реАрдп рдШрдЯрдХ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред рд╡реЗ рдПрдХ рд╕реНрдерд┐рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрддреНрд╡ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рд╕реНрдХреНрд░реАрди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рд▓рд╛рд▓ рдмреЙрдХреНрд╕, рдПрдХ рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ, рдпрд╛ рдХреБрдЫ рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред


рд╡реИрд╢реНрд╡рд┐рдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢

рдЕрдм Application.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред

 import React, { Component } from 'react' import GlobalError from './GlobalError' class Application extends Component {   constructor(props) {       super(props)       this.state = {           error: '',       }       this._resetError = this._resetError.bind(this)       this._setError = this._setError.bind(this)   }   render() {       return (           <div className="container">               <GlobalError error={this.state.error} resetError={this._resetError} />               <h1>Handling Errors</h1>           </div>       )   }   _resetError() {       this.setState({ error: '' })   }   _setError(newError) {       this.setState({ error: newError })   } } export default Application 

, , Application.js , . , .

GlobalError , x , . GlobalError ( GlobalError.js ).

 import React, { Component } from 'react' class GlobalError extends Component {   render() {       if (!this.props.error) return null       return (           <div               style={{                   position: 'fixed',                   top: 0,                   left: '50%',                   transform: 'translateX(-50%)',                   padding: 10,                   backgroundColor: '#ffcccc',                   boxShadow: '0 3px 25px -10px rgba(0,0,0,0.5)',                   display: 'flex',                   alignItems: 'center',               }}           >               {this.props.error}                              <i                   className="material-icons"                   style={{ cursor: 'pointer' }}                   onClick={this.props.resetError}               >                   close               </font></i>           </div>       )   } } export default GlobalError 

if (!this.props.error) return null . , . . , , , . , , x , - , .

, , _setError Application.js . , , , , ( error: 'GENERIC' ). ( GenericErrorReq.js ).

 import React, { Component } from 'react' import axios from 'axios' class GenericErrorReq extends Component {   constructor(props) {       super(props)       this._callBackend = this._callBackend.bind(this)   }   render() {       return (           <div>               <button onClick={this._callBackend}>Click me to call the backend</button>           </div>       )   }   _callBackend() {       axios           .post('/api/city')           .then(result => {               //  -     ,               })           .catch(err => {               if (err.response.data.error === 'GENERIC') {                   this.props.setError(err.response.data.description)               }           })   } } export default GenericErrorReq 

, . , , . . -, , -, UX-, , тАФ .

тЦН ,


, , , .




, . . . SpecificErrorReq.js .

 import React, { Component } from 'react' import axios from 'axios' import InlineError from './InlineError' class SpecificErrorRequest extends Component {   constructor(props) {       super(props)       this.state = {           error: '',       }       this._callBackend = this._callBackend.bind(this)   }   render() {       return (           <div>               <button onClick={this._callBackend}>Delete your city</button>               <InlineError error={this.state.error} />           </div>       )   }   _callBackend() {       this.setState({           error: '',       })       axios           .delete('/api/city')           .then(result => {               //  -     ,               })           .catch(err => {               if (err.response.data.error === 'GENERIC') {                   this.props.setError(err.response.data.description)               } else {                   this.setState({                       error: err.response.data.description,                   })               }           })   } } export default SpecificErrorRequest 

, , , x . , , . , , тАФ , , , . , , . , , , тАФ .

тЦН,


, , , . , , - . .


,

SpecificErrorFrontend.js , .

 import React, { Component } from 'react' import axios from 'axios' import InlineError from './InlineError' class SpecificErrorRequest extends Component {   constructor(props) {       super(props)       this.state = {           error: '',           city: '',       }       this._callBackend = this._callBackend.bind(this)       this._changeCity = this._changeCity.bind(this)   }   render() {       return (           <div>               <input                   type="text"                   value={this.state.city}                   style={{ marginRight: 15 }}                   onChange={this._changeCity}               />               <button onClick={this._callBackend}>Delete your city</button>               <InlineError error={this.state.error} />           </div>       )   }   _changeCity(e) {       this.setState({           error: '',           city: e.target.value,       })   }   _validate() {       if (!this.state.city.length) throw new Error('Please provide a city name.')   }   _callBackend() {       this.setState({           error: '',       })       try {           this._validate()       } catch (err) {           return this.setState({ error: err.message })       }       axios           .delete('/api/city')           .then(result => {               //  -     ,               })           .catch(err => {               if (err.response.data.error === 'GENERIC') {                   this.props.setError(err.response.data.description)               } else {                   this.setState({                       error: err.response.data.description,                   })               }           })   } } export default SpecificErrorRequest 

тЦН


, , ( GENERIC ), , . , , , , , , , , . .

рдкрд░рд┐рдгрд╛рдо


рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдм рдЖрдкрдХреЛ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рд╕рдордЭ рд╣реЛрдЧреАред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреБрдЫ рдХрд╛ console.error(err)рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рднреВрд▓ рдЧрдИ рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреБрдЫ рдЙрдкрдпреБрдХреНрдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреИрд╕реЗ рд▓реЙрдЬрд╡реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдЧрд┐рдВрдЧ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ ред

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ?

Source: https://habr.com/ru/post/hi431078/


All Articles