рд▓реЗрдЦ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ
рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдмреБрдирд┐рдпрд╛рджреА MEVN рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХреНрд░реЛрдирд┐рдо MEVN
рд╕рд╛рдзрди - MongoDB + Express.js + Vue.js + Node.js. рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛
рдПрдХрд▓ рдкреГрд╖реНрда рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдкрд╛рда рд╕реЗ рдорд┐рд▓рдХрд░ рдПрдХ рдкреНрд░рдкрддреНрд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ
рдЦреЗрддреЛрдВред рдлреЙрд░реНрдо рднрд░рдиреЗ рдФрд░ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЗ рджреМрд░рд╛рди, рд╕рд░реНрд╡рд░ рдЙрдиреНрд╣реЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓рд┐рдЦ рджреЗрдЧрд╛, рдФрд░
рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ "рдзрдиреНрдпрд╡рд╛рдж" рдкреГрд╖реНрда рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВред
рдЙрдмрдВрдЯреВ 18.10 рдХреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рднреА рдШрдЯрдХреЛрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛ рд╣реЛрдЧреА
рдЙрд╕рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ред
рдЖрд╡рд╢реНрдпрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ
- HTML, CSS рдХрд╛ рдЬреНрдЮрд╛рди;
- рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдмреБрдирд┐рдпрд╛рджреА рдЬреНрдЮрд╛рдиред
рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ
- рдкреВрд░реНрдг-рдкреВрд░реНрдг Fullstack рдЕрдиреБрдкреНрд░рдпреЛрдЧ;
- Express.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ CRUD рд╕рдВрдЪрд╛рд▓рди рдФрд░ REST API;
- MongoDB рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред
рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдХреА рддреИрдпрд╛рд░реА
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреБрдЫ рдЯреВрд▓ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗред
рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдЖрдзрд╛рд░ Node.js рдФрд░ рдЗрд╕рдХрд╛ NPM рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рд╣реИред Node.js рдПрдХ рд░рдирдЯрд╛рдЗрдо рд╣реИ
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдЬрд┐рд╕рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ,
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИред
рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдБ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рд╕рдВрдХреЗрдд рдкрд░ "рд╕реНрдерд┐рд░" рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ:

рдЖрдк NVM (рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдмрдВрдзрдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг Node.js. рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рд╣реИред рдЖрдк рдЗрд╕реЗ рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
env VERSION=`python tools/getnodeversion.py` make install DESTDIR=`nvm_version_path v$VERSION` PREFIX=""
рдлрд┐рд░ nvm рдХрд╛ рдЙрдкрдпреЛрдЧ * рд╕рдВрд╕реНрдХрд░рдг * рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
nvm use 10
рдЕрдм Node.js рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рдЖрдк рдиреЛрдб -v рдХрдорд╛рдВрдб рд╕реЗ рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
node -v > 10.14.2
рдЕрдЧрд▓рд╛ MongoDB рдЖрддрд╛ рд╣реИред рдпрд╣ DBMS, NoSQL рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, JSON рдЬреИрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдФрд░ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЖрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4 echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list sudo apt-get update sudo apt-get install -y mongodb-org
рдЬрдм MongoDB рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
sudo systemctl start mongod
Vue.js рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреНрд░рдВрдЯ-рдПрдВрдб рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИред рдПрдХрд▓-рдкреГрд╖реНрда рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдПрд╕рдкреАрдП) рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП Vue рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИред
Vue.js рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ CLI (рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕) рд╣реИ - Vue.s.s. рдкрд░ рддреЗрдЬреА рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓реА рдпрд╣ рдЗрдВрдЯрд░реЗрдХреНрдЯрд┐рд╡ рд░реВрдк рд╕реЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрди рдФрд░ рдЗрд╖реНрдЯрддрдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рдЖрдк рдПрдирдЬреАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ -g (рд╡реИрд╢реНрд╡рд┐рдХ) рдЭрдВрдбреЗ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛ рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд╣рд░ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд╕рдХреЗ, рдЕрд░реНрдерд╛рддред рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░:
npm install -g @vue/cli
рдЕрдм рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ DBMS MongoDB рдФрд░ Node.js + NPM рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИред рдореИрдВ рдПрдХ рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реАрдПрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕рдВрдкрд╛рджрдХ рдХреЛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ: рдЪрд╛рд╣реЗ рд╡рд╣ рдЙрджрд╛рддреНрдд рд╣реЛ, рдкрд░рдорд╛рдгреБ рдпрд╛ рдлрд┐рд░ рдиреЛрдЯрдкреИрдб ++ред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди
рдПрдХ рдирдпрд╛ Vue.js рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд Vue CLI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдмрдирд╛рдПрдБ рдХрдорд╛рдВрдб vue create * app_name * рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
vue create mevn-app
рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдирдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд┐рд╕реНрддреГрдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП "рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ", рдирд┐рдореНрди рд╕реВрдЪреА рдмрдирд╛рдПрдВ:

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреАрдврд╝реА рдХреЗ рдЕрдВрдд рдореЗрдВ, рдПрдХ рд╕рдорд╛рди рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЖрдк рдКрдкрд░ рджрд┐рдП рдЧрдП npm рд░рди рд╕рд░реНрд╡ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ Vue CLI рдХреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:

рдЗрд╕ рд╕реНрдЯрд╛рд░реНрдЯ рдкреЗрдЬ рдореЗрдВ Vue Router рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ (рд╢реАрд░реНрд╖ рдкрд░ рджреЛ рд▓рд┐рдВрдХ), рд╕реНрдерд╛рдкрд┐рдд CLI рдкреНрд▓рдЧрдЗрдиреНрд╕, рд╕рд╛рде рд╣реА рдкреНрд░рд▓реЗрдЦрди, Vue рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдФрд░ рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдВрдХ рд╣реИрдВред
рддреЛ рдЕрдм рдмрдирд╛рдИ рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдкрджрд╛рдиреБрдХреНрд░рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

- рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕ - рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ред рдЖрдорддреМрд░ рдкрд░, рдЗрд╕реЗ рдЧрд┐рдЯ рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕рдХреА рдорд╛рддреНрд░рд╛ рдХрднреА-рдХрднреА рдмрд╣реБрдд рдмрдбрд╝реЗ рдЖрдХрд╛рд░ рддрдХ рдкрд╣реБрдБрдЪ рдЬрд╛рддреА рд╣реИред
- package.json рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬреЛ рдмрд╣реБрдд рд╣реА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ node_modules рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╕реЗ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИред рдЗрд╕рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ (рдирд╛рдо, рд▓реЗрдЦрдХ, рд╕рдВрд╕реНрдХрд░рдг) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рдПрдирдкреАрдПрдо рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рднреА рд╕реНрдерд╛рдкрд┐рдд рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рднреА рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реЛрддреА рд╣реИрдВред рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдкреНрд░рдореБрдЦ рдореВрд▓реНрдпреЛрдВ "рдирд┐рд░реНрднрд░рддрд╛" (рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдирд┐рд░реНрднрд░рддрд╛) рдФрд░ "рд╡рд┐рдХрд╛рд╕ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛" (рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдирд┐рд░реНрднрд░рддрд╛) рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред рдпрд╛рдиреА рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдХрд┐рд╕реА рднреА рдорд╢реАрди рдкрд░ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдХреЗрд╡рд▓ npm i рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рдеред рдЖрдк рдиреЛрдб_рдореЙрдбреНрдпреВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ npm i рдХрдорд╛рдВрдб рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рдореЗрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ: рдпрд╣ рдЙрди рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдЦреАрдВрдЪ рд▓реЗрдЧрд╛ рдЬреЛ рдкреИрдХреЗрдЬ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИрдВред рдлрд┐рд░ рд╕реЗред
- package-lock.json рдкреВрд░реЗ рдирд┐рд░реНрднрд░рддрд╛ рдкреЗрдбрд╝ рдХрд╛ рдПрдХ рд╕реНрдиреИрдкрд╢реЙрдЯ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдХреБрд▓ рдореЗрдВ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВред рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рдкреИрдХреЗрдЬ-рд▓реЙрдХ.рдЬреЙрди рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдкреИрдХреЗрдЬ, рдЗрд╕рдХреЗ рд╕рд╛рде jquery рдкреИрдХреЗрдЬ рдХреЛ рдЦреАрдВрдЪ рджреЗрдЧрд╛ред рдЬреЗрдХрд░реА рдкреИрдХреЗрдЬ.рдЬрд╕рди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЕрд░реНрдерд╛рдд рдЖрдкрдХреЛ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХреЛ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд "рдирд┐рд░реНрднрд░рддрд╛" рдореЗрдВ jquery рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред
- babel.config.js рдПрдХ рдлрд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирд┐рдпрдо (рдкреНрд░реАрд╕реЗрдЯ) рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Babel рд╕реАрдЦрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрдмреЗрд▓ рдПрдХ рдХреЛрдб рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯрд░ рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рд╖рд╛ рдореЗрдВ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ рдЙрддреНрдкрд╛рджрди рдкрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрдкрдиреЗ рджреБрднрд╛рд╖рд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдирдпрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрднреА рднреА рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдмреИрдмреЗрд▓ рдореМрдЬреВрдж рд╣реИ: рдпрд╣ рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдХреЛрдб рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдордЭрддреЗ рд╣реИрдВред рдпрд╛рдиреА рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдЖрдк рдПрдХ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдмрд╛рдмреЗрд▓ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рджреВрд╕рд░рд╛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИ - '@ vue / app'ред
- Postcss.config.js - PostCSS рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ред рдпрд╣ рдПрдХ рд╕реАрдПрд╕рдПрд╕ рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЯреВрд▓ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рд╕реАрдПрд╕рдПрд╕ рдХреЛ рдХрдИ рд╢рд╛рдВрдд рддрд░реАрдХреЛрдВ рд╕реЗ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрд╕рд░реНрдЧ рдЬреЛрдбрд╝рдирд╛, рдХреЛрдб рдбрд┐рдЬрд╛рдЗрди рдорд╛рдирдХ рдФрд░ рдХрдИ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдиреБрдкрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ред рдпрд╣ Vue CLI рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдм рддрдХ рдХреЗрд╡рд▓ рдЙрдкрд╕рд░реНрдЧ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдо рд╣реИрдВ, рдЬреЛ рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ред
- Browserlist.rc - рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдЕрдВрддрд┐рдо 2 рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рджреБрдирд┐рдпрд╛ рднрд░ рдореЗрдВ 5% рд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВ, рдЬреЛ рдХрд┐ рд╕рдВрд╕реНрдХрд░рдг 8 рд╕реЗ рдиреАрдЪреЗ рдХреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдорд╛рд╡реЗрд╢реА рд╣реИред
- README.md - рдорд╛рд░реНрдХрд╛рдбрд╛рдЙрди рдореЗрдВ рд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рд▓реА рдПрдХ рдлрд╝рд╛рдЗрд▓ - рдПрдХ рд╣рд▓реНрдХреЗ рдорд╛рд░реНрдХрдЕрдк рднрд╛рд╖рд╛, рдЬреЛ рдкрд╛рда рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдкрдардиреАрдп рдФрд░ рдЖрд╕рд╛рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд┐рд╡рд░рдг, рдореБрдЦреНрдп рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА, рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрджреЗрд╢ рдЖрджрд┐ рд╣реЛрддреЗ рд╣реИрдВред
- src (рд╕реНрд░реЛрдд) - рд╡рд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рд╡рд┐рдХрд╛рд╕ рд╕реАрдзреЗ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рд╕рднреА рд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╣реЛрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕рдВрдкрддреНрддрд┐ / рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛, рдЬрд╣рд╛рдВ scss / css, js, рдлреЛрдВрдЯ, рдЪрд┐рддреНрд░ рдЖрджрд┐ рд░рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред Vue.js рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Webpack рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ: рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдХреЛрдб рдХреЛ рдПрдХ рд╣реА рд╡рд┐рдХреНрд░реЗрддрд╛ рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред dist / рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдЕрдВрджрд░ рдлрд╝рд╛рдЗрд▓ред рдпрд╣ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ .gitignor, рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдЗрдХрдЯреНрдареЗ рдЖрд╡реЗрджрди рднрдВрдбрд╛рд░ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИред рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕ рдХреА рддрд░рд╣, рдбрд┐рд╕реНрдЯ / рдХреЛ рдПрдХ рдПрдирдкреАрдПрдо рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ - рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬрд┐рд╕рдореЗрдВ рддреИрдпрд╛рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ html-рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИ рдФрд░, рдЖрдорддреМрд░ рдкрд░, рдЗрд╕рдХрд╛ рдЖрдЗрдХрди (favicon.ico)ред
рд╡рд┐рдХрд╛рд╕ рдХреА рд╢реБрд░реБрдЖрдд (рд╕рд╛рдордиреЗ)
рдЪреВрдВрдХрд┐ рд╣рдо Vue CLI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХреЛрдб рдХреЛ рдЕрд▓рдЧ html, css рдФрд░ js рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, vue рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдЕрд▓реМрдХрд┐рдХ рдирд╣реАрдВ рд╣реИ: vue рдлрд╛рдЗрд▓реЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреА рд╣реИрдВ:
<template> * HTML * </template> <script> * JavaScript * </script> <style> * Stylesheet * </style>
рдпрд╣ Vue рдШрдЯрдХреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдк рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд╕ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдЪреАрдиреА рд╣реИред рдпрд╣ рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдмрд╛рдж рдореЗрдВ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдмреЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
Vrc рдШрдЯрдХреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ src / рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, main.js рдФрд░ рд░реВрдЯрд░.js рдлрд╛рдЗрд▓реЗрдВ рднреА рд╣реИрдВред
Main.js рдореЗрдВ, Vue рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдПрдХ рдирдпрд╛ Vue рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ VUE рд╡рд░реНрдЧ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрдЪреБрдЕрд▓ DOM рд╕реНрддрд░ рдкрд░ рдЗрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддрддреНрд╡ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ - $ рдорд╛рдЙрдВрдЯ ("# рдРрдк")ред рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░, рдЖрдкрдХреЛ рдЖрдзрд╛рд░ HTML рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ HTML рддрддреНрд╡ рдХреА рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдПрдХ рдкрдВрдХреНрддрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рд░рд╛рдКрдЯрд░.рдЬреЗрдПрд╕ рдореЗрдВ, Vue- рд░рд╛рдЙрдЯрд░ рдкреИрдХреЗрдЬ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ Vue CLI рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕рднреА рдШрдЯрдХ рдЬреЛ рд░реВрдЯрд┐рдВрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред рд░реВрдЯрд┐рдВрдЧ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рд░рд╛рдЙрдЯрд░ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рд╕рд░рдгреА, рдЬрдм рдЗрд╕рдХреА рдЖрд╡реГрддреНрддрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ:
new Router({ routes: [ { path: '/', name: 'home', component: Home }, ... ] )
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЪрд▓рд┐рдП App.vue рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ Vue рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред рдлрд┐рд░ рдЖрдкрдХреЛ HelloWorld.vue рдХреЗ рд╕рд╛рде рдШрдЯрдХреЛрдВ / рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ рдШрдЯрдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдЖрдпрд╛рдд рдХреЛ рджреГрд╢реНрдпреЛрдВ / рд╣реЛрдо.рд╡реНрдпреВ рдХреЗ рдЕрдВрджрд░ рдирд┐рдХрд╛рд▓ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд╣рд╛рдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рд╡рд┐рдЪрд╛рд░ / рд╣реЛрдо.рд╡реНрдпреВ: <template> <div class="home"> <img alt="Vue logo" src="../assets/logo.png"> - <HelloWorld msg="Welcome to Your Vue.js App"/> </div> </template> <script> - import HelloWorld from '@/components/HelloWorld.vue' export default { name: 'home', components: { - HelloWorld } } </script>
рдЕрдм рдЖрд╡реЗрджрди рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рд▓рд┐рдВрдХ рдФрд░ рдЙрдирдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИрдВред рдЗрди рдкреГрд╖реНрдареЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдмрд╕ рдЗрд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд░реВрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
router.js: import Vue from 'vue' import Router from 'vue-router' import Home from './views/Home.vue' + import Thanks from './views/Thanks.vue' Vue.use(Router) export default new Router({ routes: [ { path: '/', name: 'home', component: Home }, - { - path: '/about', - name: 'about', - component: () => import( './views/About.vue') - } + { + path: '/thanks', + name: 'thanks', + component: Thanks + } ] })
рдЕрдм рд╣рдо рдШрдЯрдХреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рд░реВрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдирдпрд╛ рдзрдиреНрдпрд╡рд╛рдж рдШрдЯрдХ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдирдпрд╛ рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, About.vue рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдирд╛рдо рджреЗрдВред рдзрдиреНрдпрд╡рд╛рдж:
views / About.vue> рд╡рд┐рдЪрд╛рд░ / рдзрдиреНрдпрд╡рд╛рджред рдзрдиреНрдпрд╡рд╛рдж: <template> - <div class="about"> + <div class="thanks"> <h1>Thank you for your record!</h1> </div> </template>
рдФрд░ Home.vue рдмрджрд▓реЗрдВ: рдПрдХ рдРрд╕рд╛ рдлреЙрд░реНрдо рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рдирд╛рдо, рдИрдореЗрд▓, рдкрддрд╛ рдФрд░ рд▓рд┐рдВрдЧ рдЬреИрд╕реЗ рдбреЗрдЯрд╛ рднреЗрдЬреЗрдЧрд╛:
рд╡рд┐рдЪрд╛рд░ / рд╣реЛрдо.рд╡реНрдпреВ: <template> <div class="home"> - <img alt="Vue logo" src="../assets/logo.png"> + <form @submit.prevent="sendData"> + <div class="form-control"> + <label for="name">Name</label> + <input v-model="name" id="name" type="text"> + </div> + <div class="form-control"> + <label for="email">Email</label> + <input v-model="email" id="email" type="email"> + </div> + <div class="form-control"> + <label for="address">Address</label> + <input v-model="address" id="address" type="text"> + </div> + <div class="form-control"> + <label for="gender">Gender</label> + <span>Male <input v-model="gender" id="gender" type="radio" value="male"></span> + <span>Female <input v-model="gender" id="gender" type="radio" value="female"></span> + </div> + <input type="submit" class="send" value="Send"> + </form> </div> </template> <script> export default { name: 'home', - components: {} + data: function () { + return { + name: '', + email: '', + address: '', + gender: '', + + }, + methods: { + sendData() { + console.log(this.name, this.email, this.address, this.gender); + + } </script> + <style> + .form-control { + padding: 5px; + } + .form-control label { + display: block; + + .send { + margin: 5px + + </style>
рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдЬреЛ рднреНрд░рд╛рдордХ рд╣реЛ рд╕рдХрддреА рд╣реИ рд╡рд╣ рд╣реИ @ submit.prevent = "sendData"ред Vue рдореЗрдВ, рдШрдЯрдирд╛рдУрдВ рдХреЛ v-on: рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдХрд╛рдлреА рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо @ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╛рдиреА рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ v-on: submit.prevent = "sendData" рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдЖрдо рддреМрд░ рдкрд░ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ:
- v-on рдпрд╛ @ Vue рдХреЛ рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ;
- рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ - рдпрд╣ рджреА рдЧрдИ рдШрдЯрдирд╛ рд╣реИ (рд╕рдмрдорд┐рдЯ рдХреЗрд╡рд▓ рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реИред рдПрдХ рдмрдЯрди рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдХреНрд▓рд┐рдХ рдЗрд╡реЗрдВрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП - рдЗрдирдкреБрдЯ рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди);
- .prevent рдПрдХ рдИрд╡реЗрдВрдЯ рдореЙрдбрд┐рдлрд╝рд╛рдпрд░ рд╣реИ, рдЬреЛ рдирд┐рд╡рд╛рд░рдг () js рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрд╡реЗрдВрдЯ рдХреЛ рд░реЛрдХ рджреЗрддрд╛ рд╣реИ - рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдлреЙрд░реНрдоред рдкреНрд░рдкрддреНрд░ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдИрд╡реЗрдВрдЯ рдбреЗрдЯрд╛ рднреЗрдЬ рд░рд╣рд╛ рд╣реИ рдФрд░ рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЯрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдРрд╕реЗ рдореЛрдбрд┐рдлрд╛рдпрд░ рд╣реИрдВ рдЬреИрд╕реЗ .stop (рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрд╡реЗрдВрдЯ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛рдирд╛), .once (рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╡рд┐рдзрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛) рдФрд░ рдЕрдиреНрдпред
- SendData рдПрдХ рд╡рд┐рдзрд┐ (рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ рдлрд╝рдВрдХреНрд╢рди) рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╡реЗрдВрдЯ рдХреЗ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрдиреЗ рдкрд░ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЛ рдХреЛрд╖реНрдардХ () рдХреЛ рдХреЗрд╡рд▓ рддрднреА рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рд╡рд╣ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдкреБрдЯ рдкрд░ рдПрдХ рд╡реА-рдореЙрдбрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдпрд╣ рджреНрд╡рд┐-рдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рддрддреНрд╡реЛрдВ (рдЗрдирдкреБрдЯ, рдЪрдпрди, рдЯреЗрдХреНрд╕реНрдЯрд╛рд░рд┐рдпрд╛) рдХреЛ рдмрд╛рдВрдзрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдорд╛рди, рдЬрд╣рд╛рдВ v-model = "someText", рдореМрдЬреВрдж рд╣реЛрдиреЗ рдкрд░ рддреБрд░рдВрдд рдХреБрдЫText рдбреЗрдЯрд╛ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред
рдирд┐рд░реНрдпрд╛рдд рдХреА рдЧрдИ рд╡рд╕реНрддреБ рдореЗрдВ, рд╣рдо рдШрдЯрдХреЛрдВ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ Home.vue рдореЗрдВ рдмрд╛рд▓ рдШрдЯрдХ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдо рдбреЗрдЯрд╛ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдбреЗрдЯрд╛ рдореЗрдВ Vue рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЖрдк рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХреЗ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд┐рд░реНрдл рдореВрд▓реНрдп рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ - рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдорд╛рди рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЗрд╕реЗ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдпрд╣ Vue рдШрдЯрдХреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрдЯрд╛ рдЗрдирдкреБрдЯ рдорд╛рди рдирд╛рдо, рдИрдореЗрд▓, рдкрддрд╛ рдФрд░ рд▓рд┐рдВрдЧ рд╣реИред
рдбреЗрдЯрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╡рд┐рдзрд┐ рдЧреБрдг рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рднреА рддрд░реАрдХреЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╡рд┐рдзрд┐ рд▓рд┐рдЦреА рдЧрдИ рд╣реИ - рд╕реЗрдВрдбрдбрд╛рдЯрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдКрдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдлрд╝реЙрд░реНрдо рдЬрдорд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдВрдзрд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рдЕрднреА рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЗрдирдкреБрдЯ рдорд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдФрд░ рдШрдЯрдХ рдХрд╛ рдЕрдВрддрд┐рдо рднрд╛рдЧ рд╢реИрд▓реА рд╣реИред рд╢реИрд▓рд┐рдпрд╛рдБ рдпрд╣рд╛рдБ рд▓рд┐рдЦреА рдЧрдИ рд╣реИрдВ рддрд╛рдХрд┐ рдлрд╝реЙрд░реНрдо рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛред
рдЪрд▓реЛ рдЕрдм рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдЦреЛрд▓реЗрдВред рд╣рдорд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдлреЙрд░реНрдо рд╣реИ рдЬрд┐рд╕реЗ рднрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕реЗрдВрдб рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рднреЗрдЬреЗрдВред


рднреЗрдЬрддреЗ рд╕рдордп, рдкреГрд╖реНрда рдкреБрдирдГ рд▓реЛрдб рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рдкрддреНрд░ рдорд╛рди рд░реАрд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рджреЗрдЦрдиреЗ рдХрд╛ рд╕рдордп рд╣реИ (Ctrl + Shift + I):

рдпрджрд┐ рдЖрдк рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЙрд╕реА рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде - рдмрдзрд╛рдИ рд╣реЛ, рддреЛ рдЖрдкрдиреЗ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рдкреВрд░реНрдг-рдкреВрд░реНрдг Vue рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрд╛ рдерд╛ред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкрд░рд┐рдгрд╛рдо рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрднреА рдХреЗ рд▓рд┐рдП, Vue рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣реИ рдФрд░ Node.js рдкрд░ рд╕рд░реНрд╡рд░ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВ рддрд╛рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реЛред
рдирд┐рд░рдВрддрд░ рд╡рд┐рдХрд╛рд╕ (рдмреИрдХреЗрдВрдб)
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ npm рд╕рдВрдХреБрд▓ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
npm install -S express morgan mongoose
-S рд╕реНрд╡рд┐рдЪ npm рдХреЛ рдЗрди рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред рдирд┐рд░реНрднрд░рддрд╛ рд╕рд░рдгреА рдХреЗ рдПрдХ рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВред рдЖрдЙрдЯрдкреБрдЯ рдПрдХ рд╕рдорд╛рди рд╕рдВрджреЗрд╢ рд╣реЛрдЧрд╛:

- Express.js Node.js рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдм рдПрдкреНрд▓реАрдХреЗрд╢рди рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИ рдЬрд┐рд╕реЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдиреНрдпреВрдирддрд░ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд▓рдЧ-рдЗрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
- рдореЙрд░реНрдЧрди - рд╕рд░реНрд╡рд░ рдкрд░ HTTP рдЕрдиреБрд░реЛрдз рд▓реЙрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдХреЗрдЬред
- Mongoose Node.js. рдХреЗ рддрд╣рдд рдХрд┐рдП рдЧрдП MongoDB рдХреЗ рд▓рд┐рдП ORM (рдСрдмреНрдЬреЗрдХреНрдЯ-рд░рд┐рд▓реЗрд╢рдирд▓ рдореИрдкрд┐рдВрдЧ) рд╣реИред
рдлрд┐рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ - рд╕рд░реНрд╡рд░ рдореЗрдВ рдПрдХ рдФрд░ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрди рдкрджрд╛рдиреБрдХреНрд░рдо рд╣реЛ:

server.js - рдпрд╣ Node.js рд╕рд░реНрд╡рд░ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рдиреЛрдб рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдк рд╕рд░рд▓ рдХреЛрдб рдпрд╣рд╛рдБ рд▓рд┐рдЦрдХрд░ рдиреЛрдб рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
server / server.js console.log('Hello, world!');
рдлрд┐рд░ рд╕рд░реНрд╡рд░ рдХреА рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рд╕реЗ рдиреЛрдб рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдлрд╝рд╛рдЗрд▓ рдФрд░ рдЙрд╕рдХреЗ рдирд╛рдо рдХреЗ рд▓рд┐рдП рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:
node server/server.js > Hello, world!
рд╣рдо server.js рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╡рд┐рдХрд╛рд╕ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкрд╣рд▓реЗ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░реЗрдВ (рдПрдХреНрд╕рдкреНрд░реЗрд╕, рдореЙрд░реНрдЧрди рдФрд░ рдореЛрдирдЧреЛрдЬрд╝), рдФрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рднреА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ:
server / server.js + const express = require('express'); + const mongoose = require('mongoose'); + const morgan = require('morgan'); + const path = require('path'); + + const app = express();
рдпрджрд┐ рдЖрдкрдХреЛ рдХрднреА рднреА const рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИ: const рд╕реЗ рдкрд╣рд▓реЗ, рджреЛ рд╡реЗрд░рд┐рдПрдмрд▓ рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ (рджреВрд╕рд░рд╛ рд▓реЗрдЯ) var, ES6 рд╕реНрдЯреИрдВрдбрд░реНрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛ред рдЗрд╕рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдЪрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдЧреЗ рдЪрд░ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд░ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред
рдЖрд╡рд╢реНрдпрдХрддрд╛ () Node.js рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рдПрдХ рдХрд╛рд░реНрдп рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдореЙрдбреНрдпреВрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рджреЛрдиреЛрдВ рджреЗрд╢реА рдФрд░ рдПрдирдкреАрдПрдоред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдордиреЗ рдкрде рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ - рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реНрдпрд╛рд╡рд░рдг рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред
const рдПрдкреНрд▓рд┐рдХреЗрд╢рди = рдПрдХреНрд╕рдкреНрд░реЗрд╕ () - рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдЖрд╡реЗрджрди рдХрд╛ рдкреНрд░рд╛рд░рдВрднред рдЕрдЧрд▓рд╛, рд╣рдо рдРрдк рдЪрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рдпрд╣ рд╣рдорд╛рд░рд╛ рд╕рд░реНрд╡рд░ рд╣реЛрдЧрд╛ред
рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдпрд╣ рдЫреЛрдЯрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ - рдкреЛрд░реНрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди 3000 (рдпрд╛ рдХрд┐рд╕реА рднреА рдЙрдкрд▓рдмреНрдз рдкреЛрд░реНрдЯ) рдХреЛ рд▓реЗрдВред рд╣рдо рдмрдВрджрд░рдЧрд╛рд╣ рдХреЛ рд╕реБрдирдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреНред рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░реЗрдВ:
server / server.js ... + app.set('port', 3000); + + app.listen(app.get('port'), () => { + console.log(`[OK] Server is running on localhost:${app.get('port')}`); + });
рд╕реЗрдЯ рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ, рдЬреЛ рддрдм рдкреНрд░рд╛рдкреНрдд рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рдкрд░ рдкрд╣реБрдВрдЪрдХрд░ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдо рддрдм рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рд╣рдо рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ: app.get ('port') 3000 рдХрд╛ рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рди рд▓реМрдЯрд╛рдПрдЧрд╛ред рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рддреАрд░ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдХрднреА рднреА рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИ: рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ () => {} рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд▓рдЧрднрдЧ рдПрдХ рдкреВрд░реНрдг рдлрд╝рдВрдХреНрд╢рди () {} рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╣реИ, рддреЛ рдПрдХ: рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╛рд╕ рдЗрд╕ (рдлрд╝рдВрдХреНрд╢рди) рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ Node.js рд╡рд╛рддрд╛рд╡рд░рдг рдФрд░ рд╡рд┐рдВрдбреЛ рдореЗрдВ), рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рд╕реНрд╡рдпрдВ, рдЕрд░реНрдерд╛рддред рд╕рдорд╛рд░реЛрд╣ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗрд╡рд▓ рдХрдВрд╕реЛрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ: 3000ред рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЕрдВрджрд░ $ {...} рд▓рд┐рдЦрдирд╛ рдЖрдкрдХреЛ рдЗрд╕рдореЗрдВ рдПрдХ рдкрд░рд┐рдХрд▓рд┐рдд рдорд╛рди рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, app.get () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд░рд┐рдЯрд░реНрди рдорд╛рдиред
рдЕрдм, рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: 3000 рдкрддрд╛ рдЦреЛрд▓рддреЗ рд╣реБрдП, рдЖрдкрдХреЛ тАЬCannot GET /тАЭ рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдмрд╛рдж рдореЗрдВ рд╣рдо рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреЗ рдмрдЬрд╛рдп рд╣рдорд╛рд░реЗ Vue.js рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдирд╛ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо MongoDB рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВрдЧреЗ:
server / server.js ... app.set('port', 3000); + + mongoose.connect('mongodb://localhost:27017/mevn-course', { useNewUrlParser: true }) + then(db => console.log('[OK] DB is connected')) + catch(err => console.error(err)); + + app.use(express.json()); + app.use(express.urlencoded({extended: false})); + app.use(morgan('dev')); ...
Mongoose.connect () рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдлрд┐рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ MongoDB рдЦреБрдж рдХреЛ рд╕рдХреНрд░рд┐рдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ - рдЖрдзрд╛рд░ рдкрддрд╛ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ "mongodb: // localhost: 27017 / mevn-course" рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ {useNewUrlParser: true} рд╣реИред
useNewUrlParser MongoDB рд╕рдВрд╕реНрдХрд░рдг 3.1.0+ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЖрдк 3.1.0 рд╕реЗ рдХрдо рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
.then рдФрд░ .catch рдРрд╕реЗ рддрд░реАрдХреЗ рд╣реИрдВ рдЬреЛ рдХреНрд░рдорд╢рдГ рдкреВрд░реНрддрд┐ рдФрд░ рд╡рд┐рдлрд▓рддрд╛ рдкрд░ рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрдВрджрд░, рдПрдХ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ db рдХреЛ .then, рдФрд░ .catch рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЙрдорд┐рд╕ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдпреЗ рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐рдпрд╛рдБ рдХрдВрд╕реЛрд▓ рдХреЛ рдЬрд╛рдирдХрд╛рд░реА рдореБрджреНрд░рд┐рдд рдХрд░рддреА рд╣реИрдВ: рдпрд╛ рддреЛ рдПрдХ рд╕рдлрд▓ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред
App.use () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпреЗ рдРрд╕реЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдСрдмреНрдЬреЗрдХреНрдЯ (req), рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ (Res), рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ "рдЕрдиреБрд░реЛрдз-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛" рдЪрдХреНрд░ рдореЗрдВ рдЕрдЧрд▓реЗ рдордзреНрдпрд╡рд░реНрддреА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдлрд╝рдВрдХреНрд╢рди (рдЕрдЧрд▓рд╛) рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рд╣рдо рдбреЗрдЯрд╛рд╡реЗрдпрд░ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ json рдФрд░ urlencoded рд╣реИ) рдФрд░ рдореЙрд░реНрдЧрди рдкреИрдХреЗрдЬ рдХреЛ рдкрд╣рд▓реЗ 'рджреЗрд╡' рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ" рдореЛрдб рдореЗрдВ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реЗ рдПрдХреНрд╕рдкреНрд░реЗрд╕рд╡реЗрдпрд░ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЕрдм рд╕рд░реНрд╡рд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ json рдФрд░ urlencoded рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд▓реЙрдЧ рдЗрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд┐рд░ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ:
рдиреЛрдб рд╕рд░реНрд╡рд░ / server.js > [OK] Server is running on localhost:3000 > [OK] DB is connected
рдЕрдм, рдЕрдЧрд░ рд╣рдо рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ: рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ 3000 рдкрддрд╛, рд╕рднреА рдЕрдиреБрд░реЛрдз рдХрдВрд╕реЛрд▓ рдореЗрдВ рд▓реЙрдЧ рдЗрди рд╣реЛрдВрдЧреЗ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬреАрдИрдЯреА:

рд╣рдо рд░рд┐рдХреЙрд░реНрдб рдореЙрдбрд▓ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд▓рдЧреЗ рд░рд╣реЗрдВрдЧреЗред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рдП (рдЗрд╕реЗ рдкреНрд░рд╛рд░реВрдк рд╕реНрдХреАрдорд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред Vue рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рд╣рдорд╛рд░рд╛ рдлреЙрд░реНрдо рдирд╛рдо, рдИрдореЗрд▓, рдкрддрд╛ рдФрд░ рд▓рд┐рдВрдЧ рднреЗрдЬрддрд╛ рд╣реИ - рдпрд╣ рд╕рдм рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рдХрд╛рд░ "рдкрдВрдХреНрддрд┐" рдХреЗ 4 рдлрд╝реАрд▓реНрдб рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдПрдБ:
рд╕рд░реНрд╡рд░ / рдореЙрдбрд▓ / Record.js + const mongoose = require('mongoose'); + const { Schema } = mongoose; + + const Record = new Schema({ + name: String, + email: String, + address: String, + gender: String, + }); + + module.exports = mongoose.model('Record', Record);
рд╣рдо рдорд╛рдирдЧреЛ рдкреИрдХреЗрдЬ рдХрд╛ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдХреАрдорд╛ рд╡рд░реНрдЧ рд╕реЗ рдорд╛рдирдЧреЛ рд╢реНрд░реЗрдгреА рдХреЗ рдорд╛рди рдХреЛ рд╕реНрдХреАрдорд╛ рдЪрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрдХреЗрддрди "рдХреЙрдиреНрд╕реНрдЯ {рд╕реНрдХреАрдорд╛} = рдореЛрдВрдЧреЛрдЬ" рдХреЛ рдИрдПрд╕ 6 рдореЗрдВ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ "рдХреЙрдиреНрд╕реНрдЯ рд╕реНрдХреАрдорд╛ = рдореЛрдВрдЧреЛрдЬреЛрд╕реЗрдорд╛" рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдЕрдЧрд▓рд╛, рд╕реНрдХреАрдорд╛ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд░рд┐рдХреЙрд░реНрдб рдЧреБрдгреЛрдВ рдХреЗ рдирд╛рдо рдФрд░ рдЙрдирдХреЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ рд╣реИред
"Module.exports = ..." рдПрдХ рдирд┐рд░реНрдпрд╛рдд рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реИред рдпрд╛рдиреА рдЬрдм рд╣рдо рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдпрд╛рдд рдкрд░рд┐рдгрд╛рдо mongoose.model ('рд░рд┐рдХреЙрд░реНрдб', рд░рд┐рдХреЙрд░реНрдб) рд╣реЛрдЧрд╛ред
рдЬрдм рдореЙрдбрд▓ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдПрдкреАрдЖрдИ рд░реВрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдШрдЯрдХ рдмрд╛рддрдЪреАрдд рдХреА рдПрдХ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рд╢реИрд▓реА рдХреЗ рд░реВрдк рдореЗрдВ, REST рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
REST API рдЙрди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирд╕реЗ рдбреЗрд╡рд▓рдкрд░ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИред REST API рдХреЙрд▓рд┐рдВрдЧ рдореЗрдердб CRUD (рдХреНрд░рд┐рдПрдЯ, рд░реАрдб, рдЕрдкрдбреЗрдЯ, рдбрд┐рд▓реАрдЯ) рдореЗрдердбреЛрд▓реЙрдЬреА рд╣реИ, рдЕрд░реНрдерд╛рдд рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, POST, PUT, DELETEред рд░реВрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:рд╕рд░реНрд╡рд░ / рдореЙрдбрд▓ / Record.js + const express = require('express'); + const router = express.Router(); + + const Record = require('../models/Record'); + + router.get('/', async (req, res) => { + res.json(await Record.find()); + }); + + router.post('/', async (req, res) => { + const record = new Record(req.body); + await record.save(); + res.json({state: 'success'}); + }); + + router.get('/:id', async (req, res) => { + res.json(await Record.findById(req.params.id)); + }); + + router.put('/:id', async (req, res) => { + await Record.findByIdAndUpdate(req.params.id, req.body); + res.json({state: 'updated'}); + }); + + router.delete('/:id', async (req, res) => { + await Record.findByIdAndRemove(req.params.id); + res.json({state: 'deleted'}); + }); + + module.exports = router;
Express . Record, . . async/await тАФ . , callback- . async/await, , , , , , .
:
router.get('/', req, res) => { res.json(Record.find() .then((data) => { return data; })); });
:
router.get('/', async (req, res) => { res.json(await Record.find()); });
router , .get(), .post(), .put() .delete() , . callback- req тАФ res тАФ . , POST, , Record, , find(), findById(), findByIdAndUpdate(), findByIdAndRemove(). JSON, , res.json({state: 'success'}). POST -: Record, , Vue-, , save(), JSON. , : get, put delete тАФ :id. , , тАЬ/тАЭ, , req.params.id , . id.
, , id , Schema name, email, address gender? : MongoDB , _id.
, server.js:
server/server.js ... app.use(morgan('dev')); + + app.use('/api/records', require('./routes/records'));
, /api/records. ., POST- , (, email, )
localhost :3000/api/records.
тАФ API. Postman. API.
GET-
localhost :3000/api/records :

POST- , :

, JSON, ,
{тАЬstateтАЭ: тАЬsuccessтАЭ}. GET- :

, (UPDATE, DELETE GET one).
backend- , тАФ
localhost :3000/. :
server/server.js ... app.use('/api/records', require('./routes/records')); + app.use('/', express.static(path.join(__dirname, '../dist')));
(frontend)
Vue-, API, . , , sendData, , , npm axios тАФ npm i -S axios.
views/Home.vue ... <script> + import axios from 'axios'; ... methods: { + async sendData() { - console.log(this.name, this.email, this.address, this.gender); + console.log(await axios({ + url: 'http://localhost:3000/api/records', + method: 'post', + data: { + name: this.name, + email: this.email, + address: this.address, + gender: this.gender + + })); } }
Axios рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╣рдо рдкрд░рд┐рдЪрд┐рдд async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрдХреНрд╖реАрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ (рдпреВрдЖрд░рдПрд▓, рд╡рд┐рдзрд┐, рдбреЗрдЯрд╛)ред рдЬрдм рд╡рд┐рдзрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИ, рддреЛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИредрдЕрдм npm рд░рди рдмрд┐рд▓реНрдб рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╡реАрдпреВ рддреИрдпрд╛рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбрд┐рд╕реНрдЯрд░реНрдм рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдЯрд┐рдХ рдлрд╛рдЗрд▓реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ: npm run build
localhost :3000/. , Vue-. Send. :

. , , , .
: ; , , console.log():
views/Thanks.vue <template> <div class="thanks"> <h1>Thank you for your record!</h1> + router-link to="/">Home</router-link> </div> </template>
views/Home.vue ... async sendData() { - console.log(await axios({ + await axios({ url: 'http://localhost:3000/api/records', method: 'post', data: { name: this.name, email: this.email, address: this.address, gender: this.gender } - })); + }); + this.$router.push('thanks'); } ...
App.vue ... <div id="app"> - <div id="nav"> - <router-link to="/">Home</router-link> | - <router-link to="/thanks">About</router-link> - </div> <router-view/> </div> ...
Vue- , npm run build, , .
(backend)
рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╕рд░реНрд╡рд░ рдкреНрд░рддреНрдпреЗрдХ рдИ-рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдирдпрд╛ рд░рд┐рдХреЙрд░реНрдб рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдИ-рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рднреЗрдЬреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо Node.js - Nodemailer рдХреЛ рдкрддреНрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ: npm рд╕реНрдерд╛рдкрд┐рдд -S рдиреЛрдбреЛрдбреАрд▓рд░ред рдЕрдм рдЬрдм Nodemailer рд╕реНрдерд╛рдкрд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ server.js: рд╕рд░реНрд╡рд░ / рдорд╛рд░реНрдЧреЛрдВ / record.js рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реЗрдВ ... const router = express.Router(); + const nodemailer = require('nodemailer'); ... router.post('/', async (req, res) => { const record = new Record(req.body); await record.save(); + const output = ` + <p>You have a new message from MEVN-course:</p> + <ul> + <li>name: ${req.body.name}</li> + <li>email: ${req.body.email}</li> + <li>address: ${req.body.address}</li> + <li>gender: ${req.body.gender}</li> + </ul> + `; + let transporter = nodemailer.createTransport({ + host: 'smtp.gmail.com', + port: 587, + secure: false, + auth: { + user: 'your_email@gmail.com', + pass: 'your_password' + + }); + let mailOptions = { + from: '"MEVN-course " <your_email@gmail.com>', + to: 'some_email@gmail.com', + subject: `MEVN-course | New message`, + text: req.body.name, + html: output + }; + transporter.sendMail(mailOptions, (error, info) => { + if (error) { + return console.log(error); + + console.log('Message sent: %s', info.messageId); + console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info)); + }); res.json({state: 'success'}); });
, . -, nodemailer. -, post , , . output, html-. transporter, createTransport nodemailer, тАФ : , , . , Gmail, , Gmail-. mailOptions, тАФ : , , . , sendMail transporter, .
. , , , , , . :

:

рдкрд░рд┐рдгрд╛рдо
. :
- Vue-;
- Node + Express ;
- MongoDB;
- npm;
- ;
- email- ;
- http-;
- CRUD REST API;