Node.JS рдореЗрдВ рдХреЗрдВрджреНрд░реАрдХреГрдд рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ



рдПрдХ рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛: рдХреБрдЫ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдореИрдВ рдиреЛрдб рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдЧреЗрдо рд╕рд░реНрд╡рд░ рдореЗрдВ рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдерд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЙрдирдХреЗ рд╢реБрджреНрдз рд░реВрдк рдореЗрдВ рдЕрдкрд╡рд╛рдж рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдкрд░ рдЪрд▓ рд░рд╣реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕реЗ рд╕рдордЭрд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╣реИ:
try { process.nextTick(function() { throw new Error('Catch Me If You Can'); }); } catch (e) { console.log('Exception caught:', e); } 

рдпрд╣ рдЕрдкрд╡рд╛рдж, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрдХрдбрд╝рд╛ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдпрд╣ рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ред рдПрдХ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ, рдиреЛрдб.рдЬреЗрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг 0.8.0 рдПрдХ рддрд╛рдЬрд╝рд╛ (рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ) рдбреЛрдореЗрди рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЙрд╕ рд╡рд░реНрдЧ рдХреЛ рд╢реНрд░рджреНрдзрд╛рдВрдЬрд▓рд┐ рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЖрдЗрдП рдЬрд╛рдиреЗ:

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

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

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

рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рде рдмреНрд▓реЙрдХ (рдмреНрд▓реЙрдХ) рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХреЙрд▓рдмреИрдХ рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░реА рдХреЛрдб рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░, рдпрджрд┐ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдмреНрд▓реЙрдХ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХреЙрд▓рдмреИрдХ рдмрдирд╛рддреЗ рд╕рдордп рд╕рдХреНрд░рд┐рдп рдерд╛ред рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдорд╛рдзрд╛рди рдлреНрдпреВрдЪрд░реНрд╕, рдкреНрд░реЙрдорд┐рд╕, рдлрд╛рдЗрдмрд░реНрд╕ рдЖрджрд┐ рд╕реЗ рдЖрддреЗ рд╣реИрдВред рдмреНрд▓реЙрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рд░рд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рдеред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдирд┐рдкреЗрдЯ рдмреНрд▓реЙрдХ рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдореБрдЭреЗ рдареАрдХ рд╡рд╣реА рдЪрд╛рд╣рд┐рдП рдЬреЛ:
 /** *  Block        . */ function Block(errback) { this._parent=Block.current; this._errback=errback; } Block.current=null; /** *  ,   ,     , *           guard(). *     ,   . * * Example: stream.on('end', Block.guard(function() { ... })); */ Block.guard=function(f) { if (this.current) return this.current.guard(f); else return f; }; /** *      .  -     (" try"). *  -    ('catch'). */ Block.begin=function(block, rescue) { var ec=new Block(rescue); return ec.trap(block); }; /** *   function(err),        , *       (  ,    ). *      err  true. * * Example: request.on('error', Block.errorHandler()) */ Block.errorHandler=function() { // Capture the now current Block for later var current=this.current; return function(err) { if (!err) return; if (current) return current.raise(err); else throw err; }; }; /** *    .     error handler,     . *   raise(...)     .    , *        throw. *  ,   error handler'  , *     error handler'. */ Block.prototype.raise=function(err) { if (this._errback) { try { this._errback(err); } catch (nestedE) { if (this._parent) this._parent.raise(nestedE); else throw nestedE; } } else { if (this._parent) this._parent.raise(err); else throw(err); } }; /** *   callback    . *       raise()  . *  return value   undefined   . */ Block.prototype.trap=function(callback) { var origCurrent=Block.current; Block.current=this; try { var ret=callback(); Block.current=origCurrent; return ret; } catch (e) { Block.current=origCurrent; this.raise(e); } }; /** *  ,        . *     trap(),       . */ Block.prototype.guard=function(f) { if (f.__guarded__) return f; var self=this; var wrapped=function() { var origCurrent=Block.current; Block.current=self; try { var ret=f.apply(this, arguments); Block.current=origCurrent; return ret; } catch (e) { Block.current=origCurrent; self.raise(e); } }; wrapped.__guarded__=true; return wrapped; }; 


(рдореИрдВрдиреЗ рдмреНрд▓реЙрдХ / рд░реЗрд╕реНрдХреНрдпреВ рдХреА рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЛ рдЪреБрдирд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд░реВрдмреА рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛, рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рдЬреЗрдПрд╕ рдореЗрдВ рдЖрд░рдХреНрд╖рд┐рдд рд╢рдмреНрджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред

рд▓рдЧрднрдЧред рдЕрдиреБрд╡рд╛рджрдХ: рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд▓реЗрдХрд┐рди рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЗрд╕ рдлреЙрд░реНрдо рдХреЛ рд▓реЗрддрд╛ рд╣реИ:
 Block.begin(function() { process.nextTick(Block.guard(function() { throw new Error; })); }, function(err) { console.log('Exception caught:', err); }); 
рдЕрдм рдЕрдкрд╡рд╛рдж рдХреЛ рд╕рдВрднрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╣рдо рд╕рд░реНрд╡рд░ рдХреЛ рдЫреЛрдбрд╝ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ, EventEmitter, рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдФрд░ рдХреБрдЫ рдФрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЕрдм рдЖрдЗрдП рдХреЗрдВрджреНрд░реАрдХреГрдд рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХрдиреЗрдХреНрдЯ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдЧрд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рд╣реИ: рдпрд╣ http рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рд╣реА рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рдПрдЧрд╛ред рдпрджрд┐ рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рд╕реНрд╡рдпрдВ рдХреЛ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдХреЙрд▓рдмреИрдХ рдХреЛ function(err) { ; next(err); } рд░реВрдк рдореЗрдВ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ function(err) { ; next(err); } function(err) { ; next(err); } function(err) { ; next(err); } ред рдЖрдк рдХреЛрд╢рд┐рд╢ / рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рджреГрд╢реНрдп рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХ.рдмреЗрдЧрд┐рди рдХреЙрд▓ рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдкрдардиреАрдпрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдХреЗ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред

 function handleUserAgent(req, res, next) { return Block.begin(process, next); function process() { jsonifyRequest(req, withRequest); //  ,   jsonifyRequest , //    Block.guard() } function withRequest(requestObj) { var r=validators.UserAgentRecord(requestObj, {fix:true}); if (!r.valid) { res.writeHead(400); return res.end('Invalid request object: ' + r.reason); } var uar=r.object; if (uar.token) { // Verify //return handler.verifyUserAgent(uar); throw new Error('verifyUserAgent not yet implemented'); } else { // Create uar.token=null; uar.type='auth'; // TODO: Maybe support unauth in the future? handler.createUserAgent(uar, Block.guard(withUserAgent)); } } function withUserAgent(userAgent) { var r=validators.UserAgentRecord(userAgent, {fix:true}); return respondJson(r.object, res); } } 


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

рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдмреНрд▓реЙрдХ рдХреЗ рд╕реНрдкрд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд╛рда рдХреЛ рд╕рдВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдХреЙрд▓рдмреИрдХ рдХрд╣рддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдмрдирд╛рдП рдЧрдП CouchResponse рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ (рдЬреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ)ред

 request: function(options, callback) { var req=http.request(options, function(res) { var text=''; res.setEncoding('utf8'); res.on('data', function(chunk) { text+=chunk; }); res.on('end', Block.guard(function() { callback(new CouchResponse(res, text)); })); res.on('error', Block.errorHandler()); }); req.on('error', Block.errorHandler()); req.end(); } 


рдЕрднреА рднреА рдХреБрдЫ рд╕реНрдерд╛рди рд╣реИрдВ рдЬрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЕрдкрд╡рд╛рдж рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ:

рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдмреНрд▓реЙрдХ.рдЧрд╛рд░реНрдб рдХреЗ рд╕рд╛рде рднреА рд▓рдкреЗрдЯ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ 100% рдпрдХреАрди рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдФрд░ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, 'рдПрдВрдб' рд╣реИрдВрдбрд▓рд░, рдХреБрдЫ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рддреБрд░рдВрдд рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ (рдФрд░ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ JSON.parse рдХреЙрд▓ рд╣реИ), рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдЧрд╛рд░реНрдб рдХреЗ рд╕рд╛рде рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рддреНрд░реБрдЯрд┐ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рддреНрд░реБрдЯрд┐рд╣реИрдВрдбрд▓рд░ () рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рд╕рд░рд▓ рдХреЗрдВрджреНрд░реАрдХреГрдд рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдкреИрдЯрд░реНрди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпреЗ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдХрд╣рд╛рдБ рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдХрд┐рд╕реА рднреА рд╕реНрддрд░ рдкрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрднрд╛рд▓рддреА рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЖрдк рдиреЗрд╕реНрдЯреЗрдб рдХреЙрд▓ рдХреЛ рдмреНрд▓реЙрдХ.рдмреЗрдЧрд┐рди () ( try{try{}catch{}}catch{} рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ try{try{}catch{}}catch{} ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рдФрд░ рдХреЗ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдмреНрд▓реЙрдХ рдХреЗ рднреАрддрд░ рдХреБрдЫ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдкреВрд░рд╛ рдореВрд▓ рдкрд╛рда рдкрдврд╝реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдиреЛрдб рдкрд░ рдмреБрд▓реЗрдЯрдкреНрд░реВрдл рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП 10 рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИред

рдмреНрд▓реЙрдХ рдХреНрд▓рд╛рд╕ I рдЬрд┐рд╕реЗ рдПрдХ рдЬреАрдердм рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдФрд░ рдПрдХ рдПрдирдкреАрдПрдо рдореЙрдбреНрдпреВрд▓ (рдПрдирдкреАрдПрдо рдЗрдВрд╕реНрдЯреЙрд▓ рдХрдВрдЯреНрд░реЛрд▓-рдмреНрд▓реЙрдХ) рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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


All Articles