第一部分:项目规划与功能设计
在敲下第一行代码之前,清晰的规划至关重要。

(图片来源网络,侵删)
核心目标
为校园师生提供一个便捷、安全、高效的跑腿服务平台,解决“没时间”、“不方便”的日常需求。
用户角色
- 用户(下单者):发布任务,支付费用,查看进度,评价跑腿员。
- 跑腿员(接单者):浏览任务列表,接单,执行任务,上传完成凭证,获得报酬。
- 管理员:管理用户和跑腿员账号,审核任务,处理纠纷,查看数据报表。
核心功能模块
A. 用户端(面向下单者)
- 注册/登录:支持手机号/邮箱注册,登录方式(密码、短信验证码)。
- 首页/任务大厅:
- 展示所有待接单的任务列表。
- 支持筛选(如:取快递、买饭、打印文件等)。
- 支持排序(如:发布时间、赏金高低)。
- 发布任务:
- 任务类型选择(取快递、买饭、送文件、代排队等)。
- 任务详情描述(物品、地址、时间要求等)。
- 上传图片(如快递单号、商品截图)。
- 设置任务赏金。
- 选择接单截止时间。
- 我的订单:
- 订单状态:待接单、已接单、进行中、已完成、已取消。
- 查看订单详情,包括跑腿员信息、联系方式。
- 在任务进行中,可以与跑腿员在线沟通(集成聊天功能)。
- 确认完成,进行支付和评价。
- 个人中心:
- 编辑个人资料(头像、昵称、学号等)。
- 查看账户余额、收支明细。
- 查看我的评价。
- 设置收货/上课地址。
B. 跑腿员端(面向接单者)
- 注册/登录:同上,可能需要额外认证(如学生证照片)。
- 任务大厅:
- 浏览可接任务。
- 筛选和排序功能。
- 查看任务赏金和距离。
- 接单/拒单:
- 点击“立即接单”。
- 可以选择性地拒接某个任务。
- 我的订单:
- 订单状态:待接单(我已发布的)、已接单、进行中、已完成、已完成待收款。
- 查看订单详情,与下单者沟通。
- 上传任务完成凭证(如:快递取件码、购物小票照片)。
- 任务完成后,申请收款。
- 个人中心:
- 类似用户端,包含资料、余额、评价等。
- 可查看接单统计(如:完成单数、总收入)。
C. 管理员端

