构建一个前后端分离的Todo List,使用Node.js作为后端

构建一个前后端分离的Todo List,使用Node.js作为后端

在现代Web开发中,后端分离的架构已经成为一种流行的开发模式。这种模式不仅提高了开发展示组件(前端)和业务逻辑(后端)的灵活性,还易于维护和扩展。在本文中,我们将使用Node.js作为后端,构建一个简单的Todo List应用,其中前端使用Vue.js框架以及setup语法糖。

目录

  1. 项目结构
  2. 创建Node.js后端
  3. 创建Vue.js前端
  4. 实现功能
  5. 完成应用
  6. 总结

1. 项目结构

首先,让我们明确整个项目的结构。项目大致会分为以下几个部分:

todo-app/
├── backend/
│   ├── server.js
│   └── routes/
│       └── todo.js
└── frontend/
    ├── src    │   ├── components/
    │   │   └── TodoList.vue
    │   └── App.vue
    └── main.js

2. 创建Node.js后端

首先安装Express框架,并创建基本的后端结构。

后端安装

backend目录下创建一个新的Node.js项目,并安装必要的依赖:

mkdir backend
cd backend
npm init -y
npm install express cors body-parser
创建服务器

接下来,在backend目录下创建一个server.js文件,设置基本的Express服务器和路由:

// backend/server.js
const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const todoRoutes = require('./routes/todo');

const app = express();
const port = 3000;

app.use(cors());
app.use(bodyParser.json());
app.use('/api/todos', todoRoutes);

app.listen(port, () => {
    console.log(`Server is running at http://localhost:${port}`);
});
创建Todo路由

backend/routes中创建todo.js文件以处理Todo的相关操作。

// backend/routes/todo.js
const express = require('express');
const router = express.Router();

let todos = [];

// 获取所有Todo
router.get('/', (req, res) => {
    res.json(todos);
});

// 添加Todo
router.post('/', (req, res) => {
    const { text } = req.body;
    const newTodo = { id: todos.length + 1, text, completed: false };
    todos.push(newTodo);
    res.status(201).json(newTodo);
});

// 删除Todo
router.delete('/:id', (req, res) => {
    const { id } = req.params;
    todos = todos.filter(todo => todo.id != id);
    res.status(204).send();
});

module.exports = router;

3. 创建Vue.js前端

接下来创建前端部分,使用Vue CLI创建一个新的Vue项目。

前端安装

在项目根目录下运行以下命令:

npm install -g @vue/cli
vue create frontend

(选择默认配置)

创建TodoList组件

frontend/src/components目录下创建TodoList.vue文件:

<template  <div>
    <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 setup>
import { ref, onMounted } from 'vue';

const todos = ref([]);
const newTodo = ref('');

const fetchTodos = async () => {
  const response = await fetch('http://localhost:3000/api/todos  todos.value = await response.json();
};

const addTodo = async () => {
  if (newTodo.value.trim()) {
    const response = await fetch('http://localhost:3000/api/todos', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({ text: newTodo.value })
    });
    const todo = await response.json();
    todos.value.push(todo);
    newTodo.value = '';
  }
};

const removeTodo = async (id) => {
  await fetch(`http://localhost:3000/api/todos/${id}`, {
    method: 'DELETE'
  });
  todos.value = todos.value.filter(todo => todo.id != id);
};

onMounted(fetchTodos);
</script>

<style scoped>
/* 样式可以在这里添加 */
</style>
修改主组件

