αžšαž”αŸ€αž”αžœαŸαž…αžαŸ’αž…αž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ VueJS + NodeJS + MongoDB αž“αŸ…αž€αŸ’αž“αž»αž„ Docker

αžšαž”αŸ€αž”αžœαŸαž…αžαŸ’αž…αž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ VueJS + NodeJS + MongoDB αž“αŸ…αž€αŸ’αž“αž»αž„ Docker
αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž™αž›αŸ‹αž”αžΆαž“αž–αžΈαž’αžαŸ’αžαž”αž‘αž˜αž»αž“αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž’αŸ’αžœαžΎαž€αžΆαžšαž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαŸ” αžαŸ’αž„αŸƒαžŠαŸ†αž”αžΌαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αžαŸ’αž˜αžΈαž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαžŠαžΎαžšαžαžΆαž˜αžœαž·αž’αžΈαžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ– αž’αŸ’αž“αž€αž“αŸ…αž–αžΈαž€αŸ’αžšαŸ„αž™αž’αž„αŸ’αž‚αž»αž™αž‡αžΆαž˜αž½αž™αžαŸ’αž‰αž»αŸ† αž αžΎαž™αž’αŸ’αžœαžΎαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžœαŸαž‘αž˜αž“αŸ’αžαžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αž‘αžΎαž„ αž“αž·αž„αžŠαžΆαž€αŸ‹αž±αŸ’αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” Docker αž‚αžΊβ€‹αž˜αž·αž“β€‹αž’αžΆαž…β€‹αžαŸ’αžœαŸ‡β€‹αž”αžΆαž“β€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž’αŸ’αž“αž€β€‹αž’αž—αž·αžœαžŒαŸ’αžαž“αŸβ€‹αž•αŸ’αž“αŸ‚αž€β€‹αžαžΆαž„β€‹αž˜αž»αžβ€‹αž–αŸ’αžšαŸ„αŸ‡... αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž€αŸ’αžšαŸ„αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž‡αž½αžšαžŠαŸαž’αŸ†αž‘αžΌαž›αžΆαž™αž“αŸƒ PHP/Java/Python/C# stacks αž αžΎαž™αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž˜αž»αžαž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžšαŸ†αžαžΆαž“ backend αžšαžΆαž›αŸ‹αž–αŸαž›αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αž‘αžΎαž„ αž“αž·αž„αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž“αŸ„αŸ‡αž‘αŸαŸ” αž˜αžΆαž“αžαŸ‚αž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αž˜αž½αž™αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αžƒαžΎαž‰αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαžšαžœαžΆαž„ Docker-Jenkins αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž”αŸ’αžšαž€αž”αžŠαŸ„αž™αžαž˜αŸ’αž›αžΆαž—αžΆαž– αž€αŸ†αžŽαžαŸ‹αž αŸαžαž» αž“αž·αž„αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ”

αž’αžαŸ’αžαž”αž‘αž›αž˜αŸ’αž’αž·αžαž‡αžΆαž…αŸ’αžšαžΎαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž’αŸ†αž–αžΈ Docker αŸ” αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž“αžΉαž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž€αžΆαžšαžŠαžΆαž€αŸ‹αž±αŸ’αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αžΌαžœ Single Page Application αžŠαŸ„αž™αž”αŸ’αžšαžΎ VueJS/Vue Router αž•αŸ’αž“αŸ‚αž€αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹ RESTful API αž‡αžΆαž˜αž½αž™ NodeJS αž αžΎαž™ MongoDB αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” Docker Compose αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹ αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αž»αž„αžαžΊαž“αŸαžšαž…αŸ’αžšαžΎαž“αŸ”

αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆ Docker αžαŸ’αžšαžΌαžœαž€αžΆαžš

Docker αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž’αŸ’αžœαžΎαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αž˜αŸ’αž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸƒαž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž›αŸ‚αž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„ αž¬αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž—αžΆαž–αž˜αž·αž“αž†αž”αž‚αŸ’αž“αžΆαž“αŸƒαž€αŸ†αžŽαŸ‚αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžšαž”αžŸαŸ‹αž‚αžΆαžαŸ‹αž‘αŸ€αžαž αžΎαž™αŸ” αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž‚αžΊαžŠαŸ†αž‘αžΎαž„ Docker αž αžΎαž™αžœαžΆαž™αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ 1-2 αž‘αŸ…αž€αŸ’αž“αž»αž„αž€αž»αž„αžŸαžΌαž›αŸ” αž˜αž’αŸ’αž™αŸ„αž”αžΆαž™αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αŸ†αž•αž»αžαžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžœαžΆαž‚αžΊαž“αŸ…αž›αžΎαž›αžΈαž“αž»αž…αŸ”

αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜

αžŠαŸ†αž‘αžΎαž„ Dockers αž“αž·αž„ Docker αžαŸ‚αž„

αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαž

αž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαžαžαž―αž€αžŸαžΆαžšαž…αŸ†αž“αž½αž“ 2 αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ” αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜ .yml αž‚αžΊαž‡αžΆαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹ សរសេរ DockerαžŠαŸ‚αž›αž€αž»αž„αžαžΊαž“αŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹ αž“αž·αž„αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αŸ”
Docker-compose.ymlαŸ–

