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

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдореБрдлреНрдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрдм рд╕реЗрд╡рд╛ рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рднреА рдЗрдЪреНрдЫреБрдХ - рдХреГрдкрдпрд╛, рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗред
рдПрдХ рддрд▓рд╣рдЯреА рддреИрдпрд╛рд░ рдХрд░реЗрдВ
рддреЛ рд╣рдореЗрдВ рдЬрд░реВрд░рдд рд╣реИ:
- Node.js рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ рд╕реНрдерд╛рдкрд┐рдд
- рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдЦрд╛рддрд╛
- рдЖрд╡реЗрджрди Node.js рд╕рд░реНрд╡рд░ (рдпрджрд┐ рдЖрдк рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рди рдХреЗрд╡рд▓ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ)
рдпрджрд┐ рдкрд╣рд▓реЗ рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдореИрдВ рддреАрд╕рд░реЗ рдкрд░ рдереЛрдбрд╝рд╛ рдФрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдореБрдлреНрдд рдореЗрдВ рд╣реЛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдореИрдВ рдЕрдкрдиреЗ рд╢рдмреНрджреЛрдВ рдкрд░ рдкреАрдЫреЗ рдирд╣реАрдВ рд╣рдЯрдиреЗ рд╡рд╛рд▓рд╛ рд╣реВрдВред
Node.js рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдореЗрд░реЗ "рд╢рд╛рдирджрд╛рд░" рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореИрдВ рдХрдИ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдЖрдпрд╛ рд╣реВрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ Node.js рд╕рд░реНрд╡рд░ рдХреЛ рдореБрдлреНрдд рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдЙрдирдореЗрдВ рд╕реЗ рджреЛ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛: рд╣рд░реЛрдХреВ рдФрд░ рдиреЛрдбрд╕реНрдЯрд░ред рдирддреАрдЬрддрди, рдореИрдВ рдлрд┐рд░ рднреА рджреВрд╕рд░реЗ рдкрд░ рдмрд╕ рдЧрдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдирд┐рд░реНрдгрдп рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХреА рдкреБрд╖реНрдЯрд┐ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
Nodester рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдХреВрдкрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рдпрд╣ рдЙрдирдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдпрд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдиреЛрдбрд░-рдХреНрд▓реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рдПрдХ рджрд┐рди рдмрд╛рдж рдореБрдЭреЗ рдПрдХ рдХреВрдкрди рдорд┐рд▓рд╛ред рдпрд╣ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдЫреЛрдбрд╝рддрд╛ рдХрд┐ рдореИрдВ рд╕рд┐рд░реНрдл рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдерд╛ред
рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ
рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░
рдЖрдЦрд┐рд░рдХрд╛рд░, рдЖрдкрдХреЛ рдХреБрдЫ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рди рдкрд░ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ (рдореЗрд░рд╛ рдирд╛рдо рд╣реИрдмреНрд░-рдиреЛрдбрдмреЙрдХреНрд╕) рдФрд░ рдкреИрдХреЗрдЬ: рдЬреЗрд╕рди рдлрд╝рд╛рдЗрд▓ рдЗрди:
{ "name": "habr-nodebox", "version": "0.0.1", "node": "0.6.17", "author": "andbas", "dependencies": { "express": "2.5.x", "jade": "0.26.x", "dbox": "0.4.x" } }
рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо, рд╕рдВрд╕реНрдХрд░рдг, рд▓реЗрдЦрдХ - рдмрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдВ рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЗрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдиреЛрдб - рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП Node.js рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг; рдирд┐рд░реНрднрд░рддрд╛ рдЕрдиреБрднрд╛рдЧ рд╕рднреА рдкреНрд░рдпреБрдХреНрдд рддреГрддреАрдп-рдкрдХреНрд╖ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдФрд░ рдЬреЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧреАред рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдкреНрд▓рдЧрдЗрди, рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореИрдВрдиреЗ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдирд╛рдордХ рдПрдХ рдЕрдиреНрдп рдкреНрд▓рдЧрдЗрди рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЖрд╡реЗрджрди рдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдиреЗ рдкреБрд░рд╛рдиреЗ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдПрдкреАрдЖрдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдерд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ / рдЯреЛрдХрди рдерд╛ред рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП oauth рдорд╛рдирдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдХреЙрд▓ рдХрд░реЗрдВ:
npm install
рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдПрдирдкреАрдПрдо рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рджреЛ рдФрд░ рдлрд╝реЛрд▓реНрдбрд░реНрд╕, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рджреГрд╢реНрдп рдмрдирд╛рдПрдВрдЧреЗред рдкрд╣рд▓реЗ рд╕реНрдЯреИрдЯрд┐рдХ рдлрд╛рдЗрд▓реНрд╕ (CSS, JS рдФрд░ рдЕрдиреНрдп) рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрдмрдХрд┐ рд╡реНрдпреВ рдЬреЗрдб рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕ рдмреАрдЪ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдореЗрдВ
рдЕрдЧрд░ рд╣рдо рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдореЗрдВ рдХреБрдЫ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдФрд░ рдЧреБрдкреНрдд рд▓рд╛рдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдорд╛рд░реЗ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдЦрд╛рддреЗ рдХреЗ
рдЖрд╡реЗрджрди рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд╡рд╣рд╛рдВ рдПрдХ рдирдпрд╛ рдЖрд╡реЗрджрди рдмрдирд╛рдПрдВред рдПрдХреНрд╕реЗрд╕ рдкреНрд░рдХрд╛рд░ рдлрд╝реАрд▓реНрдб рдореЗрдВ, рдРрдк рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдорд╛рди рд╕реЗрдЯ рдХрд░реЗрдВ (рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЗрд╡рд▓ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рддрдХ рд╕реАрдорд┐рдд рдкрд╣реБрдВрдЪ рд╣реЛрдЧреА)ред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреГрд╖реНрда рдкрд░, рд╣рдо рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдРрдк рдХреБрдВрдЬреА рдФрд░ рдРрдк рд╕реАрдХреНрд░реЗрдЯ рд▓рд┐рдЦреЗрдВрдЧреЗред рдпрд╣рд╛рдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкрд╣рд▓рд╛ рдХрджрдо рдкрд╣рд▓реЗ рд╣реА рдкреВрд░рд╛ рд╣реЛ рдЪреБрдХрд╛ рд╣реИред
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдореЗрдВ рдЕрдЧрд▓реЗ рдЪрд░рдгреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЙрд╕реА рдиреЛрдб рдкрд░ рдПрдХ рдЫреЛрдЯреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ (рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ dbox-init.js):
var dbox = require("dbox"), stdin = process.stdin, stdout = process.stdout; ask('App key', /^\S+$/, function(app_key) { ask('App secret', /^\S+$/, function(app_secret) { var app = dbox.app({ 'app_key': app_key, 'app_secret': app_secret }); app.request_token(function(status, request_token){ if(request_token){ console.log('Please visit ', request_token.authorize_url, ' to authorize your app.'); ask('Is this done? (yes)', /^yes$/, function(answer) { app.access_token(request_token, function(status, access_token){ console.log('app_key: ' + app_key); console.log('app_secret: ' + app_secret); console.log('oauth_token: ' + access_token.oauth_token); console.log('oauth_token_secret: ' + access_token.oauth_token_secret); console.log('uid: ' + access_token.uid); process.exit(); }); }); } }); }); }); function ask(question, format, callback) { stdin.resume(); stdout.write(question + ": "); stdin.once('data', function(data) { data = data.toString().trim(); if (format.test(data)) { callback(data); } else { stdout.write("It should match: "+ format +"\n"); ask(question, format, callback); } }); }
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░реЗрдВ:
node dbox-init
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдореЗрдВ рдСрде рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рдХреЗ рд╕рднреА рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЙрди рд╕рднреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЪрд░рдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
- рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдРрдк рдХреБрдВрдЬреА рдФрд░ рдРрдк рд╕реАрдХреНрд░реЗрдЯ (рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдкрд╣рд▓реЗ рдорд┐рд▓рд╛ рдерд╛) рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд▓рд┐рдВрдХ рдмрдирд╛рддрд╛ рд╣реИ
- рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдЦрд╛рддреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдПрдХ рд╕реВрдЪрдирд╛ рдорд┐рд▓рддреА рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рдЕрдзрд┐рдХреГрдд рд╣реИ
- рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкреНрд░рд╢реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реЗ рдЧреБрдЬрд░реЗ рд╣реИрдВ, рд╣рдо рд╕рд╛рд╣рд╕рдкреВрд░реНрд╡рдХ "рд╣рд╛рдБ" рд▓рд┐рдЦрддреЗ рд╣реИрдВ
- рд╣рдо рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдПрдХрд╛рдВрдд рд╕реНрдерд╛рди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН: app_key, app_secret, oauth_token, oauth_token_secret рдФрд░ uid
рдЗрд╕ рддреИрдпрд╛рд░реА рдХреЗ рдХрд╛рдо рдХреЛ рдкреВрд░рд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдЦреБрдж рдЖрд╡реЗрджрди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд▓рдбрд╝рд╛рдИ рдореЗрдВ: рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдлреЗрдВрдХ рджреЛ
рд╣рдо, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд - рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВред рдореБрдЦреНрдп рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВ: рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рджреЗрдЦреЗрдВ, рдирдП рдЬреЛрдбрд╝реЗрдВ, рдореМрдЬреВрджрд╛ рд╡рд╛рд▓реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдореИрдВ рдкреАрдбрд╝рд╛ рдирд╣реАрдВ рджреВрдВрдЧрд╛ рдФрд░ рддреБрд░рдВрдд рдХреЛрдб (web.js) рдкреНрд░рджрд╛рди рдХрд░реВрдВрдЧрд╛ред
var express = require('express'), app = express.createServer(express.logger()), fs = require('fs'), dropbox = require("dbox").app({"app_key": process.env['dbox_app_key'], "app_secret": process.env['dbox_app_secret'] }), client = dropbox.createClient({oauth_token_secret: process.env['dbox_oauth_token_secret'], oauth_token: process.env['dbox_oauth_token'], uid: process.env['dbox_uid']}); app.use(express.static(__dirname+'/public')); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.set('view options', { layout: false }); app.use(express.bodyParser()); app.get('/', function(req, res) { client.metadata(".", function(status, reply) { res.render('index', { content : reply }); }); }); app.get('/:path', function(req, res) { var path = req.params.path; client.get(path, function(status, reply, metadata){ res.send(reply); }); }); app.post('/', function(req, res) { var fileMeta = req.files['file-input']; if (fileMeta) { fs.readFile(fileMeta.path, function(err, data) { if (err) throw err; client.put(fileMeta.name, data, function(status, reply) { res.redirect('/'); }); }); } else { res.redirect('/'); } }); var port = process.env['app_port'] || 5000; app.listen(port, function() { console.log("Listening on " + port); });
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдЬреЛ рдХреБрдЫ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЙрд╕рд╕реЗ рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
var express = require('express'), app = express.createServer(express.logger()), fs = require('fs'), dropbox = require("dbox").app({"app_key": process.env['dbox_app_key'], "app_secret": process.env['dbox_app_secret'] }), client = dropbox.createClient({oauth_token_secret: process.env['dbox_oauth_token_secret'], oauth_token: process.env['dbox_oauth_token'], uid: process.env['dbox_uid']});
рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреА рдореБрдЦреНрдп рдИрдВрдЯреЛрдВ рдХреА рдШреЛрд╖рдгрд╛:
- рдПрдХреНрд╕рдкреНрд░реЗрд╕ - рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ
- рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реА рд╣реИ
- fs - рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕
- рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ - рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдЧреНрд░рд╛рд╣рдХ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рд░рдЦрд╛рдирд╛
- рдХреНрд▓рд╛рдЗрдВрдЯ - рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рдХрд░рддрд╛ рд╣реИ
app.use(express.static(__dirname+'/public')); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.set('view options', { layout: false }); app.use(express.bodyParser());
рд╣рдорд╛рд░реЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ред рдпрд╣рд╛рдВ рд╣рдо рдореБрдЦреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ: рд╕реНрдерд┐рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ (рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ) рдХреЗ рд▓рд┐рдП рдкрде, рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ (рджреГрд╢реНрдп), рдЗрди рд╕рдорд╛рди рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ (рдЬреЗрдб) рдХреЗ рдЗрдВрдЬрди, рд╡рд░реНрддрдиреА рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд▓реЗрдЖрдЙрдЯ рдХреЛ рдмрдВрдж рдХрд░реЗрдВ рдФрд░ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдФрд░, рдЕрдВрдд рдореЗрдВ, рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ bodyParser, рдЬреЛ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╢рд░реАрд░ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░ рджреЗрдЧрд╛ред
рдЕрдм рдореБрдЦреНрдп рдЬрд╛рджреВ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдХреЗ рддреАрди рдореБрдЦреНрдп рд╣реИрдВрдбрд▓рд░ рдЕрдиреБрд╕рд░рдг рдХрд░реЗрдВрдЧреЗред
app.get('/', function(req, res) { client.metadata(".", function(status, reply) { res.render('index', { content : reply }); }); });
рдпрд╣ рдХреЛрдб рдореБрдЦреНрдп рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЙрд╕ рдкрд░ рд╣рдо рдЕрдкрдиреЗ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рд╣рдо рдЕрдкрдиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХреЛ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рдкреЗрдЬ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХрд░реЗрдЧрд╛ред
app.get('/:path', function(req, res) { var path = req.params.path; client.get(path, function(status, reply, metadata){ res.send(reply); }); });
рдКрдкрд░ рд▓рд┐рдЦреА рд╡рд┐рдзрд┐ рдлрд╝рд╛рдЗрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧреАред рд╕рдм рдХреБрдЫ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИ - рд╣рдо рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдкрд░ рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВред рдкреНрд░рд╛рдкреНрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реИред
app.post('/', function(req, res) { var fileMeta = req.files['file-input']; if (fileMeta) { fs.readFile(fileMeta.path, function(err, data) { if (err) throw err; client.put(fileMeta.name, data, function(status, reply) { res.redirect('/'); }); }); } else { res.redirect('/'); } });
рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рд╕рднреА рдХрд╛рдо рдПрдХреНрд╕рдкреНрд░реЗрд╕ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдереЗред рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдкреЛрд╕реНрдЯ рдЕрдиреБрд░реЛрдз рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рднреЗрдЬреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рд╣реЗрдЬреА рдЧрдИ рдереАред рд╣рдореЗрдВ
req.files ['рдлрд╛рдЗрд▓-рдЗрдирдкреБрдЯ'] рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд╣рд╛рдВ рдлрд╝рд╛рдЗрд▓-рдЗрдирдкреБрдЯ HTML рдореЗрдВ рдлреЙрд░реНрдо рдХреЗ рдЗрдирдкреБрдЯ рддрддреНрд╡ рдХрд╛ рдирд╛рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдлрд╝рд╛рдЗрд▓ рд▓реЗрдиреЗ рдФрд░ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдкрд░ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдВрдЧреЗред
var port = process.env['app_port'] || 5000; app.listen(port, function() { console.log("Listening on " + port); });
рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди 5000 рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЬреЗрдб рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд░рд▓ рдкреГрд╖реНрда рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдпрд╣ рдХрд░реЗрдВрдЧреЗред
рдЬреЗрдб рдЯреЗрдореНрдкрд▓реЗрдЯ - рдпрд╣ рд╕рдм рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ
рдЬреЗрдб рдХреЗ рд╕рд╛рде рдореЗрд░реА рдкрд╣рд▓реА рдореБрдарднреЗрдбрд╝ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рджрд░реНрджрдирд╛рдХ рдереАред рд╕рд╛рдорд╛рдиреНрдп html рдХрд┐рд╕реА рддрд░рд╣ рдХрд░реАрдм рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрд╕реБрд╡рд┐рдзрд╛ рдЬрд▓реНрджреА рд╕реЗ рдкрд╛рд░рд┐рдд рд╣реЛ рдЧрдИред рджреВрд╕рд░рд╛ рдкреЗрдЬ рдмрд┐рдирд╛ рд╢рддреНрд░реБрддрд╛ рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрджрдд рдЬрд▓реНрджреА рдкрдбрд╝ рдЬрд╛рддреА рд╣реИред рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
рдЬреЗрдб рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдб рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреГрд╢реНрдп рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ index.jade рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕рдореЗрдВ рд▓рд┐рдЦреЗрдВ:
!!! 5 html(lang="en") head title habr-nodebox body each item, i in content.contents div a(href="#{item.path}") #{item.path} - #{item.size} div form#upload-form(action="/", method="POST", enctype="multipart/form-data") input#file-input(name="file-input", type="file") input#submit(value="Upload file", type="submit")
рдореИрдВрдиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╕рдмрд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдмреЗрд╢рдХ, рдЙрддреНрдХреГрд╖реНрдЯ рд╢реИрд▓реАрдЧрдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдк рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдмрд▓рд┐рджрд╛рди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
рд╣рдордиреЗ рдЕрдкрдиреЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рд╕рд░рд▓ HTML рдкреЗрдЬ рдмрдирд╛рдпрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рднреА рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд▓реВрдк рд╕реЗ рдЧреБрдЬрд░реЗред рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рд╣рдорд╛рд░реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреНрд░рддреНрдпреЗрдХ рд╕реВрдЪреА рдЖрдЗрдЯрдо рдПрдХ рд▓рд┐рдВрдХ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдлрд╝реЙрд░реНрдо "/: рдкрде" рдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдзрд┐ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рд╕реВрдЪреА рдХреЗ рдмрд╛рдж рдирдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреЙрд░реНрдо рд╣реИред рдЗрд╕рдореЗрдВ рджреЛ рдЗрдирдкреБрдЯ рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ, рдПрдХ рдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП, рджреВрд╕рд░рд╛ рдлреЙрд░реНрдо рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рд▓рд╛рдВрдЪ
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рд╣реИ рдФрд░ рдпрд╣ рддреИрдпрд╛рд░ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдкрдврд╝рддреЗ рд╕рдордп рдХрд┐рд╕реА рдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреА рд╕рднреА рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЛ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдПрдирд╡реА [] рдПрд░реЗред рдпрд╣ рдХреЛрдб рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдирд╣реАрдВ рдЫреЛрдбрд╝рдиреЗ рдФрд░ рд╕рдордЭреМрддрд╛ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдбрд░ рдХреЗ рдмрд┐рдирд╛ рдЖрд╡реЗрджрди рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрдиреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ process.env рд╕рд░рдгреА рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреЛрдб рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рдХреБрдВрдЬреА = рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░, рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:
$ dbox_app_key=abc1qwe2rty3asd dbox_app_secret=123asd123asd123 dbox_oauth_token_secret=aaabbbccc111222 dbox_oauth_token=123asd123asd123 dbox_uid=12345678 node web
Nodester рдЬреИрд╕реА рд╕реЗрд╡рд╛рдУрдВ рдкрд░, process.env рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдерд╛ред
рдкрд░рд┐рдгрд╛рдо, рдХрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рджрд┐рдЦреЗрдЧрд╛ред

рдпрд╣ рд╕рдм рд╣реИ, рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рдСрдирд▓рд╛рдЗрди рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ - рдмрд╕ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА Node.js рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВред рдореИрдВрдиреЗ рдиреЛрдбрд╕реНрдЯрд░ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ - рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд┐рдпрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдХреА рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред
рдпрд╣рд╛рдВ рдХреЛрдб рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИред