5 рдорд┐рдирдЯ рдореЗрдВ рдПрд╕рдкреАрдП / рдкреАрдбрдмреНрд▓реНрдпреВрдП рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рд╡реЗрдм рд╕рд░реНрд╡рд░

рдХреЗрд╡рд▓ рдорд╛рдирдХ рдиреЛрдбрдЬ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП


рдЕрдХреНрд╕рд░, рдПрдордкреАрдП / рдПрд╕рдкреАрдП / рдкреАрдбрдмреНрд▓реНрдпреВрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдПрдХ рдмрд╛рд░, рд╕рд╡рд╛рд▓ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдПрдХ рдмрдбрд╝реА рд░реИрд▓реА рдореЗрдВ: "рдЖрдк рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рдереЗ?", рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдореИрдВ рдПрдХ PWA рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рдореЗрдЬрдмрд╛рдиреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдмрдврд╝рд╛ рд░рд╣рд╛ рдерд╛ред рд╣рдо рд╕рднреА рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╣рдВрд╕рддреЗ рд░рд╣реЗ рдФрд░ рд╣рд╛рдВ, PWA рдЧреЛрдВрдж рдирд╣реАрдВ рд╣реИред рдПрд╕рдкреАрдП рдХреА рддрд░рд╣, рдпрд╣ рдПрдХ рдмреНрдпреВрдЯреА рд╕реИрд▓реВрди рдирд╣реАрдВ рд╣реИред рдпреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИрдВред рдФрд░ SSR рдПрдХ рджреЗрд╢ рдирд╣реАрдВ рд╣реИ :-)ред рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ index.html рдХрд╛ рдкреНрд░рд╛рд░рдВрдн рдкреГрд╖реНрда рдЦреЛрд▓рдХрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдореЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рд░реНрд╡реЛрддреНрддрдо рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣рдореЗрдВ рдПрдХ рдСрдлрд╝рд▓рд╛рдЗрди рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓реЗрдЧрд╛ред рдореБрдЭреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИ рдФрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдПред


рдЪрд▓реЛ рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:


  1. рдпрджрд┐ рдХреЛрдИ NodeJS рдирд╣реАрдВ рд╣реИ, рддреЛ LTS рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ, рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рд╛рд╡ рди рдХрд░реЗрдВ, рдЕрдЧрд▓рд╛ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
  2. рд╣рдорд╛рд░реЗ рдПрдХрд╛рдВрдд рд╕реНрдерд╛рди рдореЗрдВ, рдЬрд╣рд╛рдВ рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдПрдХрддреНрд░ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рд╕рд░рд▓-рд╡реЗрдм-рд╕рд░реНрд╡рд░ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рддреЗ рд╣реИрдВ
  3. рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рдХрдорд╛рдВрдб npm init --yes // рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ - рдмрд┐рдирд╛ --yes, рдЗрдирд┐рд╢рд▓рд╛рдЗрдЬрд╝рд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рд╢реНрди рдкреВрдЫреЗрдЧрд╛
  4. рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ package.json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╕рдВрдкрддреНрддрд┐ рдФрд░ рдЙрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЬреЛрдбрд╝реЗрдВ - "рдореБрдЦреНрдп": "index.js" - рддрд╛рдХрд┐ рд╣рдо npm рд░рди рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд▓реНрджреА рд╕реЗ рдЕрдкрдирд╛ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░ рд╕рдХреЗрдВ
  5. рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ рдЕрдкрдиреЗ рд╕рднреА рдХреЛрдб рдХреЛ рдЗрд╕рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ
  6. Lib рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ index.js рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ ред рдпрд╣ рд╣рдорд╛рд░рд╛ рднрд╡рд┐рд╖реНрдп рд╕рд░реНрд╡рд░ рд╣реИред
  7. рдПрдХ рдбрд┐рд╕реНрдЯрд░реНрдм рдлреЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ - рдпрд╣ рд╡рд╣ рдлреЛрд▓реНрдбрд░ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд▓рдн рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрдВрдЧреА, рдЬрд┐рдирдореЗрдВ index.html рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╡рд╣ рд╕реНрдЯреИрдЯрд┐рдХ рдЬреЛ рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдЧрд╛ред
  8. рдлрд╝рд╛рдЗрд▓ /index.js рдЦреЛрд▓реЗрдВ
  9. рдХреБрдЫ рдХреЛрдб рд▓рд┐рдЦреЗрдВ

