рдореЙрдбреНрдпреВрд▓ рдмрд╛рдзреНрдпрдХрд╛рд░реА Node.js рдореЗрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг

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

  • рдХрдард┐рди рдирд┐рд░реНрднрд░рддрд╛рдПрдВ (рдЖрд╡рд╢реНрдпрдХрддрд╛) ()
  • рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди
  • рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░
  • рдПрдВрдмреЗрдбреЗрдб рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдХрдВрдЯреЗрдирд░ (DI рдХрдВрдЯреЗрдирд░)

рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛


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

рдХрдард┐рди рд╡реНрдпрд╕рдиреЛрдВ


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

// ourModule.js const db = require('db'); //    ... 

рдкреЗрд╢реЗрд╡рд░реЛрдВ:


  • рдЖрд░рд╛рдо
  • рдореЙрдбреНрдпреВрд▓ рдХрд╛ рджреГрд╢реНрдп рд╕рдВрдЧрдарди
  • рдЖрд╕рд╛рди рдбрд┐рдмрдЧрд┐рдВрдЧ

рд╡рд┐рдкрдХреНрд╖:


  • рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХрдард┐рдирд╛рдИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдмрд╛рд░-рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдПрдХ рдЕрд▓рдЧ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде)
  • рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХрдард┐рдирд╛рдИ (рдЖрдкрдХреЛ рдПрдХ рдбрдореА рдбреЗрдЯрд╛рдмреЗрд╕ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛)

рд╕рд╛рд░рд╛рдВрд╢:


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

рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди


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

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

 // ourModule.js module.exports = (db) => { //       ... }; 

рдмрд╛рд╣рд░реА рдореЙрдбреНрдпреВрд▓:

 const dbFactory = require('db'); const OurModule = require('./ourModule.js'); const dbInstance = dbFactory.createInstance('instance1'); const ourModule = OurModule(dbInstance); 

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

рдкреЗрд╢реЗрд╡рд░реЛрдВ:


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

рд╡рд┐рдкрдХреНрд╖:


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

рд╕рд╛рд░рд╛рдВрд╢:


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

рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░


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

 // serviceLocator.js const dependencies = {}; const factories = {}; const serviceLocator = {}; serviceLocator.register = (name, instance) => { //[2] dependencies[name] = instance; }; serviceLocator.factory = (name, factory) => { //[1] factories[name] = factory; }; serviceLocator.get = (name) => { //[3] if(!dependencies[name]) { const factory = factories[name]; dependencies[name] = factory && factory(serviceLocator); if(!dependencies[name]) { throw new Error('Cannot find module: ' + name); } } return dependencies[name]; }; 

рдмрд╛рд╣рд░реА рдореЙрдбреНрдпреВрд▓:

 const serviceLocator = require('./serviceLocator.js')(); serviceLocator.register('someParameter', 'someValue'); serviceLocator.factory('db', require('db')); serviceLocator.factory('ourModule', require('ourModule')); const ourModule = serviceLocator.get('ourModule'); 

рд╣рдорд╛рд░рд╛ рдореЙрдбреНрдпреВрд▓:
 // ourModule.js module.exports = (serviceLocator) => { const db = serviceLocator.get('db'); const someValue = serviceLocator.get('someParameter'); const ourModule = {}; //  ,   ... return ourModule; }; 

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

рдкреЗрд╢реЗрд╡рд░реЛрдВ:


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

рд╡рд┐рдкрдХреНрд╖:


  • рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ (рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдХрд╛рд░рдг)
  • рдкрдардиреАрдпрддрд╛: рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдХрдард┐рди рд╣реИ рдХрд┐ рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпрд╛ рд╣реИ
  • рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдЧрд╛рдИ рдмрдврд╝ рдЧрдИ

рд╕рд╛рд░рд╛рдВрд╢


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдХ рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рд╕рдорд╛рди рд╣реИ, рдХреБрдЫ рдорд╛рдпрдиреЛрдВ рдореЗрдВ рдпрд╣ рдЖрд╕рд╛рди рд╣реИ (рдХреЛрдИ рдкреНрд░рд╛рд░рдВрдн рдХреНрд░рдо рдирд╣реАрдВ рд╣реИ), рдХреБрдЫ рдЪреАрдЬреЛрдВ рдореЗрдВ рдпрд╣ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ (рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЛрдб рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╕реЗ рдХрдо)ред

рдПрдВрдмреЗрдбреЗрдб рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдХрдВрдЯреЗрдирд░ (DI рдХрдВрдЯреЗрдирд░)


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

 const fnArgs = require('parse-fn-args'); module.exports = function() { const dependencies = {}; const factories = {}; const diContainer = {}; diContainer.factory = (name, factory) => { factories[name] = factory; }; diContainer.register = (name, dep) => { dependencies[name] = dep; }; diContainer.get = (name) => { if(!dependencies[name]) { const factory = factories[name]; dependencies[name] = factory && diContainer.inject(factory); if(!dependencies[name]) { throw new Error('Cannot find module: ' + name); } } diContainer.inject = (factory) => { const args = fnArgs(factory) .map(dependency => diContainer.get(dependency)); return factory.apply(null, args); } return dependencies[name]; }; 

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

 const diContainer = require('./diContainer.js')(); diContainer.register('someParameter', 'someValue'); diContainer.factory('db', require('db')); diContainer.factory('ourModule', require('ourModule')); const ourModule = diContainer.get('ourModule'); 

рд╣рдорд╛рд░рд╛ рдореЙрдбреНрдпреВрд▓ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рджрд┐рдЦрддрд╛ рд╣реИ:

 // ourModule.js module.exports = (db) => { //       ... }; 

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

рдкреЗрд╢реЗрд╡рд░реЛрдВ:


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

рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЛрдг:


  • рдореЙрдбреНрдпреВрд▓ рдмрд╛рдзреНрдпрдХрд╛рд░реА рддрд░реНрдХ рдХреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрдЯрд┐рд▓рддрд╛

рд╕рд╛рд░рд╛рдВрд╢


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

рдирд┐рд╖реНрдХрд░реНрд╖


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

рд▓реЗрдЦ 2017 рдореЗрдВ рдЬрд╛рд░реА Node.js рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХрд┐рддрд╛рдм рдХреЗ рдПрдХ рдЕрдзреНрдпрд╛рдп рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкреБрд╕реНрддрдХ рдореЗрдВ рдХрдИ рдЪреАрдЬреЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреБрд░рд╛рдиреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЪреАрдЬреЗрдВ рдЖрдЬ рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВред

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


All Articles