рдбреЙрдХрдЯрд░ рдореЗрдВ VueJS + NodeJS + MongoDB рдЖрд╡реЗрджрди рдХреИрд╕реЗ рдкреИрдХ рдХрд░реЗрдВ

рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ -1
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ред рдПрдХ рдирдИ рдЯреАрдо рдореЗрдВ рдкрд╣рд▓реЗ рджрд┐рди рдЖрдорддреМрд░ рдкрд░ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ: рдмреИрдХ-рдПрдВрдб рдореЗрд░реЗ рдкрд╛рд╕ рдмреИрдарддрд╛ рд╣реИ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдФрд░ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рджреБрдИ рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред рдбреЙрдХрд░ рд╕рд╛рдордиреЗ рдХреЗ рдЕрдВрдд рдХреЗ рд▓рд┐рдП рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИ рдмреИрдХрдПрдВрдб рдХреЛ рдЕрдХреНрд╕рд░ PHP / Java / Python / C # рд╕реНрдЯреИрдХ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдм рдХреБрдЫ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреНрд░рдВрдЯ рдХреЛ рдмреИрдХрдПрдВрдб рдХреЛ рд╡рд┐рдЪрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдореИрдВрдиреЗ рдбреЙрдХрд░-рдЬреЗрдирдХрд┐рдиреНрд╕ рдХреЗ рдПрдХ рдЭреБрдВрдб рдХреЛ рдПрдХ рдкрд╛рд░рджрд░реНрд╢реА рддреИрдирд╛рддреА, рд▓реЙрдЧ рдХреЗ рд╕рд╛рде рджреЗрдЦрд╛, рд╕реНрд╡-рдкрд░реАрдХреНрд╖рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЦрд░рд╛рдм рдХрд░ рджрд┐рдпрд╛ред

рдбреЙрдХрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рд╕реНрддреГрдд рд▓реЗрдЦ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдпрд╣ рдЖрд▓реЗрдЦ VueJS / Vue Router, NodeJS рдХреЗ рд╕рд╛рде RESTful API рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░реНрд╡рд░ рднрд╛рдЧ рдФрд░ MongoDB рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрдИ рдХрдВрдЯреЗрдирд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░ рдХрдореНрдкреЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рдбреЙрдХрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ


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

рд╢реБрд░реБрдЖрдд рд╣реЛ рд░рд╣реА рд╣реИ


Docker рдФрд░ Docker рдХрдВрдкреЛрдЬрд╝ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛

рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП 2 рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рддреЗ рд╣реИрдВред .Yml рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдПрдХ рдбреЙрдХрд░ рдХрдВрдкреЛрдЬрд╝ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИ рдЬрд╣рд╛рдБ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдВрдЯреЗрдирд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рд▓рд┐рдВрдХ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдбреЛрдХрд░-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 

рд╣рдо docker рдореЗрдВ 3 рд╕реЗрд╡рд╛рдПрдБ рдмрдирд╛рддреЗ рд╣реИрдВ: NodeJS, MongoDB рдФрд░ Vue рдкрд░ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдПред рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд░реНрд╡рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ ред рд▓рд┐рдВрдХ рдореЛрдВрдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ MongoDB рдХреЛ рд╕рд░реНрд╡рд░ API рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд░реНрд╡рд░, рдХреНрд▓рд╛рдЗрдВрдЯ, рдорд╛рдирдЧреЛ - рд╕реЗрд╡рд╛ рдирд╛рдоред

VueJS рдкрд░ рдЧреНрд░рд╛рд╣рдХ


/ рдХреНрд▓рд╛рдЗрдВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ VueJS рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛрддрд╛ рд╣реИред Vue Cli рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧред рдЫрд╡рд┐ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп, рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдбрд┐рд╕реНрдЯрд░реНрдм рдлреЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдЯреИрдЯрд┐рдХ рдлрд╛рдЗрд▓реНрд╕ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рдмрдирд╛рддрд╛ рд╣реИред 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 рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рдЧрдИ рд╣реИ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рд╕реЗ рдЕрд▓рдЧ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдкреБрдирдГ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп / рдиреЛрдб_рдореЙрдбрд▓ рдлрд╝реЛрд▓реНрдбрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдкреНрд░рддреНрдпреЗрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЕрд▓рдЧ рд╕реЗ рдХреИрд╢ рдХреА рдЬрд╛рддреА рд╣реИред

рдЕрдВрдд рдореЗрдВ, рдЬрдм рдХрдВрдЯреЗрдирд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ npm run dev рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдЖрджреЗрд╢ рдХреЛ рдкреИрдХреЗрдЬ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдВрджреЗрд╢:

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

/ рдбрд┐рд╕реНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, http-server рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ spa-http-server рдкреИрдХреЗрдЬ рджреЗрд╡-рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ Vue Router рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░реЗред тАУPush-state рдлреНрд▓реИрдЧ рдХреЛ index.html рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред 1 рд╕реЗрдХрдВрдб рдХреЗ рдорд╛рди рдХреЗ рд╕рд╛рде -c рдзреНрд╡рдЬ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ http-server рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ рдХреИрд╢ рди рдХрд░реЗрдВред рдпрд╣ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ, рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдпрд╣ рдирдЧреАрдирдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

Vuex рд╕реНрдЯреЛрд░ рдореЗрдВ, apiHost: 'http://localhost:3000' рдлрд╝реАрд▓реНрдб, рдЬрд╣рд╛рдВ NodeJS Api рдкреЛрд░реНрдЯ рдкрдВрдЬреАрдХреГрдд рд╣реИред рдЧреНрд░рд╛рд╣рдХ рднрд╛рдЧ рддреИрдпрд╛рд░ рд╣реИред рдЕрдм рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдмреИрдХ рддрдХ рдХреЗ рд╕рднреА рдЕрдиреБрд░реЛрдз рдЗрд╕ рдпреВрдЖрд░рдПрд▓ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред

NodeJS рд╕рд░реНрд╡рд░ 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 рдбреЗрдЯрд╛рдмреЗрд╕ const url = 'mongodb://mongo:27017/'; рд▓рд┐рдП 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 build рдФрд░ docker-compose up рд▓рд┐рдП docker-compose up ред рдХрдорд╛рдВрдб 3 рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдмрдврд╝рд╛рдПрдЧрд╛: рд╕рд░реНрд╡рд░, рдХреНрд▓рд╛рдЗрдВрдЯ, рдореЛрдВрдЧреЛ ред NodeJS рдкрд░ рдПрдХ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдХрд░ рд╣реЙрдЯ-рд░реАрд▓реЛрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╣реЙрдЯ рд░реАрд▓реЛрдб рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рд╕рд░реНрд╡рд░ рдФрд░ рдорд╛рдирдЧреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдзреАрди рд╣реИред рдПрдХ рдЕрд▓рдЧ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЕрдкрдирд╛ рдирд╛рдо docker-compose up client рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЦрд╛рд▓реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрднреА-рдХрднреА рдХрдВрдЯреЗрдирд░, рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ prune рдФрд░ рд╣рдЯрд╛рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВред

рдкреВрд░реНрдг рдХреЛрдб рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрднреА рднреА рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдзреАрди рд╣реИред

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


All Articles