В этой статье мы создадим простое приложение ToDo, используя Node.js для серверной части и Vue.js для клиентской. Мы также подготовим Docker образ для удобного развертывания приложения.
Установка необходимых инструментов
Перед началом убедитесь, что у вас установлены следующие инструменты:
Создание серверной части на Node.js
Создайте папку для проекта и перейдите в нее:
mkdir todo-app cd todo-app
Инициализируйте новый проект Node.js:
mkdir server cd server npm init -y
Установите необходимые зависимости:
npm install express cors body-parser
Создайте файл server.js
:
// server/server.js const express = require('express'); const cors = require('cors'); const bodyParser = require('body-parser'); const app = express(); const PORT = process.env.PORT || 5000; app.use(cors()); app.use(bodyParser.json()); let todos = []; app.get('/todos', (req, res) => { res.json(todos); }); app.post('/todos', (req, res) => { const todo = req.body; todos.push(todo); res.status(201).json(todo); }); app.delete('/todos/:id', (req, res) => { const { id } = req.params; todos = todos.filter(todo => todo.id !== id); res.status(204).send(); }); app.listen(PORT, () => { console.log(`Server is running on http://localhost:${PORT}`); });
Запустите сервер:
node server.js
Создание клиентской части на Vue.js
Создайте клиентскую часть: В корневой папке проекта выполните:
vue create client
Выберите настройки по умолчанию или настройте по своему усмотрению.
Перейдите в папку клиента:
cd client
Установите Axios для работы с HTTP-запросами:
npm install axios
Измените файл src/App.vue
:
<template> <div id="app"> <h1>ToDo List</h1> <input v-model="newTodo" @keyup.enter="addTodo" placeholder="Add a new todo" /> <ul> <li v-for="todo in todos" :key="todo.id"> {{ todo.text }} <button @click="removeTodo(todo.id)">Delete</button> </li> </ul> </div> </template> <script> import axios from 'axios'; export default { data() { return { newTodo: '', todos: [] }; }, methods: { async fetchTodos() { const response = await axios.get('http://localhost:5000/todos'); this.todos = response.data; }, async addTodo() { if (this.newTodo) { const todo = { id: Date.now().toString(), text: this.newTodo }; await axios.post('http://localhost:5000/todos', todo); this.newTodo = ''; this.fetchTodos(); } }, async removeTodo(id) { await axios.delete(`http://localhost:5000/todos/${id}`); this.fetchTodos(); } }, mounted() { this.fetchTodos(); } }; </script> <style> /* Добавьте стили по своему усмотрению */ </style>
Запустите клиентское приложение:
npm run server
Шаг 4: Подготовка Docker образа
Создайте файл Dockerfile
в папке server
:
# server/Dockerfile FROM node:14 WORKDIR /usr/src/app COPY package*.json ./
Ссылки:
Building a CRUD Application with Node.js, Express, and MongoDB