Todo项目核心链路(前端→Node→Redis)文档
文档说明
本文档为Todo项目核心数据链路精简版,聚焦【前端请求-后端交互-Redis数据】全流程,剔除冗余逻辑,标注核心文件、代码及问题排查点,适配刚接手项目的开发人员快速定位核心关注点,高效上手业务。
一、核心数据流向图
以下为完整数据流转链路,是定位全流程问题的核心参考,各环节对应核心文件及作用标注清晰。
关键说明:整个链路中,仅初始化加载数据为前后端交互流程,新增、修改、删除待办等操作均为前端内存操作,不涉及后端及Redis交互。
二、核心文件清单及优先级
项目核心逻辑仅集中在以下5个文件中,按“必看优先级”排序,接手后优先定位这些文件即可。
| 优先级 | 文件路径 | 核心职责 | 关键作用 |
|---|---|---|---|
| ★★★★★ | src/stores/todo.js | Pinia状态仓库 | 管理Todo数据状态,调用API加载后端数据,处理前端业务逻辑 |
| ★★★★★ | src/api/redisData.js | 前端请求封装层 | 项目唯一向后端发起请求的出口,封装axios请求逻辑 |
| ★★★★☆ | vite.config.js | Vite代理配置 | 解决跨域问题,将前端请求转发至本地Node服务 |
| ★★★☆☆ | 前端业务组件(如TodoList.vue) | 页面渲染与交互 | 调用Pinia方法,无核心业务逻辑,仅负责视图展示 |
| ★★☆☆☆ | 本地NodeJS服务 | 后端中间层 | 与Redis进行数据交互,前端无需修改,仅需确认地址正确 |
三、核心文件精简代码及说明
以下代码均剔除冗余注释、容错逻辑及非核心业务,仅保留链路通畅所需核心代码,便于快速定位关键逻辑。
3.1 src/stores/todo.js(Pinia仓库,核心中的核心)
核心关注点:initTodoList 方法为前端加载Redis数据的唯一入口,其余方法均为纯前端数据操作。
import { defineStore } from 'pinia'
import { fetchRedisData } from '../api/redisData'
export const useTodoStore = defineStore('todo', {
state: () => ({
todoList: [], // 存储从Redis加载的待办数据,页面展示的核心数据源
filterType: 'all' // 前端筛选状态,纯前端逻辑
}),
getters: {
filterTodoList() { // 前端数据筛选,无后端交互
switch (this.filterType) {
case 'done': return this.todoList.filter(item => item.isDone)
case 'undone': return this.todoList.filter(item => !item.isDone)
default: return this.todoList
}
}
},
actions: {
// 唯一对接后端的核心方法:从Redis加载初始化数据
async initTodoList() {
const data = await fetchRedisData()
this.todoList = data.redis_get_result || data.data?.value || []
},
// 纯前端操作:新增待办
addTodo(content) {
this.todoList.unshift({ id: Date.now(), content: content.trim(), isDone: false })
},
// 纯前端操作:切换待办完成状态
toggleTodoDone(id) {
const todo = this.todoList.find(item => item.id === id)
todo && (todo.isDone = !todo.isDone)
},
// 纯前端操作:删除单个待办
deleteTodo(id) {
this.todoList = this.todoList.filter(item => item.id !== id)
},
// 纯前端操作:切换筛选类型
changeFilter(type) { this.filterType = type },
// 纯前端操作:清空所有待办
clearAllTodo() { this.todoList = [] }
}
})
3.2 src/api/redisData.js(前端请求封装层)
核心关注点:项目唯一向后端发起请求的方法,请求地址为代理地址,异常抛出供Pinia捕获。
import axios from 'axios';
// 唯一获取Redis待办数据的请求方法
export const fetchRedisData = async () => {
const response = await axios.get('/api/get-data');
return response.data;
};
3.3 vite.config.js(代理转发配置)
核心关注点:代理配置是前端请求能成功到达Node服务的关键,仅需检查target、changeOrigin两个核心配置。
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
export default defineConfig({
plugins: [vue()],
server: {
// 核心代理配置,其余为无关配置可忽略
proxy: {
'/api': {
target: 'http://localhost:3000', // 本地Node服务地址+端口,必须与Node启动地址一致
changeOrigin: true, // 开启跨域,必为true,否则请求失败
// rewrite: (path) => path.replace(/^/api/, '') // 可选,根据Node服务接口规则配置
}
}
}
})
四、核心问题排查指南
按“问题出现概率”排序,排查时优先检查以下场景,高效定位问题根源。
五、接手项目快速上手流程
-
第一步:理清数据流向:对照“核心数据流向图”,明确数据从Redis到前端组件的完整路径,知晓各文件在链路中的作用。
-
第二步:定位核心文件:找到上述3个核心文件(Pinia仓库、API封装、代理配置),其余文件暂时无需关注。
-
第三步:聚焦核心操作:
- 加载Redis数据:关注Pinia的initTodoList方法及API封装的fetchRedisData方法。
- 调整请求链路:修改API请求地址(redisData.js)及代理配置(vite.config.js)。
- 修改业务逻辑:仅需操作Pinia仓库的actions方法(前端业务),无需改动后端及Redis。
六、补充说明
- 前端Todo数据唯一后端来源:Pinia仓库的initTodoList方法调用fetchRedisData加载Redis数据。
- 前端操作特性:除初始化加载外,新增、修改、删除、筛选等操作均为前端内存操作,不同步至Redis。
- Node服务定位:作为中间层负责与Redis交互,前端无需开发或修改,仅需确保其正常启动且地址与代理配置一致。