рддреЛ рд╣рдо рдХреНрдпрд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?


  1. рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓реЗрдВ
  2. рдлрд╝рд╛рдЗрд▓реЗрдВ рдкрдврд╝реЗрдВ
  3. рдлрд╝рд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрддрд░ рджреЗрдВ

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдорд╛рд░рд╛ рд╕рд░реНрд╡рд░ рдмрдирд╛рдПрдВ, рдЗрд╕реЗ idex.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВ


const {createServer} = require('http'); 

рдпрд╣ рдирд┐рд░реНрджреЗрд╢ http рдореЙрдбреНрдпреВрд▓ рдХреА рд╡рд╕реНрддреБ рдХреЛ рдирд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐, createServer рдлрд╝рдВрдХреНрд╢рди, createServer рдЪрд░ рдкреНрд░рд╡рд░реНрдзрдХ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддрд╛ рд╣реИред


рдирд┐рдореНрди рдХрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ рд╕рд░реНрд╡рд░ рдмрдирд╛рдПрдБ


  const server = createServer(); 

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


  const eventsEmitter = server.listen(3000); 

рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ EventEmitter рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдЧреА рдЬрд┐рд╕реЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЗрд╡реЗрдВрдЯреНрд╕ Emitter рдХреЗ рд╕рд╛рде рдПрдХ рдЪрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╡рд╕реНрддреБ рдЕрд╡рд▓реЛрдХрдиреАрдп рд╣реИред рд╣рдо рджреЛ рдЖрд╡рд╢реНрдпрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдлрдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде on / addEventListener рдореЗрдердб рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреА рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рдИрд╡реЗрдВрдЯ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рджреВрд╕рд░рд╛ рдЕрдиреБрд░реЛрдз рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЗрд╕ рдИрд╡реЗрдВрдЯ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛ред


  eventsEmitter.on('request', (req, res) => { debugger; }); 

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд▓рд┐рдВрдХ рдЦреЛрд▓реЗрдВ


рдЫрд╡рд┐


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


рд╣рдордиреЗ рдЕрдиреБрд░реЛрдз рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдФрд░ рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ "рдорд╛рдорд▓рд╛ рдЯреЛрдкреА рдореЗрдВ рд╣реИред" рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рд╡рд╛рдкрд╕ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИред рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХрд┐рд╕ рддрд░рд╣ рдХреА рдлрд╛рдЗрд▓ рдЪрд╛рд╣рд┐рдПред рдбреАрдмрдЧрд░ рдореЗрдВ, рд░реАрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рднреА рдЧреБрдгреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ url рдкреНрд░реЙрдкрд░реНрдЯреА рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ index.html рдЬреИрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ ред


рдЖрдЗрдП рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦреЗрдВ: рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИред рдЖрдЗрдП рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдкрд╣рд▓реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ index.html рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рджреЗрдВрдЧреЗ ред


рдЫрд╡рд┐


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


  eventsEmitter.addListener('request', ({url: requestUrl}, res) => { debugger }); 

рдорд╣рд╛рди, рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ? рд╕рдЪ рдореЗрдВ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рддрдереНрдп рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ index.html рдХреЛ рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдЪрд▓реЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рддреБрд░рдВрдд рд╣рд▓ рдХрд░реЗрдВред рдореИрдВрдиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдорд╛рдирдХ extname рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ ; рдпрд╣ рдорд╛рдирдХ рдкреИрдХреЗрдЬ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ
рдкрде рдореЙрдбреНрдпреВрд▓ рдХреЗ рдиреЛрдбреНрд╕ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВред


  const {extname} = require('path'); 

