рдкрд░рд┐рдЪрдп
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЕрдкрдиреА рднрд╛рд╡рдирд╛рдУрдВ рдФрд░ рд╕рд╛рдЭрд╛ рдХреМрд╢рд▓ рдХреЛ Node.js рдкрд░ рдЯрд╛рдЗрдкрд╕реНрдЯрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣рд▓реЗ REST API рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдЦрд░реЛрдВрдЪ рд╕реЗред рдпрд╣ рдХрд╣рд╛рдиреА рдХрд╛рдлреА рднрдпрд╛рд╡рд╣ рд╣реИ:
тАЬрдореИрдВрдиреЗ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рд╕реЗ рд╕реНрдирд╛рддрдХ рдХрд┐рдпрд╛, рдбрд┐рдкреНрд▓реЛрдорд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред рдХрд╛рдо рдкрд░ рдХрд╣рд╛рдБ рдЬрд╛рдирд╛ рд╣реИ? тАЭ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдореБрдЭреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рд╣реЛрдЧрд╛, рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмрдЦреНрд╢рд╛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛, рдЬрдмрдХрд┐ рдореБрдЭреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реЛрдЪрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рдереАред рдбреЗрд╡рд▓рдкрд░ (рдПрдХ рд╣реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдПрдХ рд╕реНрдирд╛рддрдХ) рдПрдХ рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рдХреЗ рд▓рд┐рдП рдмреБрд▓рд╛рдпрд╛ред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдерд╛ рд╣реИ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рдХрдИ рдХрд╣рд╛рдирд┐рдпрд╛рдВ рд╣реИрдВред рджреЛ рдмрд╛рд░ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд┐рдирд╛, рдореИрдВрдиреЗ рдЕрдкрдирд╛ рд╣рд╛рде рдЖрдЬрдорд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдЪрд▓рд╛ рдЧрдпрд╛ ...