接着在frontend/src/App.vue中引用TodoList`组件:

<template>
  <div idapp">
    <TodoList />
  </div>
</template>

<script setup>
import TodoList from './components/TodoList.vue';
</script>
启动前端

确保frontend目录下,运行以下命令启动Vue应用:

npm run serve

4. 实现功能

现在,我们的Todo List应用基本已经实现!我们可以通过输入框添加Todo,并在列表中显示出来。每个Todo旁边都有一个删除按钮,可以删除对应的Todo。

5. 完成应用

您可以通过访问http://localhost:8080查看我们的Todo List应用,默认情况下,Vue CLI 使用8080端口,而Node.js使用3000。

6. 总结

在本篇博客中,我们建了一个前后端分离的Todo List应用,使用Node.js作为后端服务。这个应用基本实现了添加和删除Todo的功能,并且结构清晰,有助于后续扩展功能。前后端分离的架构为我们带来了更高的开发效率和灵活性。


最后问候亲爱的朋友们,并邀请你们阅读我的全新著作

书籍详情

在这里插入图片描述

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,您需要先安装Node.js和React,并创建一个React项目。接下来,您可以按照以下步骤进行操作: 1. 在您的项目根目录下创建一个名为 `server` 的文件夹,并在其中创建一个名为 `data.json` 的文件,用于存储todo应用的数据。 2. 在 `server` 文件夹中创建一个 `server.js` 文件,用于启动后端服务器。在该文件中,您需要使用以下代码: ```javascript const express = require('express'); const app = express(); const cors = require('cors'); const fs = require('fs'); app.use(cors()); app.use(express.json()); const dataPath = './server/data.json'; app.get('/api/todos', (req, res) => { const data = JSON.parse(fs.readFileSync(dataPath)); res.json(data.todos); }); app.post('/api/todos', (req, res) => { const data = JSON.parse(fs.readFileSync(dataPath)); const newTodo = req.body; data.todos.push(newTodo); fs.writeFileSync(dataPath, JSON.stringify(data)); res.json(newTodo); }); const port = 3001; app.listen(port, () => { console.log(`Server listening at http://localhost:${port}`); }); ``` 该代码使用了 `express` 框架搭建了一个后端服务器,并在 `data.json` 文件中存储了todo应用的数据。其中,`GET /api/todos` 接口用于获取所有todo数据,`POST /api/todos` 接口用于新增一条todo数据。 3. 在项目根目录下,运行以下命令安装依赖: ``` npm install cors express fs ``` 4. 接下来,您需要在React项目中使用 `axios` 库来调用后端接口并获取todo数据。在您的React组件中,可以使用以下代码: ```javascript import React, { useState, useEffect } from 'react'; import axios from 'axios'; const TodoList = () => { const [todos, setTodos] = useState([]); useEffect(() => { axios.get('http://localhost:3001/api/todos') .then(res => setTodos(res.data)); }, []); return ( <ul> {todos.map(todo => ( <li key={todo.id}>{todo.title}</li> ))} </ul> ); }; export default TodoList; ``` 该代码使用了 `axios` 库发起了一个GET请求来获取所有todo数据,并将数据存储到 `todos` 状态中。您可以在您的组件中使用 `todos` 状态来渲染您的todo列表。 5. 最后,您需要在您的React项目中使用 `webpack` 来编译您的静态资源。在您的项目根目录下,可以使用以下命令来安装 `webpack` 和 `webpack-cli`: ``` npm install webpack webpack-cli --save-dev ``` 6. 接下来,您需要在项目根目录下创建一个名为 `webpack.config.js` 的文件,并添加以下代码: ```javascript const path = require('path'); module.exports = { entry: './src/index.js', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'server/static'), }, module: { rules: [ { test: /\.js$/, exclude: /node_modules/, use: { loader: 'babel-loader', options: { presets: ['@babel/preset-env', '@babel/preset-react'], }, }, }, { test: /\.ts(x?)$/, exclude: /node_modules/, use: { loader: 'ts-loader', }, }, { test: /\.css$/, use: ['style-loader', 'css-loader'], }, ], }, resolve: { extensions: ['.ts', '.tsx', '.js', '.jsx'], }, }; ``` 该代码使用了 `webpack` 来编译您的React项目,并将静态资源编译到了 `server/static` 目录下。 7. 最后,您可以使用以下命令来启动您的React项目和后端服务器: ``` npm run start ``` 该命令会同时启动React项目和后端服务器,并在浏览器中打开您的todo应用。您可以在浏览器中访问 `http://localhost:3000` 来查看您的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JJCTO袁龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值