рдЕрдм рдЖрдк рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ requestUrl рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╛рдпрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдкрд╛рд╕ рдХрд░рдХреЗ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЗ рдкреНрд░рд╛рд░реВрдк '.extension' рд▓рд┐рдП рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЕрдиреБрд░реЛрдз рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛ рджреА рдЬрд╛рдПрдЧреАред рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо 'index.html' рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдЬреЛрдбрд╝реЗрдВрдЧреЗред рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢ рд▓рд┐рдЦрддреЗ рд╣реИрдВ


  const url = extname(requestUrl) === '' ? DEFAULT_FILE_NAME : requestUrl; 

рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рдирд╛рдо рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдЧрд╛ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рднреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ


  const {env: {DEFAULT_FILE_NAME = '/index.html'}} = process;` 

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


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

рдЫрд╡рд┐


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


  const {resolve, extname} = require('path'); 

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


рдЫрд╡рд┐


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


 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> TESTING 1,2,3... </body> </html> 

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


  const {createReadStream} = require('fs'); 

рдФрд░ рдЕрдиреБрд░реЛрдз рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рд▓рд╛рдЗрди 12 рдкрд░ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ


  createReadStream(filePath) 

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


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


  createReadStream(filePath).pipe(res); 

рдЫрд╡рд┐


рдХреНрдпрд╛ рд╡рд╣ рд╕рдм рд╣реИ? , рдирд╣реАрдВред рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдХреМрди рд╕рдВрднрд╛рд▓реЗрдЧрд╛? рдХрд┐рд╕ рддрд░рд╣ рдХреА рдЧрд▓рддрд┐рдпрд╛рдВ? рдЖрдЗрдП css рдлрд╝рд╛рдЗрд▓ рдХреЛ index.html рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЗрд╕реЗ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ :-)


 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="index1.css"> </head> <body> TESTING 1,2,3... </body> </html> 

рдЫрд╡рд┐


рдЙрдореНрдореАрдж рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдпрд╛! рдРрд╕рд╛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдзрд╛рд░рд╛рдУрдВ рдореЗрдВ рдирд╣реАрдВ рдкрдХрдбрд╝реА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рд╕реНрд╡рдпрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ :-) createReadStream рдЙрд╕ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдзрд┐ рдкрд░ рдХрд░рдирд╛ред рддреНрд░реБрдЯрд┐ рдИрд╡реЗрдВрдЯ рдХрд╛ рдирд╛рдо рдФрд░ рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ред рдпрд╣ 404 рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рд░реАрдб рд░реАрдб рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдЧрд╛ред


  createReadStream(filePath) .on('error', error => res.writeHead(404).end()) .pipe(res); 

рдЬрд╛рдБрдЪ!


рдЫрд╡рд┐


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


  const {env: {DEFAULT_FILE_NAME = '/index.html', DIST_FOLDER = 'dist', DEFAULT_MIME_TYPES = '{}'}} = process; const {text} = mimeTypes = { 'html': 'text/html', 'jpeg': 'image/jpeg', 'jpg': 'image/jpeg', 'png': 'image/png', 'js': 'text/javascript', 'css': 'text/css', 'text': 'plain/text', 'json': 'application/json', ...JSON.parse(DEFAULT_MIME_TYPES) }; 

рдЦреИрд░, рдЕрдм рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ MIME рдЯрд╛рдЗрдк рдХреЛ рд░реАрдб рд╕реНрдЯреНрд░реАрдо рдкрд░ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдЯреНрд░реАрдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдирд╛рдореЛрдВ рдХреЛ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдкрд░рд┐рдЪрд┐рдд extname рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ


  const fileExtension = extname(url).split('.').pop(); 

рдФрд░ рдкрд╛рдЗрдк рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ, рд╣рдо рд╡рд╛рдВрдЫрд┐рдд MIME рдкреНрд░рдХрд╛рд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ


 res.on('pipe', () => res.setHeader(contentType, mimeTypes[fileExtension] || text)); 

рдЪреЗрдХ


рдЫрд╡рд┐


рд╡рд╣ рд╕рдм - рд╕рд░реНрд╡рд░ рддреИрдпрд╛рд░ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рддреНрд╡рд░рд┐рдд рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрд╛рдд рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВ :-)


рдкреВрд░реНрдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛрдб



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


All Articles