version: "3"
services:
  mongo:
    container_name: mongo
    hostname: mongo
    image: mongo
    ports:
      - "27017:27017"
  server:
    build: server/
    #command: node ./server.js #здСсь ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ CMD ΠΈΠ· Dockerfile Π² /server
    ports:
      - "3000:3000"
    links:
      - mongo
  client:
    build: client/
    #command: http-server ./dist #здСсь ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ CMD ΠΈΠ· Dockerfile Π² /client
    network_mode: host
    ports:
      - "8089:8089"
    depends_on:
      - server

αž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ 3 αž“αŸ…αž€αŸ’αž“αž»αž„ Docker: αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ NodeJS, MongoDB αž“αž·αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‹αž·αžαž·αžœαž“αŸ’αžαž“αŸ…αž€αŸ’αž“αž»αž„ Vue αŸ” αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αžŠαžΎαž˜αŸ’αž”αžΈαž—αŸ’αž‡αžΆαž”αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ. αžŠαžΎαž˜αŸ’αž”αžΈαž—αŸ’αž‡αžΆαž”αŸ‹ MongoDB αž‡αžΆαž˜αž½αž™ server API αžŸαžΌαž˜αž”αŸ’αžšαžΎ αž—αŸ’αž‡αžΆαž”αŸ‹ mongo. αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ αž˜αŸ‰αž»αž„αž αŸ’αž‚αŸ„ - αžˆαŸ’αž˜αŸ„αŸ‡αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αŸ”

αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ VueJS

αž“αŸ…αž€αŸ’αž“αž»αž„αžαžαž―αž€αžŸαžΆαžš / αž’αžαž·αžαž·αž‡αž“ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αžΊαž•αŸ’αž’αŸ‚αž€αž›αžΎ VueJS αŸ” αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αž”αŸ’αžšαžΎ វឺ αž‚αŸ’αž›αžΈ. αž“αŸ…αž–αŸαž›αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž’αžαž·αžαž·αž‡αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž‡αžΆαžŸαŸ†αžŽαž»αŸ†αž“αŸƒαž―αž€αžŸαžΆαžšαž‹αž·αžαž·αžœαž“αŸ’αžαž“αŸ…αž€αŸ’αž“αž»αž„αžαž / ឌីស. Dockerfile αž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαžŸαŸ†αžŽαž»αŸ†αž“αŸƒαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αŸ–

FROM node:10
WORKDIR /client
COPY ./package*.json ./
RUN npm install
RUN npm install -g http-server
COPY . .
RUN npm run build
EXPOSE 8081
CMD ["npm", "test:dev"]

αžŸαžΌαž˜αž…αŸ†αžŽαžΆαŸ†αžαžΆ package.json αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž˜αŸ’αž›αž„ αž“αž·αž„αžŠαŸ†αž‘αžΎαž„αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž–αžΈαž―αž€αžŸαžΆαžšαž‚αž˜αŸ’αžšαŸ„αž„αžŠαŸ‚αž›αž“αŸ…αžŸαž›αŸ‹αŸ” αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž αŸαžαž»αž•αž›αž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž˜αžΆαžαž·αž€αžΆαž“αŸƒαžαž /node_modules αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αž»αž€αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž“αŸ…αž–αŸαž›αžŸαžΆαž„αžŸαž„αŸ‹αž˜αŸ’αžαž„αž‘αŸ€αžαŸ” αž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž“αžΈαž˜αž½αž™αŸ—αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž–αžΈαž‚αŸ’αž“αžΆαŸ”

αž‡αžΆαž…αž»αž„αž€αŸ’αžšαŸ„αž™ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αž»αž„αžαžΊαž“αŸαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž· npm run dev. αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„ package.jsonαŸ–


"scripts": {
	 "test:dev": "http-server dist -p 8081 -c 1 --push-state"
}

αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž―αž€αžŸαžΆαžšαž–αžΈαžαžαž―αž€αžŸαžΆαžš / ឌីស, αžŠαŸ†αž‘αžΎαž„αž‡αžΆαžŸαž€αž› http-serverαž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„ dev-dependencies αž€αž‰αŸ’αž…αž”αŸ‹ spa-http-serverαžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™ Vue Router αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžΆαž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ” αž‘αž„αŸ‹ --push-state αž”αŸ’αžαžΌαžšαž‘αž·αžŸαž‘αŸ… index.html αŸ” αž‘αž„αŸ‹ -c αžŠαŸ‚αž›αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒ 1 αžœαž·αž“αžΆαž‘αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ… http-server αž˜αž·αž“αž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžŸαŸ’αž‚αŸ’αžšαžΈαž”αž‘αŸαŸ” αž“αŸαŸ‡β€‹αž‚αžΊβ€‹αž‡αžΆβ€‹αž§αž‘αžΆαž αžšαžŽαŸβ€‹αžŸαžΆαž€αž›αŸ’αž”αž„β€‹αž˜αž½αž™β€‹αž“αŸ…β€‹αž›αžΎβ€‹αž‚αž˜αŸ’αžšαŸ„αž„β€‹αž–αž·αžβ€‹αžœαžΆβ€‹αž”αŸ’αžšαžŸαžΎαžšβ€‹αž€αŸ’αž“αž»αž„β€‹αž€αžΆαžšβ€‹αž”αŸ’αžšαžΎ nginx αŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αž αžΆαž„ Vuex αž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαžœαžΆαž›αž˜αž½αž™αŸ” apiHost: 'http://localhost:3000'αžŠαŸ‚αž›αž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž…αŸ’αžšαž€ NodeJS Api αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αŸ” αž•αŸ’αž“αŸ‚αž€αž’αžαž·αžαž·αž‡αž“αžšαž½αž…αžšαžΆαž›αŸ‹αŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡αžšαžΆαž›αŸ‹αžŸαŸ†αžŽαžΎαž–αžΈαž’αžαž·αžαž·αž‡αž“αž‘αŸ…αžαžΆαž„αž€αŸ’αžšαŸ„αž™ αžŸαžΌαž˜αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹ url αž“αŸαŸ‡αŸ”

NodeJS server API

αž“αŸ…αž€αŸ’αž“αž»αž„αžαžαž―αž€αžŸαžΆαžš /server αž”αž„αŸ’αž€αžΎαž server.js αž“αž·αž„ DockerfileαŸ–


FROM node:10
WORKDIR /server
COPY ./package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

Π’ server.js αž…αž„αŸ’αž’αž»αž›αž”αž„αŸ’αž αžΆαž‰ url αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ const url = 'mongodb://mongo:27017/';. αž’αž“αž»αž‰αŸ’αž‰αžΆαžαžŸαŸ†αžŽαžΎαž†αŸ’αž›αž„αžŠαŸ‚αž“αž–αžΈαž’αžαž·αžαž·αž‡αž“αŸ–


const clientUrl = 'http://localhost:8081';
const corsOptions = {
  origin: clientUrl,
  optionsSuccessStatus: 200, // some legacy browsers (IE11, various SmartTVs) choke on 204
};
app.use(cors());
app.all('/*', (req, res, next) => {
  res.header('Access-Control-Allow-Origin', clientUrl);
  res.header('Access-Control-Allow-Headers', 'X-Requested-With');
  next();
});
  app.get('/getProducts', cors(corsOptions), (req, res) => {
    products.getContent
      .then(data => res.json(data), err => res.json(err));
  });
  app.get('/getUsers', cors(corsOptions), (req, res) => {
    db.getUsers()
      .then(data => res.json(data), err => res.json(err));
  });

αžŸαŸαž…αž€αŸ’αžαžΈαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“

αž₯αž‘αžΌαžœαž“αŸαŸ‡αžŸαžΌαž˜αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αžαžαž‚αž˜αŸ’αžšαŸ„αž„ αž αžΎαž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš docker-compose build αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹αžšαžΌαž”αž—αžΆαž–αž“αž·αž„ docker-compose up αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αž»αž„αŸ” αž€αŸ’αžšαž»αž˜αž€αžΆαžšαž„αžΆαžšαž“αžΉαž„αž›αžΎαž€αž’αž»αž„αž…αŸ†αž“αž½αž“ αŸ£αŸ– αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ, αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ, αž˜αŸ‰αž»αž„αž αŸ’αž‚αŸ„. αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ NodeJS αž’αŸ’αž“αž€αž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ hot-reload αžŠαŸ„αž™αž—αŸ’αž‡αžΆαž”αŸ‹αžœαžΆαž‘αŸ…αžαžαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ” αž αžΎαž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αž’αž—αž·αžœαžŒαŸ’αžαž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αžŸαŸ’αžšαž»αž€αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž•αŸ’αž‘αž»αž€αž‘αžΎαž„αžœαž·αž‰αž€αŸ’αžαŸ… αžŠαŸ„αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž‘αŸ‚αž€αž–αžΈαž‚αŸ’αž“αžΆαŸ” αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž”αž˜αŸ’αžšαžΎ ΠΈ mongo. αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αžšαž”αžŸαŸ‹αžœαžΆαŸ” docker-compose up client. αž€αž»αŸ†αž—αŸ’αž›αŸαž…αž’αŸ’αžœαžΎαžœαžΆαž–αŸαž›αžαŸ’αž›αŸ‡ prune αž“αž·αž„αž€αžΆαžšαž›αž»αž”αž€αž»αž„αžαžΊαž“αŸαžš αž”αžŽαŸ’αžαžΆαž‰ αž“αž·αž„αžšαžΌαž”αž—αžΆαž– αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž“αž’αž“αž’αžΆαž“αŸ”

αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰αž€αžΌαžŠαž–αŸαž‰αž›αŸαž‰ αž“αŸ…αž‘αžΈαž“αŸαŸ‡. αž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡αž€αŸ†αž–αž»αž„αžŸαŸ’αžαž·αžαž€αŸ’αžšαŸ„αž˜αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž“αŸ…αž‘αžΎαž™αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