рдкрд╣рд▓рд╛ рджрд┐рдиред рдкреЗрд╢ рд╣реИ Node.js
рдореИрдВ рдмреИрдХ-рдПрдВрдб рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛ред рдпрд╣ IT рдХрдВрдкрдиреА
Node.js рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рдЕрдкрд░рд┐рдЪрд┐рдд рдерд╛ред рдореИрдВ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ рдмрдврд╝рд╛, рдкрд╛рдардХ рдХреЛ рдпрд╣ рдмрддрд╛рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрднреА рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреБрдЫ рднреА рд╡рд┐рдХрд╕рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ (рдХреЙрдкреА рдХреЛрдб рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛)ред рдореИрдВрдиреЗ рдХрд╛рд░реНрдп рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдФрд░ рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рд╕рдордЭрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЬрд╛рд╡рд╛, рдкрд╛рдпрдерди рдФрд░ рдХреНрд▓реВрдЬреБрд░ рдореЗрдВ рд╕реАрдЖрд░рдпреВрдбреА рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реЗ рджрд┐рди рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ Node.js рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдерд╛, рдЗрд╕
рдкреЗрдВрдЪрдХрд╕ рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорджрдж рдХреАред
рдПрдХреНрд╕рдкреНрд░реЗрд╕ рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реБрдП,
рдПрдирдкреАрдПрдо рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░, рд╕рд╛рде рд╣реА рд╕рд╛рде рдкреИрдХреЗрдЬ.рдЬрд╕рди рдФрд░ tsconfig.json рдЬреИрд╕реА рдлрд╛рдЗрд▓реЗрдВ, рдореЗрд░рд╛ рд╕рд┐рд░ рдмрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдорд╛рддреНрд░рд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЪрд▓рд╛ рдЧрдпрд╛ред рдПрдХ рдФрд░ рд╕рдмрдХ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рднреА рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдХрд╛рд░реНрдп рдХреЗ рдХрд░реАрдм рд╣реИред рджрд┐рди рдХреЗ рдЕрдВрдд рддрдХ, рдореИрдВ рдЕрднреА рднреА рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рдФрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛! рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЦреБрд╢реА рд╣реБрдИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рдЧрд▓рддрдлрд╣рдореА рдореЗрдВ рдерд╛ред рдЬреЗрдПрд╕ рдХреА рд╡рд┐рд╢рд╛рд▓ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдореИрдВ рдЬреЛ рдорд╣рд╕реВрд╕ рдХрд░ рд░рд╣рд╛ рдерд╛ рд╡рд╣ рдореБрдЭреЗ рдПрдХ рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рднреА рдирд╣реАрдВ рдЫреЛрдбрд╝рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдПрдХ рд░рд┐рдмреВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред
рджреВрд╕рд░рд╛ рджрд┐рдиред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкрд░рд┐рдЪрдп
рдЙрд╕реА рджрд┐рди рдЙрд╕реА рд░рд┐рдмреВрдЯ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╣рдЪрд╛рди рд▓рд┐рдпрд╛, рд╣рдо рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдХрдо рдХрд░ рджреЗрдВрдЧреЗред рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрд▓рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рдерд╛, Node.js рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рд╖рд╛ рдореЗрдВ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдкреНрд░рд╡рд╛рд╣рд┐рдд рд╣реБрдЖ, рдЕрд░реНрдерд╛рддреН рдЗрд╕рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдФрд░ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ред рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд
рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рджреЗрдЦрд╛, рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕рдЪрдореБрдЪ 2 рджрд┐рди рдкрд╣рд▓реЗ рдереА, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ
рдирд╣реАрдВ ред рдпрд╣ рдореЗрд░реА рд╕рдмрд╕реЗ рдмрдбрд╝реА рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рдереА, рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдкрд╣рд▓реЗ рджрд┐рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреЛ рд╕рдордЭрдиреЗ рдФрд░ рд╕реАрдЦрдиреЗ рд╕реЗ рд░реЛрдХрд╛ред
рдЙрдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реЗ рдЬрд╛рд╡рд╛, C ++, C # рдЬреИрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдерд╛ред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ред рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ рдиреЗ рд╕рдЪрдореБрдЪ рдореБрдЭреЗ рдЗрд╕ рдЬрдЯрд┐рд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдЬреАрд╡рди рдореЗрдВ рд╕рд╛рдВрд╕ рджреА, рдЬреИрд╕рд╛ рдХрд┐ рдЙрд╕ рд╕рдордп рдореБрдЭреЗ рдкреНрд░рддреАрдд рд╣реБрдЖ рдерд╛ред рдЙрд╕ рджрд┐рди рдХреЗ рдХрд░реАрдм рдЬрдм рдореИрдВрдиреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реЗрдЯ рдХрд░ рд▓рд┐рдпрд╛, рд╕рд░реНрд╡рд░ (рдкрд╣рд▓реЗ рд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░) рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛, рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛, рдЬрд┐рд╕рдХреА рдореИрдВ рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХрд░реВрдВрдЧрд╛ред рдирд┐рдЪрд▓рд╛ рд░реЗрдЦрд╛: рдПрдкреАрдЖрдИ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ред рд╣рдо рд╕реАрдзреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдкрд╛рд╕ ...
рдПрдкреАрдЖрдИ рд╡рд┐рдХрд╛рд╕
рдХрд╛рд░реНрдп рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдФрд░ REST рдПрдкреАрдЖрдИ рдХреНрдпрд╛ рд╣реИ, рдХреЗ рдЕрдиреНрдп рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгреЛрдВ рдХреА рдПрдХ рд╡реНрдпрд╛рдЦреНрдпрд╛, рд╣рдо рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдордВрдЪ рдХреЗ рдкрд╛рд╕ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рде рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЗрдЦ рд╣реИрдВред
рдХрд╛рд░реНрдп рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдерд╛:REST API рдХреЗ рд╕рд╛рде рдПрдХ рд╕реЗрд╡рд╛ рдмрдирд╛рдПрдВред рд╡рд╛рд╣рдХ рдЯреЛрдХрди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг (/ рдЬрд╛рдирдХрд╛рд░реА, / рд╡рд┐рд▓рдВрдмрддрд╛, / рд▓реЙрдЧрдЖрдЙрдЯ)ред рдХрд┐рд╕реА рднреА рдбреЛрдореЗрди рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ CORSред DB - MongoDBред рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдкрд░ рдПрдХ рдЯреЛрдХрди рдмрдирд╛рдПрдВред
рдПрдкреАрдЖрдИ рд╡рд┐рд╡рд░рдг:- / рд╕рд╛рдЗрдирдЗрди [POST] - рдЖрдИрдбреА рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЯреЛрдХрди рдмрд┐рдпрд░рд░ рдХреЛ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ // json рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ
- / рд╕рд╛рдЗрдирдЕрдк [POST] - рдПрдХ рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдкрдВрдЬреАрдХрд░рдг: // json рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ
- / info [GET] - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рдФрд░ рдЖрдИрдбреА рдкреНрд░рдХрд╛рд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдореЗрдВ рд╡рд╛рд╣рдХ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдЯреЛрдХрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
- / рд╡рд┐рд▓рдВрдмрддрд╛ [GET] - рдПрдХ рд╡рд┐рд▓рдВрдм (рдкрд┐рдВрдЧ) рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдореЗрдВ рд╡рд╛рд╣рдХ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рдЯреЛрдХрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
- / рд▓реЙрдЧрдЖрдЙрдЯ [GET] - рдкреИрд░рд╛рдореАрдЯрд░ рд╕рднреА рдХреЗ рд╕рд╛рде: рд╕рддреНрдп - рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рд╣рдХ рдЯреЛрдХрди рдпрд╛ рдЧрд▓рдд рд╣рдЯрд╛рддрд╛ рд╣реИ - рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рд╡рд╛рд╣рдХ рдЯреЛрдХрди рд╣рдЯрд╛рддрд╛ рд╣реИ
рдореИрдВ рддреБрд░рдВрдд рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ, рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рд░реНрдп рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдп рдХреЛ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ 3 рджрд┐рди рдкрд╣рд▓реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрддрд╛ рдерд╛! рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рдХрд╛рдЧрдЬ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рд╣реИ рдФрд░ рдкрд╛рдпрдерди рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред рд╡рд┐рдХрд╛рд╕ рд╕реНрдЯреИрдХ рдиреЗ рдореБрд╕реАрдмрдд рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рдзрди
рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдХрд┐ рджреВрд╕рд░реЗ рджрд┐рди рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ (рд░реВрдкрд░реЗрдЦрд╛рдУрдВ) рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рд╣реИ, рд╣рдо рдЗрд╕ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ
рд░реВрдЯрд┐рдВрдЧ-рдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдХреЛ рдЪреБрдирд╛, рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ (рдЬрд╛рд╡рд╛) рд╕реЗ рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕реА рд╕рдорд╛рдирддрд╛рдПрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХреАрдВред ORM рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ
рдЯрд╛рдЗрдкрдореЙрд░реНрдо рдХреЛ рдЪреБрдирд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдореЛрдб рдореЗрдВ MongoDB рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдореИрдВрдиреЗ рдЯреЛрдХрди рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
uuid рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛,
dotenv рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд░ рд▓реЛрдб рдХрд┐рдП
рдЬрд╛рддреЗ рд╣реИрдВ ред
рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк
рдЖрдорддреМрд░ рдкрд░, рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рдХреЗ рд╢реБрджреНрдз рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд░реВрдЯрд┐рдВрдЧ рдХрдВрдЯреНрд░реЛрд▓рд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдПрдХ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рд╕рд░реНрд╡рд░ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдврд╛рдВрдЪреЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред
- рдорд╛рд░реНрдЧрдкреНрд░рд┐рдлрд╝рд┐рдХреНрд╕ рд╕рд░реНрд╡рд░ рдкрддреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЗ рдпреВрдЖрд░рдПрд▓ рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рдЙрдкрд╕рд░реНрдЧ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ : 3000 / рдЙрдкрд╕рд░реНрдЧ
- рдЪреВрдХ - рджрд┐рд▓рдЪрд╕реНрдк рдХреБрдЫ рднреА рдирд╣реАрдВ, рдмрд╕ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ
- authorizationChecker - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реВрдкрд░реЗрдЦрд╛ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдЕрд╡рд╕рд░, рдлрд┐рд░ рд╣рдо рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ
- рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореБрдЦреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ
DB рдХрдиреЗрдХреНрд╢рди
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рд╡реЗрдм рд╕рд░реНрд╡рд░ рд▓реЙрдиреНрдЪ рдХрд░ рджрд┐рдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо MongoDB рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ, рдкрд╣рд▓реЗ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд╕рд░реНрд╡рд░ рдкрд░ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдерд╛ред рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИрдВред рд╣рдо рд╕реАрдзреЗ рдЯрд╛рдЗрдкрд░рдо рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ:
рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдЖрдкрдХреЛ рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рдкреНрд░рдХрд╛рд░ - рдбреАрдмреА
- рд╣реЛрд╕реНрдЯ - рдЖрдИрдкреА рдкрддрд╛ рдЬрд╣рд╛рдВ рдЖрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рд╣реИ
- рдбреЗрдЯрд╛рдмреЗрд╕ - рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдирд╛рдо рдЬреЛ рдкрд╣рд▓реЗ рдореЛрдВрдЧреЛрдбрдм рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛
- рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░реЗрдВ - рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди (рдиреЛрдЯ: рдЙрд╕ рд╕рдордп рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЛ рдорд╛рд╕реНрдЯрд░ рдХрд░рдирд╛ рдХрдард┐рди рдерд╛)
- рд╕рдВрд╕реНрдерд╛рдПрдБ - рдпрд╣рд╛рдБ рд╣рдо рдЙрди рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдЕрдм рд╣рдо рд╕рд░реНрд╡рд░ рд╕реНрдЯрд╛рд░реНрдЯ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдПрдХ рдбреАрдмреА рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЖрдпрд╛рдд Node.js. рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдХреНрд▓рд╛рд╕рд┐рдХ рд╕реЗ рдЕрд▓рдЧ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓рддреА рд╣реИ, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ main.ts:
import 'reflect-metadata'; import * as dotenv from 'dotenv'; import { createExpressServer } from 'routing-controllers'; import { createConnection } from 'typeorm'; import { authorizationChecker } from './auth/authorizationChecker'; import { UserController } from './controllers/UserController'; import { User } from './models/User'; dotenv.config();
рддрдереНрдп
рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдХрд╛рд░реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдФрд░ рдЕрдзрд┐рдХреГрдд рдХрд░рдирд╛ рд╣реИ, рдХреНрд░рдорд╢рдГ, рд╣рдореЗрдВ рдПрдХ рдЗрдХрд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдПрдХ рдЯреЛрдХрди рд╣реИ рдФрд░ рдПрдХ рдирд╣реАрдВ рд╣реИ! рдЗрд╕рд▓рд┐рдП, рдПрдХ рдЯреЛрдХрди рдЗрдХрд╛рдИ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ import { ObjectID } from 'bson'; import { IsEmail, MinLength } from 'class-validator'; import { Column, Entity, ObjectIdColumn } from 'typeorm'; import { Token } from './Token';
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ, рд╣рдо рдПрдХ рдлрд╝реАрд▓реНрдб рдмрдирд╛рддреЗ рд╣реИрдВ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЯреЛрдХрди рдХреА рдПрдХ рд╕рд░рдгреАред рд╣рдо
calss-validator рдХреЛ рднреА
рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдИрдореЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░реЗред
рдЯреЛрдХрди import { Column, Entity } from 'typeorm';
рдЖрдзрд╛рд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ
рд╣реИрдВрдЪреЗрдХрд░ (рд╕рд░реНрд╡рд░ рдмрдирд╛рддреЗ рд╕рдордп рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ, рдКрдкрд░ рджреЗрдЦреЗрдВ), рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ:
import { Action, UnauthorizedError } from 'routing-controllers'; import { getMongoRepository } from 'typeorm'; import { User } from '../models/User'; export async function authorizationChecker(action: Action): Promise<boolean> { let token: string; if (action.request.headers.authorization) {
рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдмрд╛рдж, рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЕрдкрдирд╛ рдЯреЛрдХрди рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╣реЗрдбрд░ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рдмрд┐рдпрд░рд░ 046a5f60-c55e-11e9-af71-c755xde439e ред рдЕрдм рд╣рдо рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЯреЛрдХрди рдореМрдЬреВрдж рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЬрд╛рдирдХрд╛рд░реА рд▓реМрдЯрд╛рддрд╛ рд╣реИ: рд╕рддреНрдп - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдзрд┐рдХреГрдд рд╣реИ, рдЧрд▓рдд рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдзрд┐рдХреГрдд рдирд╣реАрдВ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рд╣рдо рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: @Authorized ()ред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЬрд╛рдБрдЪрдХрд░реНрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд▓реМрдЯрд╛рдПрдЧрд╛ред
рддрд░реНрдХ
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдирд┐рдпрдВрддреНрд░рдХ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЧрдИ рдХрдХреНрд╖рд╛ рдХреЗ рдиреАрдЪреЗ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╣рдо рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ JSON рдФрд░ рдХреНрд╡реЗрд░реА рд╣реЛрдЧрд╛ред рд╣рдо рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЕрдВрдд рдореЗрдВ рд╣рдо рдЕрдВрддрд┐рдо рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕реЗ UserService.ts рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЙрд╕ рд╕рдордп рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬреНрдЮрд╛рди рдирд╣реАрдВ рдерд╛ред рдпрджрд┐ рдЖрдк рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рд╢рдмреНрдж рд╕реЗ рдирд╣реАрдВ рдорд┐рд▓реЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдлрд┐рд▓рд╣рд╛рд▓ рдореИрдВ рдбреАрдЖрдИ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЕрд░реНрдерд╛рддреН, рдореИрдВ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЕрд░реНрдерд╛рддреН рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЬреЗрдХреНрд╢рдиред рдпрд╣рд╛рдБ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛
рд▓реЗрдЦ рд╣реИред рд╣рдо рдХрд╛рд░реНрдп рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВред
- / рд╕рд╛рдЗрдирдЗрди [POST] - рдкрдВрдЬреАрдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдгред рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рд╣реИред рд╣рдореЗрдВ рдмрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдПрдХ рдирдпрд╛ рдЯреЛрдХрди рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, MongoRepository рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
async userSignin(user: User): Promise<string> {
- / рд╕рд╛рдЗрдирдЕрдк [POST] - рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВред рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдорд╛рди рд╡рд┐рдзрд┐, рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рд╣рдо рднреА рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдИрдореЗрд▓ рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рди рд╣реЛрдВред рдЕрдЧрд▓рд╛, рд╣рдо рдЯреЛрдХрди рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
async userSignup(newUser: User): Promise<string> {
- / info [GET] - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рдФрд░ рдЖрдИрдбреА рдкреНрд░рдХрд╛рд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдореЗрдВ рд╡рд╛рд╣рдХ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдЯреЛрдХрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдЪрд┐рддреНрд░ рднреА рдкрд╛рд░рджрд░реНрд╢реА рд╣реИ: рдкрд╣рд▓реЗ рд╣рдо рдЕрдиреБрд░реЛрдз рд╣реЗрдбрд░ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рд╡рд░реНрддрдорд╛рди рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╣ рдХрд┐рд╕рд╕реЗ рдЭреВрда рдмреЛрд▓рддрд╛ рд╣реИ, рдФрд░ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
async getUserInfo(req: express.Request): Promise<User> {
- / рд╡рд┐рд▓рдВрдмрддрд╛ [GET] - рдПрдХ рд╡рд┐рд▓рдВрдм (рдкрд┐рдВрдЧ) рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдореЗрдВ рд╡рд╛рд╣рдХ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдЯреЛрдХрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд▓реЗрдЦ рдХрд╛ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрдмрд╛рдз рдЕрдиреБрдЪреНрдЫреЗрджред рдпрд╣рд╛рдБ рдореИрдВрдиреЗ tcp-ping рджреЗрд░реА рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рддреИрдпрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
getLatency(): Promise<IPingResult> { function update(progress: number, total: number): void { console.log(progress, '/', total); } const latency = ping({ address: process.env.PING_ADRESS, attempts: Number(process.env.PING_ATTEMPTS), port: Number(process.env.PING_PORT), timeout: Number(process.env.PING_TIMEOUT) }, update).then(result => { console.log('ping result:', result); return result; }); return latency; }
- / рд▓реЙрдЧрдЖрдЙрдЯ [рдЬреАрдИрдЯреА] - рдкреИрд░рд╛рдореАрдЯрд░ рд╕рднреА рдХреЗ рд╕рд╛рде: рд╕рдЪ - рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рд╣рдХ рдЯреЛрдХрди рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдпрд╛ рдЧрд▓рдд - рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рдмрд┐рдпрд░рд░ рдЯреЛрдХрди рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред рд╣рдореЗрдВ рдмрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦреЛрдЬрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдФрд░ рдЯреЛрдХрди рдирд┐рдХрд╛рд▓реЗрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
async userLogout(all: boolean, req: express.Request): Promise<void> {
рдирд┐рдпрдВрддреНрд░рдХ
рдХрдИ рдХреЛ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдорд╡реАрд╕реА рдкреИрдЯрд░реНрди рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рджреЛ рд╢рдмреНрдж рдХрд╣реВрдВрдЧрд╛ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдирд┐рдпрдВрддреНрд░рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмреАрдЪ рдХреА рдХрдбрд╝реА рд╣реИред рдКрдкрд░, рддрд░реНрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдпреВрдЖрд░рдЖрдИ рдФрд░ рдПрдХ рдЖрдИрдкреА рд╕рд░реНрд╡рд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
(рдЙрджрд╛рд╣рд░рдг: рд╕реНрдерд╛рдиреАрдпрд╣реЛрд╕реНрдЯ: 3000 / рд╕рд╛рдЗрдирдЗрди) ред рдореИрдВрдиреЗ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ:
Get ,
POST , @Authorized рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ @Jsonnontrollerред рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреА рдПрдХ рдФрд░ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо JSON рдХреЛ рднреЗрдЬрдирд╛ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо
рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
import * as express from 'express'; import { Authorized, Body, Get, Header, JsonController, NotFoundError, Post, QueryParam, Req, UnauthorizedError } from 'routing-controllers'; import { IPingResult } from '@network-utils/tcp-ping'; import { User } from '../models/User'; import { UserService } from '../services/UserService';
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЕрдм рд╕рд╣реА рдХреЛрдб рдпрд╛ рдЙрд╕ рдЬреИрд╕реЗ рдХреБрдЫ рдХреЗ рддрдХрдиреАрдХреА рдШрдЯрдХ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░
рдкрд╛рдВрдЪ рджрд┐рдиреЛрдВ рдореЗрдВ рдкреВрд░реНрдг рд╢реВрдиреНрдп рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рддрд░реНрдХ рдпреБрдХреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдмрд╕ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ, рдХреЛрдИ рднреА рдЙрдкрдХрд░рдг рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рдерд╛, рдЦреБрдж рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ рдпрд╛ рдмрд╕ рдЗрд╕реЗ рдореЗрд░реА рдЬрдЧрд╣ рдкрд░ рд░рдЦреЗрдВред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдХрд╣рддрд╛ рд╣реИ: "рдореИрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реВрдВ, рдЖрдк рдРрд╕рд╛ рдХрднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред" рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рдХреА рдЖрддреНрдорд╛ рдХрд╛ рд░реЛрдирд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ Node.js рдХреА рджреБрдирд┐рдпрд╛ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреБрд╢ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЖрдкрдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реИред рдФрд░ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рднреА рдЕрд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рдмрд╕ рд▓реЗрдиреЗ рдФрд░ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ!
рдмреЗрд╢рдХ, рдЗрд╕ рдмрд╛рдд рд╕реЗ рдЗрдирдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдЦрдХ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдерд╛ рдФрд░ рдкрд╣рд▓реА рдмрд╛рд░ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрда рдЧрдпрд╛ рдерд╛ред рдирд╣реАрдВ, OOP рдХрд╛ рдЬреНрдЮрд╛рди, REST API, ORM рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░реНрдпрд╛рдкреНрдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдореМрдЬреВрдж рдереЗред рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рдзрди рдмрд┐рд▓реНрдХреБрд▓ рдХреЛрдИ рднреВрдорд┐рдХрд╛ рдирд╣реАрдВ рдирд┐рднрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╢реИрд▓реА рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВ: "рдореИрдВ рдЗрд╕ рдиреМрдХрд░реА рдореЗрдВ рдирд╣реАрдВ рдЧрдпрд╛, рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдирд╣реАрдВ рд╕реАрдЦрд╛", тАЛтАЛрдореЗрд░реЗ рд▓рд┐рдП рдЕрдм рдпрд╣ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рдХрдордЬреЛрд░реА рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдЕрдкрд░рд┐рдЪрд┐рдд рдмрд╛рд╣рд░реА рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ред рд▓реЗрдХрд┐рди рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ, рдбрд░ рдореЗрд░реЗ рд╕рд╛рде рдореМрдЬреВрдж рдерд╛ред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рджреЗрдирд╛ред рдореИрдВ рдЙрди рдЫрд╛рддреНрд░реЛрдВ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рд▓рд╛рд╣ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрднреА рддрдХ рдЖрдИрдЯреА рдореЗрдВ рдЕрдкрдирд╛ рдХреИрд░рд┐рдпрд░ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рдзрдиреЛрдВ рдФрд░ рдЕрдЬреНрдЮрд╛рдд рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рд╕реЗ рдбрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рд╡рд░рд┐рд╖реНрда рдХреЙрдорд░реЗрдб рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдВрдЧреЗ (рдпрджрд┐ рдЖрдк рдореЗрд░реЗ рд╕рд╛рде рднреА рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ), рддреЛ рд╡реЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдПрдВрдЧреЗ рдФрд░ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдерд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдЖрдкрдХреА рдЗрдЪреНрдЫрд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд╣рд▓реВ рд╣реИ!
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд▓рд┐рдВрдХ