(图片来源网络,侵删)
- 仪表盘:核心数据概览(用户数、跑腿员数、今日订单数、交易总额)。
- 用户管理:查看、禁用/启用用户和跑腿员账号。
- 订单管理:查看所有订单,可手动处理异常订单(如强制取消、强制完成)。
- 内容管理:管理任务类型、公告等。
- 财务管理:查看平台整体收支,处理提现申请。
- 投诉处理:处理用户和跑腿员之间的纠纷。
第二部分:技术选型
对于一个校园项目,我们应选择快速开发、成本较低、易于维护的技术栈。
| 类别 | 推荐技术 | 说明 |
|---|---|---|
| 前端 | Vue 3 + Vite + Element Plus / Ant Design Vue | Vue 是目前主流的前端框架,生态完善,Vite 提供极速的开发服务器启动,Element Plus / Ant Design Vue 是成熟的 UI 组件库,能快速搭建出美观的界面。 |
| 后端 | Node.js + Express / Koa.js | 使用 JavaScript 全栈开发,前后端语言统一,降低学习成本,Express/Koa 是轻量级的 Node.js 框架,非常适合 API 服务的开发。 |
| 数据库 | MySQL | 关系型数据库,结构化数据(用户、订单、地址等)存储非常成熟稳定,对于校园项目,性能完全足够。 |
| 认证 | JWT (JSON Web Token) | 无状态认证,非常适合前后端分离的架构,用户登录后,服务器返回一个 Token,后续请求携带此 Token 即可验证身份。 |
| 部署 | Nginx + PM2 | Nginx 作为反向代理和静态资源服务器,PM2 用于管理 Node.js 进程,实现后台运行和自动重启。 |
| 服务器 | 云服务器 | 如阿里云、腾讯云、华为云等,选择学生优惠套餐,性价比极高。 |
第三部分:开发流程
环境准备
- 安装 Node.js: 访问 Node.js 官网 下载并安装 LTS 版本。
- 安装数据库: 下载并安装 MySQL。
- 安装代码编辑器: 推荐 VS Code,并安装 Volar、ESLint、Prettier 等插件。
项目初始化
- 创建后端项目:
mkdir campus-runner-server cd campus-runner-server npm init -y npm install express mysql2 cors jsonwebtoken bcryptjs dotenv # express: 框架 # mysql2: MySQL 驱动 # cors: 处理跨域 # jsonwebtoken: JWT 认证 # bcryptjs: 密码加密 # dotenv: 管理环境变量
- 创建前端项目:
# 全局安装 Vite 和 Vue 脚手架 npm install -g create-vite # 创建 Vue 项目 create-vite campus-runner-client --template vue cd campus-runner-client npm install npm install element-plus axios # element-plus: UI 组件库 # axios: HTTP 客户端,用于与后端 API 通信
数据库设计
使用 MySQL Workbench 或 Navicat 等工具创建数据库,并设计核心表结构。
-- 用户表 (通用)
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL COMMENT '用户名/手机号',
`password` varchar(255) NOT NULL COMMENT '加密后的密码',
`role` enum('user', 'runner', 'admin') NOT NULL DEFAULT 'user' COMMENT '角色',
`nickname` varchar(50) DEFAULT NULL,
`avatar` varchar(255) DEFAULT NULL,
`balance` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '账户余额',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 任务表
CREATE TABLE `tasks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL COMMENT '发布者ID', varchar(100) NOT NULL COMMENT '任务标题',
`description` text COMMENT '任务描述',
`type` varchar(50) NOT NULL COMMENT '任务类型',
`price` decimal(10,2) NOT NULL COMMENT '赏金',
`pickup_location` varchar(255) NOT NULL COMMENT '取货地址',
`delivery_location` varchar(255) NOT NULL COMMENT '送达地址',
`status` enum('pending', 'assigned', 'in_progress', 'completed', 'cancelled') NOT NULL DEFAULT 'pending',
`runner_id` int(11) DEFAULT NULL COMMENT '接单者ID',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `runner_id` (`runner_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 订单表 (可选,也可以和任务表合并)
CREATE TABLE `orders` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`task_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`runner_id` int(11) NOT NULL,
`amount` decimal(10,2) NOT NULL,
`status` enum('unpaid', 'paid', 'refunded') NOT NULL DEFAULT 'unpaid',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
后端开发 (Node.js + Express)
-
搭建基本服务 (
server.js):const express = require('express'); const cors = require('cors'); const app = express(); app.use(cors()); app.use(express.json()); // 简单的路由示例 app.get('/api/health', (req, res) => { res.send({ message: 'Server is running!' }); }); const PORT = 3000; app.listen(PORT, () => { console.log(`Server is listening on port ${PORT}`); }); -
编写 API 接口:
(图片来源网络,侵删)- 用户认证:
/api/auth/register,/api/auth/login - 任务管理:
/api/tasks(GET, POST),/api/tasks/:id(GET, PUT, DELETE) - 订单管理:
/api/orders(GET, POST) - 用户信息:
/api/user/profile(GET, PUT) - 每个接口都需要根据用户角色(通过 JWT 解析)来判断权限。
- 用户认证:
前端开发 (Vue 3)
-
搭建页面结构:
- 在
src目录下创建views文件夹,用于存放各个页面组件(如Home.vue,Login.vue,PostTask.vue)。 - 创建
router/index.js配置路由。 - 创建
store/index.js(使用 Pinia) 进行全局状态管理(如存储用户信息、Token)。
- 在
-
封装 API 请求 (
src/api/index.js):import axios from 'axios'; import { useUserStore } from '@/stores/user'; const api = axios.create({ baseURL: 'http://localhost:3000/api', // 后端服务地址 }); // 请求拦截器,自动添加 Token api.interceptors.request.use(config => { const userStore = useUserStore(); if (userStore.token) { config.headers.Authorization = `Bearer ${userStore.token}`; } return config; }); export default api; -
实现页面功能:
- 使用 Element Plus 的组件快速构建表单、表格、弹窗等。
- 在组件中调用封装好的 API 函数,获取数据并渲染到页面上。
- 使用 Vue 的组合式 API (
setup函数) 来组织逻辑。
第四部分:部署上线
-
代码准备:
- 将前端和后端代码分别上传到 GitHub/Gitee 仓库。
- 在云服务器上克隆代码。
-
配置服务器环境:
- 安装 Node.js、Nginx、PM2、MySQL。
- 在云服务器的安全组中开放端口(如 80, 443, 3001)。
-
部署后端:
cd campus-runner-server npm install --production # 只安装生产依赖 pm2 start server.js --name "runner-server" # 使用 PM2 启动服务 pm2 save # 保存 PM2 进程列表 pm2 startup # 设置开机自启
-
构建并部署前端:
cd campus-runner-client npm run build # 构建生产版本,会生成 dist 文件夹
-
配置 Nginx: 编辑 Nginx 配置文件 (
/etc/nginx/nginx.conf或/etc/nginx/sites-available/default),配置反向代理和静态文件服务。server { listen 80; server_name your-domain.com; # 你的域名或公网IP # 前端静态文件 location / { root /path/to/campus-runner-client/dist; # 前端 dist 目录 try_files $uri $uri/ /index.html; } # 后端 API 代理 location /api { proxy_pass http://localhost:3000; # 后端服务地址 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }保存后,重启 Nginx:
sudo systemctl restart nginx。 -
域名解析:
在你的域名提供商后台,将域名解析到你的云服务器公网 IP。
访问你的域名,网站就可以在线使用了!
第五部分:安全与未来优化
- 安全:
- HTTPS: 配置 SSL 证书,启用 HTTPS,保障数据传输安全。
- 输入验证: 后端对所有用户输入进行严格验证和过滤,防止 SQL 注入、XSS 攻击。
- 敏感信息: 密码必须加盐哈希存储,不要在前端代码中硬编码任何密钥。
- 未来优化:
- 实时通信: 集成 WebSocket (如 Socket.io) 实现用户和跑腿员之间的即时聊天。
- 地图集成: 集成高德地图或百度地图 API,实现地址选择和路径规划。
- 移动端适配: 优化前端样式,使其在手机浏览器上有良好体验,或开发微信小程序/APP。
- 支付集成: 对接微信支付、支付宝,实现真正的在线支付闭环。
- 信用体系: 引入信用分、评价星级等机制,提升服务质量。
这个指南为你提供了一个完整的框架和清晰的步骤,从零开始搭建一个项目会很有挑战性,但也是一个绝佳的学习机会,祝你项目顺利!
