рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ Node.J. рдкрд░ рдПрдХ рдкрд╛рдпрд▓рдЯ WEB рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдкрд╣рд▓рд╛ рднрд╛рдЧ рдПрдХ рд╕рдореАрдХреНрд╖рд╛ рдереА, рдЗрд╕рдореЗрдВ рдореИрдВрдиреЗ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд╕рд╛рде рд╣реА рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреА, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг рдкрд░ рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ред
"рд╣реИрдмрд░рдлрд╝реЗрдХреНрдЯ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж
рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рдкрддрди рдХреА рдЖрд╡рдзрд┐рдХ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрд╛рдж, рд▓рд┐рдВрдХ рдЬреЛ рдореБрдЦреНрдп рд╣рдм рдкрд░ рдЖрддреЗ рд╣реИрдВ, рдореБрдЭреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ рдЖрдВрдХрдбрд╝реЗ рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рдереАред рдкрд┐рдЫрд▓реЗ рджреЛрдиреЛрдВ рд▓реЗрдЦреЛрдВ рдиреЗ рдореБрдЦреНрдп рдкреГрд╖реНрда рдХрд╛ рджреМрд░рд╛ рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐
рдкрд╣рд▓рд╛ рд▓реЗрдЦ рдмрдВрдж рдмреНрд▓реЙрдЧ "рдореИрдВ рдкреАрдЖрд░ рд╣реВрдБ" рдореЗрдВ рдерд╛ рдФрд░ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рдерд╛, рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдмреНрд▓реЙрдЧ "рдиреЛрдб" рдЬреЗрдПрд╕ рдореЗрдВ рджреВрд╕рд░рд╛ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдПрдХ рд▓рдВрдмреА рдЪрд░реНрдЪрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ - рджреЛрдиреЛрдВ рд▓реЗрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрдЯ рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓рдЧрднрдЧ рдПрдХ рд╣реА рдереАред рдЙрддрдирд╛ рд╣реА рдЫреЛрдЯрд╛ред
рдпреЗ рд╕рдВрдЦреНрдпрд╛ рдХрд┐рд╕реА рднреА рдЧрдВрднреАрд░ рднрд╛рд░ рдХреА рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЫреЛрдЯреА рд╣реИред рдпрд╛рддреНрд░рд╛рдУрдВ рдХреЗ рдЪрд░рдо рдкрд░, htop рдиреЗ рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рджрд┐рдЦрд╛рдпрд╛:
рд▓реЛрдб рдФрд╕рдд рдХрднреА-рдХрднреА 1 рддрдХ рдкрд╣реБрдВрдЪ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ 0.3-0.5 рдкрд░ рдЪрд▓рд╛ рдЧрдпрд╛ред рдкреЗрдЬ рдЬрд▓реНрджреА рджрд┐рдП рдЧрдПред рдФрд╕рдд рдкреГрд╖реНрда рдкреАрдврд╝реА рдХрд╛ рд╕рдордп, рдЬрд┐рд╕рдХреЗ рдЧрдарди рдХрд╛ рдбреЗрдЯрд╛ рдореЗрдордХреЗрдб рдореЗрдВ рд╣реИ - 15-20 рдореАред рдпрджрд┐ рдореЗрдореЗрдХреИрдЪреНрдб рдореЗрдВ рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдкреАрдврд╝реА рдХрд╛ рд╕рдордп 40-100 рд╕реЗрдореА рддрдХ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрддреНрдпрдВрдд рджреБрд░реНрд▓рдн рд╣реИред рдХреБрдЫ рдЖрдЧрдВрддреБрдХреЛрдВ рдиреЗ рдШреЗрд░рд╛рдмрдВрджреА рдФрд░ рдПрдм рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд▓реЛрдбрдЖрдИрдПрдореНрдкреИрдХреНрдЯ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдЗрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред рдЙрд╕ рд╕рдордп, рдореБрдЭреЗ рдпрдХреАрди рдерд╛ рдХрд┐ рд╕рднреА рдкреЗрдЬ Nginx рджреНрд╡рд╛рд░рд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХреИрд╢ рдХрд┐рдП рдЧрдП рдереЗ, рдФрд░ рдпреЗ рдЕрдиреБрд░реЛрдз Node.JS рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗ рдереЗред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рдерд╛ред рдмрд╛рдж рдореЗрдВ, рдореИрдВрдиреЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдЧрд▓рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЦреЛрдЬ рдХреА, рдЬрд┐рд╕рдиреЗ рдкреГрд╖реНрда рдХреИрд╢рд┐рдВрдЧ рдХреЛ рд░реЛрдХрд╛ (рдореИрдВ рдмрд╛рдж рдореЗрдВ рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХрд░реВрдВрдЧрд╛)ред рд╡рд╕реНрддреБрддрдГ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ Node.JS рдиреЗ рд╕рдВрднрд╛рд▓рд╛ рдФрд░ рд╕рд╛рдЗрдЯ рдиреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд▓реЗрдЦ рдХреЗ рд╡рд┐рд╖рдп рдФрд░ рдЙрд╕ рд╕рд╛рдЗрдЯ рдХреЗ рд╡рд┐рд╖рдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ "рд╣реИрдмреНрд░рд╛рдлрд╝реЗрдХреНрдЯ" рдХрд┐рддрдирд╛ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рд▓рд┐рдВрдХ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╕рд╛рдЗрдЯ рдЙрд╕реА (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ x2) рд▓реЛрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЧрд┐рд░рддреА рд╣реИ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреА рдкрд╕рдВрдж рд╕реЗ рджреВрд░ рд╣реИред
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдФрд░ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВрдиреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдХрд┐ рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛рдлреА рд╕реНрдерд┐рд░ рд╣реИ рдФрд░ рдЬрдм рдЖрдЧрдВрддреБрдХреЛрдВ рдХреА рддреАрд╡реНрд░ рдЖрдордж рд╣реЛрдЧреА рддреЛ рдпрд╣ рдирд╣реАрдВ рдЧрд┐рд░реЗрдЧреАред
рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░
рд▓реЛрд╣рд╛ рдФрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░
рд╕рд╛рдЗрдЯ рдорд╛рдореВрд▓реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде VPS рдкрд░ рд░рд╣рддреА рд╣реИ:
- 1200 рд╕реАрдкреАрдПрдЪ рдХреА рдЧрд╛рд░рдВрдЯреАрдХреГрдд рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде 1 рд╕реАрдкреАрдпреВ;
- 1024Mb RAM;
- 25Gb HDD (рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдВрдХреЗрддрдХ рдПрдХ рд╡рд┐рд╢реЗрд╖ рднреВрдорд┐рдХрд╛ рдирд╣реАрдВ рдирд┐рднрд╛рддрд╛ рд╣реИ)ред
рд╕рд░реНрд╡рд░ Ubuntu рд╕рд░реНрд╡рд░ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рдерд╛, рдореЗрд░реЗ рд▓рд┐рдП рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрд╕реЗ рдЪреБрдирд╛ред
рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдиреНрдпреВрдирддрдо рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╣реИ:
- Node.JS - рд╕рд░реНрд╡рд░ рдкрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд░рдирдЯрд╛рдЗрдо;
- MongoDB - NoSQL DBMS;
- рдореЗрдордХреЗрдЪреНрдб - рдХреИрд╢рд┐рдВрдЧ рдбреЗрдореЙрди;
- Nginx - рдлреНрд░рдВрдЯреЗрдВрдб рд╕рд░реНрд╡рд░ред
рдореИрдВ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдЕрджреНрдпрддрд┐рдд рд░рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред
рд╡рд┐рдиреНрдпрд╛рд╕
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, Node.JS рдПрдХ рдПрдХрд▓ рдзрд╛рдЧреЗ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдорд▓реНрдЯреА-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдПред рд▓рдЧрднрдЧ рддреБрд░рдВрдд, рдореЙрдбреНрдпреВрд▓ рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ (рд╡реЗрдм тАЛтАЛрд╡рд░реНрдХрд░реНрд╕ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди) рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рдЦрд╛рдИ рджрд┐рдПред
рдорд╛рдирдХ рдиреЛрдб.рдЬреЗрдПрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рдерд╛ред рд╕рдВрд╕реНрдХрд░рдг 0.6.0 рдХреА рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд╕рд╛рде, Node.JS рдиреЗ рдПрдХ рдирдпрд╛ рдореЙрдбреНрдпреВрд▓ -
рдХреНрд▓рд╕реНрдЯрд░ рдкреЗрд╢ рдХрд┐рдпрд╛ ред рдпрд╣ рдХрдИ Node.JS рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдПрдкреАрдЖрдИ рдиреЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдиреЗрдЯ / http рд╕рд░реНрд╡рд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЯреАрд╕реАрдкреА рдкреЛрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдореВрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд╕рдХрддреА рд╣реИ: рд░реЛрдХреЗрдВ, рдирдП рд╢реБрд░реВ рдХрд░реЗрдВ, рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕рдорд╛рдкреНрддрд┐ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдВред рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдкрдиреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреА рд╣реИред
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдореИрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреАрд╕реАрдкреА рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдкрд░ рдиреЛрдб рдХреЗ 2 рдЙрджрд╛рд╣рд░рдг рдЪрд▓рд╛рддрд╛ рд╣реВрдВред рдореИрдВ рдЕрдкрдбреЗрдЯ рдХреЗ рджреМрд░рд╛рди рдбрд╛рдЙрдирдЯрд╛рдЗрдо рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдЕрдиреНрдпрдерд╛ рд░рд┐рдмреВрдЯ рдХреЗ рджреМрд░рд╛рди (рдЬреЛ, рд╡реИрд╕реЗ, рдХреЗрд╡рд▓ рдХреБрдЫ рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВ), рд╕рд╛рдЗрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рджреБрд░реНрдЧрдо рд╣реЛрдЧреАред рдиреЛрдб рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмреАрдЪ, рд▓реЛрдб рдХреЛ
HttpUpstreamModule Nginx рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛
рдЬрд╛рддрд╛ рд╣реИ ред рдЬрдм, рд░рд┐рдмреВрдЯ рдХреЗ рджреМрд░рд╛рди, рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рджреВрд╕рд░рд╛ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рд▓реЗрддрд╛ рд╣реИред
Nginx рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдирдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдЗрдЯ рдХреЗ рд╕рднреА рдкреГрд╖реНрда рдереЛрдбрд╝реЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдХреИрд╢ рд╣реЛ рдЬрд╛рдПрдВ - 1 рдорд┐рдирдЯред рдпрд╣ рдЖрдкрдХреЛ Node.JS рд╕реЗ рд▓реЛрдб рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрд╣реБрдд рдЬрд▓реНрджреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдХреИрд╢рд┐рдВрдЧ рд╕рдордп 3 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИред рдпрд╣ рдЖрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрджреГрд╢реНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рд╡рд╛рд▓реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреБрдХреАрдЬрд╝ рд╡рд╛рд▓реЗ рд╕рд╛рдЗрдЯ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рдШреБрд╕рдкреИрдард┐рдпреЛрдВ рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛ред
рдореЙрдбреНрдпреВрд▓
Node.JS рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╕рд╡рд╛рд▓ рдЕрдХреНрд╕рд░ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбреНрдпреВрд▓ рдЪреБрдирдиреЗ рдХрд╛ рд╣реЛрддрд╛ рд╣реИред рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд┐рджреНрдз, рд▓реЛрдХрдкреНрд░рд┐рдп рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ, рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реБрдП, рдЖрдкрдХреЛ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рдХрд╛рдВрдЯреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЕрдВрддрд┐рдо рдХрдорд┐рдЯ рдХреА рддрд╛рд░реАрдЦреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЕрдм рд╣рдо рдЧрд┐рдЯрд╣рдм рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред рдЗрди рд╕рдВрдХреЗрддрдХреЛрдВ рджреНрд╡рд╛рд░рд╛, рдЖрдк рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЬреАрд╡рд┐рдд рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╣рд╛рд▓ рд╣реА рдореЗрдВ рджрд┐рдЦрд╛рдИ
рдЧрдИ рдиреЛрдб рдЯреВрд▓рдмреЙрдХреНрд╕ рд╕реЗрд╡рд╛ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддреА рд╣реИред
рдЕрдм рдЙрди рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ рд╣реИред
рдХрдиреЗрдХреНрдЯ
github.com/senchalabs/connectрдпрд╣ рдореЙрдбреНрдпреВрд▓
Node.JS http рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдРрдб-рдСрди
рд╣реИ рдФрд░ рдЗрд╕рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдХрд╛рдлреА рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рд░реВрдЯрд┐рдВрдЧ, рдХреБрдХреАрдЬ рд╕рдкреЛрд░реНрдЯ, рд╕реЗрд╢рди рд╕рдкреЛрд░реНрдЯ, рдмреЙрдбреА рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЬреИрд╕реА рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ Node.JS рдкрд░ рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдПрдХ рдмреБрд░реЗ рд╕рдкрдиреЗ рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрдиреЗрдХреНрдЯ рдлреАрдЪрд░реНрд╕ рдХреЛ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрдиреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдХрдИ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА
рдкреНрд▓рдЧрдЗрдиреНрд╕ рднреА
рд╣реИрдВ рдЬреЛ рдЗрд╕рдХреЗ рдорд╛рдирдХ рдкреИрдХреЗрдЬ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд▓рдЧрдЗрди рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдХреЗ рд▓рд╛рдкрддрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рднреА рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред
рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдФрд░ рдЗрд╕рдХреЗ рддреЗрдЬреА рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рд╡рдЬреВрдж, Node.JS рдХреЗ рдЬрд╡рд╛рдм рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП Nginx рдХреЛ рд░реЛрдХрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛ рдЗрд╕рдореЗрдВ рдереАред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, Nginx рдореЗрдВ рдЫрджреНрдо рдирд┐рд░реНрджреЗрд╢ рдХреИрд╢ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреИрд╢ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдирд┐рдореНрди рд╣реЗрдбрд░ рдореЗрдВ рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЙрдирдореЗрдВ рдореМрдЬреВрдж рд╣реИ:
- рдХреБрдХреА рд╕реЗрдЯ рдХрд░реЗрдВ
- рдХреИрд╢-рдХрдВрдЯреНрд░реЛрд▓ "рдиреЙрди-рдХреИрд╢", "рдиреЛ-рд╕реНрдЯреЛрд░", "рдкреНрд░рд╛рдЗрд╡реЗрдЯ", рдпрд╛ "рдиреЙрди-рдиреНрдпреВрдореЗрд░рд┐рдХ рдпрд╛ рдЬреАрд░реЛ рд╡реИрд▓реНрдпреВ рд╡рд╛рд▓реЗ" рдЕрдзрд┐рдХрддрдо рдЖрдпреБ рд╡рд╛рд▓реЗ рдорд╛рдиреЛрдВ рд╕реЗ рдпреБрдХреНрдд;
- рдЕрддреАрдд рдореЗрдВ рдПрдХ рддрд╛рд░реАрдЦ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рд░рд╣рд╛ рд╣реИ;
- рдПрдХреНрд╕-рдПрдХреНрд╕реЗрд▓-рдПрдХреНрд╕рдкрд╛рдпрд░: 0ред
рдХрдиреЗрдХреНрдЯ рд╕рддреНрд░реЛрдВ рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рддрд╛рдХрд┐ рд╕реЗрдЯ-рдХреБрдХреА рд╣реЗрдбрд░ рдХреЛ рд╣рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рднреЗрдЬрд╛ рдЬрд╛рдПред рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рддреНрд░ рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЗ рд╕рд╛рде рд╕рддреНрд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред PHP рдореЗрдВ, рдпрджрд┐ рдЖрдк рд╕рддреНрд░ рдХрд╛ рд╕рдордп рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рди рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЗрд╕ рд╕рдордп рдХреЗ рдмрд╛рдж рднреА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛, рднрд▓реЗ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд╛рдЗрдЯ рдкрд░ рд╕рдХреНрд░рд┐рдп рд╣реЛред рдХрдиреЗрдХреНрдЯ рдПрдХ рдЕрд▓рдЧ рдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдХреБрдХреА рдХреЛ рд╣рд░ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЬреАрд╡рдирдХрд╛рд▓ рд╡рд░реНрддрдорд╛рди рдПрдХ рд╕реЗ рдЧрд┐рдирд╛ рдЬрд╛рдиреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдХреНрд░рд┐рдп рд╣реИ, рдЬрдмрдХрд┐ рд╕рддреНрд░ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред PHP рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореБрдЭреЗ рдЕрдзрд┐рдХ рд╕рдЪ рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рддреНрд░ рдЕрднреА рднреА рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рдХреЛрдб рдореЗрдВ рдЙрдЪрд┐рдд рдмрджрд▓рд╛рд╡ рдХрд┐рдП рдФрд░ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ
рдЫреЛрдЯреА рдЪрд░реНрдЪрд╛ (рдореЗрд░реА рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЗ рд▓рд┐рдП рдХрд┐рдХ рдирд╣реАрдВ) рдХреЗ рдмрд╛рдж, рдПрдХ рд╕рдордЭреМрддрд╛ рд╕рдорд╛рдзрд╛рди рдкрд╛рдпрд╛ рдЧрдпрд╛ - рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдкреНрддрд┐ рд╕рддреНрд░ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдХреБрдХреА рдЕрдм рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИред рдХрдбрд╝рд╛рдИ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЬреАрд╡рдирдХрд╛рд▓ рд╡рд╛рд▓реЗ рд╕рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рддрдХ рд╣рд▓ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред
рдХрдиреЗрдХреНрдЯ-memcached
github.com/balor/connect-memcachedрдпрд╣ рдореЙрдбреНрдпреВрд▓ рдХрдиреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рд╣реИред рдпрд╣ рд╕рддреНрд░реЛрдВ рдХреЛ рдореЗрдордХреЗрдб рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рдмрд┐рдирд╛, рдХрдиреЗрдХреНрдЯ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рддреНрд░реЛрдВ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рд╕рднреА рд▓реЛрдХрдкреНрд░рд┐рдп рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
async
github.com/caolan/asyncрдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд┐рдирд╛, Node.JS рдХреЗ рд▓рд┐рдП рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛрдЧрд╛ред рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдРрд╕реА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓реЛрдВ рдХреЛ "рдЬреЙрдЧрд▓" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ рдФрд░ рдХреЛрдб рдХреЛ рдПрдХ-рджреВрд╕рд░реЗ рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдлреБрд▓рд╛рддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдИ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╕рд╛рдЗрдХрд┐рд▓ рдХреЗ рдЖрдЧреЗ рдХреЗ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗред
рдиреЛрдб OAuth
github.com/ciaranj/node-oauthрдпрд╣ рдореЙрдбреНрдпреВрд▓ OAuth рдФрд░ OAuth2 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╛рдЗрдЯ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред
рдиреЛрдб рдХреНрд░реЙрди
github.com/ncb000gt/node-cronрдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП рдмреЛрд▓рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рд╢реЗрдбреНрдпреВрд▓ рдкрд░ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╢реЗрдбреНрдпреВрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреНрд░реЛрди рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЬреЛ рд╕рднреА рдХреЛ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдиреЛрдб-рдХреНрд░реЛрди рджреВрд╕рд░реЗ-рджреВрд╕рд░реЗ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдЕрдВрддрд░рд╛рд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЖрдк рд╣рд░ 10 рд╕реЗрдХрдВрдб рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╣рд░ рд╕реЗрдХрдВрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рд╡рд╛рд▓реЛрдВ рдХреЛ рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ рд▓рд╛рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдЬреИрд╕реЗ рдХрд╛рд░реНрдп рдЗрд╕реА рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдиреЛрдб рдЯреНрд╡рд┐рдЯрд░
github.com/jdub/node-twitterрдпрд╣ рдореЙрдбреНрдпреВрд▓ рдЯреНрд╡рд┐рдЯрд░ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЖрд╡реЗрджрди рдХреА рдмрд╛рддрдЪреАрдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдиреЛрдб-рдУрдУрде рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдиреЛрдб MongoDB рджреЗрд╢реА
github.com/christkv/node-mongodb-nativeрдпрд╣ рдореЙрдбреНрдпреВрд▓ NoSQL DBMS MongoDB рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред рдЕрдкрдиреЗ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ, рд╡рд╣ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдкрд░рд┐рд╖реНрдХрд╛рд░ рдФрд░ рддреЗрдЬреА рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЦрдбрд╝рд╛ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ (рдкреВрд▓) рдХреЗ рд▓рд┐рдП рдХрдИ рдХрдиреЗрдХреНрд╢рди рдЦреЛрд▓рдирд╛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдЬреЛ рдЖрдкрдХреА рдЕрдкрдиреА рдмреИрд╕рд╛рдЦреА рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдХ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ
ORM Mongoose рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдиреЛрдб memcached
github.com/3rd-Eden/node-memcachedрдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, Node.JS рд╕реЗ рдЕрднрд┐рдЧрдо рдЕрднрд┐рдЧрдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рдпрд╣ рдХрдИ рдореЗрдореНрдХреЗрдб рд╕рд░реНрд╡рд░ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдХреБрдВрдЬреА рд╡рд┐рддрд░рдг, рд╕рд╛рде рд╣реА рдПрдХ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
http-get
github.com/SaltwaterC/http-getрдпрд╣ рдореЙрдбреНрдпреВрд▓ HTTP / HTTPS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреВрд░рд╕реНрде рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде, рд╕реЛрд╢рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╛рдЗрдЯ рдкрд░ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рддрд╕реНрд╡реАрд░реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИрдВред
sprintf
github.com/maritz/node-sprintfрдПрдХ рдЫреЛрдЯрд╛ рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдореЙрдбреНрдпреВрд▓, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдЗрд╕рдХреЗ рдЕрд░реНрде рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЯрдл рдФрд░ vsprintf рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
daemon.node
github.com/indexzero/daemon.nodeрдпрд╣ рдореЙрдбреНрдпреВрд▓ Node.JS рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рд╕реЗ рдбреЗрдореЙрди рдмрдирд╛рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде, рдпрд╣ рдХрдВрд╕реЛрд▓ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЦреЛрд▓рдирд╛ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдореЗрд░рд╛ рдпреЛрдЧрджрд╛рди
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЙрдбреНрдпреВрд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЧрдП рдереЗ, рдЬреИрд╕реЗ рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдореБрдЭреЗ рдЙрдирдХреА рдЬрдЧрд╣ рдХреЛрдИ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдпреЗ рдореЙрдбреНрдпреВрд▓
GitHub рдкрд░ рдФрд░ npm рдореЙрдбреНрдпреВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ
рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред
aop
github.com/baryshev/aopрдпрд╣ рдореЙрдбреНрдпреВрд▓
AOP рдкреИрдЯрд░реНрди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЕрдм рдЗрд╕рдореЗрдВ рдПрдХ рдПрдХрд▓ рд╡рд┐рдзрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдкрд╣рд▓реВ рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЗрд╕рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рддрдХрдиреАрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдп рд╣реИрдВ:
var someAsyncFunction = function(num, callback) { var result = num * 2; callback(undefined, result); };
рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдХреНрд╕рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
var someAsyncFunction = function(num, callback) { var key = 'someModule' + '_' + 'someAsyncFunction' + '_' + num; cache.get(key, function(error, cachedResult) { if (error || !cachedResult) { var result = num * 2; callback(undefined, result); cache.set(key, result); } else { callback(undefined, cachedResult); } }); };
рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдРрд╕реЗ рдХрдИ рдХрд╛рд░реНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдХреЛрдб рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рдлреБрд▓реНрд▓рд┐рдд рд╣реЛрдЧрд╛ рдФрд░ рдХрдо рдкрдардиреАрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рдЖрдк aop.wrap рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
var someAsyncFunction = function(num, callback) { var result = num * 2; callback(undefined, result); }; someAsyncFunction = aop.wrap(someAsyncFunction, someAsyncFunction, aspects.cache, 'someModule', 'someAsyncFunction');
рдЕрд▓рдЧ-рдЕрд▓рдЧ, рд╣рдо рдкрд╣рд▓реБрдУрдВ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдБ рдХреИрд╢ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдм рдХреБрдЫ рдФрд░ рд╕рдм рдХреБрдЫ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ред
module.exports.cache = function(method, params, moduleName, functionName) { var that = this;
рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд╣рд▓реВ рдХреЛ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рд╕рднреА рдПрдВрдб-рдЯреВ-рдПрдВрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдХрд░рддрд╛ рд╣реИред
рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдореИрдВ AOP рдкреИрдЯрд░реНрди рдХреА рд╢реЗрд╖ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред
рдкреНрд░рдкрддреНрд░
github.com/baryshev/formрдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдХрд╛рд░реНрдп рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЛ рдЬрд╛рдВрдЪрдирд╛ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдХреНрд╕рд░ рдпреЗ рд░реВрдк рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╛рд╣рд░реА рдПрдкреАрдЖрдИ, рдЖрджрд┐ рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ
рдиреЛрдб-рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред
рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рдлреЙрд░реНрдо рдХреЛ рдлрд╝реАрд▓реНрдб рдХреЗ рдПрдХ рд╕реЗрдЯ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рдЯрдХрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ (рдХрд╛рд░реНрдп рдЬреЛ рдлрд╝реАрд▓реНрдб рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ) рдФрд░ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ (рдХрд╛рд░реНрдп рдЬреЛ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдХреЗ рдореВрд▓реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ)ред рдЬрдм рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдкрддреНрд░ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЙрд▓рдмреИрдХ рдореЗрдВ, рд╣рдореЗрдВ рдпрд╛ рддреЛ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╡рд┐рд╡рд░рдг рдорд┐рд▓рддрд╛ рд╣реИ (рдпрджрд┐ рдХреЛрдИ рдбреЗрдЯрд╛ рдлреЙрд░реНрдо рдХреЗ рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ) рдпрд╛ рдЦреЗрддреЛрдВ рдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдП рдЧрдП рд╕реЗрдЯ рд╡рд╛рд▓реА рдПрдХ рд╡рд╕реНрддреБ рдФрд░ рдЖрдЧреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:
var fields = { text: [ form.filter(form.Filter.trim), form.validator(form.Validator.notEmpty, 'Empty text'), form.validator(form.Validator.len, 'Bad text length', 30, 1000) ], name: [ form.filter(form.Filter.trim), form.validator(form.Validator.notEmpty, 'Empty name') ] }; var textForm = form.create(fields); textForm.process({'text' : 'some short text', 'name': 'tester'}, function(error, data) { console.log(error); console.log(data); });
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП 'рдЦрд░рд╛рдм рдЯреЗрдХреНрд╕реНрдЯ рд▓реЗрдВрде' рдХреА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЗрд╖рд┐рдд рдкрд╛рда рдХреА рд▓рдВрдмрд╛рдИ 30 рд╡рд░реНрдгреЛрдВ рд╕реЗ рдХрдо рд╣реИред
рдлрд╝рд┐рд▓реНрдЯрд░ рдФрд░ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рднрд▓реЗ рд╣реА рдЖрдк рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реНрдерд╛рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдлрд┐рд░ рднреА рд╣рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрд╛рдБрдЪ рд╕реЗ рдкрд╣рд▓реЗ, рдЯреНрд░рд┐рдо рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
рдЖрдк рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐
рдиреЛрдб-рд╡реИрд▓реЗрд░реЗрдЯрд░ рдкреГрд╖реНрда рдкрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдФрд░ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ рдпрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рджреЗрдЦреЗрдВред рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдпреЛрдЬрдирд╛рдПрдВ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЛрд░реНрдЯ рдмрдирд╛рддреА рд╣реИрдВ рдФрд░ рдЗрд╕рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд┐рдд рдХрд░рддреА рд╣реИрдВред
configjs
github.com/baryshev/configjsрдпрд╣ рдореЙрдбреНрдпреВрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдирд┐рдпрдорд┐рдд JS рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЖрдк рд╡рд┐рднрд┐рдиреНрди рд╡рд╛рддрд╛рд╡рд░рдг (рд╡рд┐рдХрд╛рд╕, рдЙрддреНрдкрд╛рджрди, рдкрд░реАрдХреНрд╖рдг, рдЖрджрд┐) рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдореБрдЦреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ / рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВрдЧреЗред
localejs
github.com/baryshev/localejsрдпрд╣ рдореЙрдбреНрдпреВрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрднрд╛рд╖рд╛рд╡рд╛рдж рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рддрд╛рд░ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкрд╛рда рдХреЗ рд╕рд╛рде рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж рд╣реА рдЙрдкрдпреБрдХреНрдд рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ,
рдЧреЗрдЯрдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд╕рдорд╛рди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред рдЖрд╡рд╢реНрдпрдХ рд▓реЛрдХрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд╕рд╛рдзрдиреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд░реВрд╕реА рдФрд░ рдЕрдВрдЧреНрд░реЗрдЬреА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдВрдХреЛрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИред
рд╣рдм
github.com/baryshev/hub/blob/master/lib/index.jsрд╢рд╛рдпрдж рдпрд╣ рдореЙрдбреНрдпреВрд▓ Node.JS рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдореЙрдбреНрдпреВрд▓ рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИ: рдореЙрдбреНрдпреВрд▓.рдПрдХреНрд╕рдкреЛрд░реНрдЯреНрд╕ = {}; рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рд╡рд┐рдХрд╛рд╕ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛрдЧрд╛ред рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░ рд╣реИ, рдЬрдмрдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдпрд╣ Node.JS рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░, рдореЙрдбреНрдпреВрд▓ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЖрд░рдВрднрд┐рдХ рд╣реЛрддрд╛ рд╣реИред рд╕рднреА рдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ('рдореЙрдбреНрдпреВрд▓рдирд╛рдо'), рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЖрд╡реЗрджрди рдореЗрдВ рдХрд┐рддрдиреЗ рд╣реИрдВ, рдореЙрдбреНрдпреВрд▓ рдХреЗ рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджрд░реНрдн рд▓реМрдЯрд╛рдПрдВ, рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдкрд░ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдерд╛рди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдЬрд░реВрд░рдд рдХрд╛рдлреА рдмрд╛рд░ рдЙрдарддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг: DBMS рдХрдиреЗрдХреНрд╢рди рдкреВрд▓, рдХреИрд╢ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓, рд▓реЛрдб рдХрд┐рдП рдЧрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рд▓рд┐рдВрдХ рдФрд░ рд▓реЛрдХреЗрд▓ред рдЖрд╡реЗрджрди рдХреЗ рдХрдИ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рдЗрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЙрди рддрдХ рдкрд╣реБрдВрдЪ рдЖрд╕рд╛рди рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЬрдм рд╕рдВрд╕рд╛рдзрди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╣рдм рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рд╣рдм рдХреЛ рдкреНрд░реА-рдХрдиреЗрдХреНрдЯ рдХрд░рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХрдиреЗрдХреНрдЯ-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛
рдХрдиреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкреНрд▓рдЧрдЗрди рдХреБрдХреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рднреА рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рдХрд▓рд╛ред рдЖрдзрд╛рд░
EJS рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЗрдВрдЬрди рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдпрд╣ рдЕрдкрдиреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде, рд╕рдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЙрддреНрдкрд╛рдж рдирд┐рдХрд▓рд╛ред рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рд╡рд┐рд╖рдп рд╣реИред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдЕрднреА рддрдХ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рдареАрдХ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЕрднреА рднреА рдареАрдХ рдирд╣реАрдВ рд╣реБрдИ рд╣реИрдВред рдореИрдВ рдереЛрдбрд╝реЗ рдЦрд╛рд▓реА рд╕рдордп рдХреЗ рдкреНрд░рдХрдЯ рд╣реЛрддреЗ рд╣реА рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдВрд░рдЪрдирд╛
рдЪреВрдВрдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд┐рд╕реА рднреА рдирд┐рдпрдо рд╕реЗ рдмрдВрдзреА рдирд╣реАрдВ рд╣реИ, рд╕рд┐рд╡рд╛рдп Node.JS рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╢реИрд▓реА рдХреЗред рдПрдкреНрд▓рд┐рдХреЗрд╢рди MVC рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
Server.js рд▓реЙрдиреНрдЪ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдореБрдЦреНрдп рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЖрд░рдВрднреАрдХрд░рдг рд╣реЛрддрд╛ рд╣реИ: http рд╕рд░реНрд╡рд░ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛, рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓реЛрдб рдХрд░рдирд╛, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рднрд╛рд╖рд╛ рд▓реЛрдб рдХрд░рдирд╛, MongoDB рдФрд░ Memcached рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛, рдирд┐рдпрдВрддреНрд░рдХ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛, рдЙрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рд╕реЗрдЯ рдХрд░рдирд╛ рдЬреЛ рд╣рдм рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣рд╛рдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрд╛рдВрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИред рдорд╛рд╕реНрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдЕрдиреБрд╕реВрдЪрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЛрдб-рдХреНрд░реЛрди рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ - http- рд╕рд░реНрд╡рд░ред
рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ, рдХрдиреЗрдХреНрдЯ url рдХреЛ рд╣реИрдВрдбрд▓рд░ рд╡рд┐рдзрд┐ рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрдиреЗрдХреНрдЯ рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХреЗ рджреМрд░рд╛рди рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг:
var server = connect(); server.listen(port, hub.config.app.host); if (hub.config.app.profiler) server.use(connect.profiler()); server.use(connect.cookieParser()); server.use(connect.bodyParser()); server.use(connect.session({ store: new connectMemcached(hub.config.app.session.memcached), secret: hub.config.app.session.secret, key: hub.config.app.session.cookie_name, cookie: hub.config.app.session.cookie })); server.use(connect.query()); server.use(connect.router(function(router) { hub.router = router; }));
рдпрд╣ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрдВрддреНрд░ рд╣реИ рдЬреЛ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рдирдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред
рдирд┐рдпрдВрддреНрд░рдХ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдореЙрдбрд▓ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ MongoDb рдпрд╛ рдореЗрдореНрдХреЗрдб рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рднреА рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирд┐рдпрдВрддреНрд░рдХ рдкреЗрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХреЛ рдХрдорд╛рдВрдб рджреЗрддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрддреНрдкрдиреНрди HTML рднреЗрдЬрддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
Node.JS рдкрд░ WEB рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╡рд┐рд╖рдп рдХрд╛рдлреА рдмрдбрд╝рд╛ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдЗрд╕реЗ рджреЛ рд▓реЗрдЦреЛрдВ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрддрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рд╣рд╛рдВ, рдпрд╣ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рдпрд╣ рд╡рд┐рд╖рдп "рджрд░реНрдЬ" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд┐рд░
Google рдФрд░
GitHub рдмрдЪрд╛рд╡ рдореЗрдВ рдЖрдПрдВрдЧреЗред GitHub рдкрд░ рдореЙрдбреНрдпреВрд▓ рдкреЗрдЬ рдХреЗ рд╕рднреА рд▓рд┐рдВрдХ рдЬреЛ рдореИрдВрдиреЗ рд▓реЗрдЦ рдореЗрдВ рдЙрджреНрдзреГрдд рдХрд┐рдП рд╣реИрдВ рдЙрдирдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рд╣реИред
рдЗрд╕реЗ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рд╕рд╡рд╛рд▓ рд╕реБрдирдиреЗ рдореЗрдВ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреАред