一个完整的失物招领平台,使用现代Web技术栈构建。
- React 18 - 用户界面框架
- TypeScript - 类型安全
- Material-UI (MUI) - 组件库和样式
- React Router DOM - 路由管理
- Axios - HTTP客户端
- date-fns - 日期处理
- Node.js - 运行时环境
- Express - Web框架
- PostgreSQL - 关系型数据库
- JWT - 用户认证
- bcryptjs - 密码加密
- multer - 文件上传
- cors - 跨域支持
lost-and-found-system/
├── backend/ # 后端代码
│ ├── config/ # 配置文件
│ │ ├── db.js # 数据库连接
│ │ └── init.sql # 数据库初始化脚本
│ ├── routes/ # 路由文件
│ │ ├── auth.js # 认证路由
│ │ ├── items.js # 物品路由
│ │ └── clues.js # 线索路由
│ ├── .env # 环境变量
│ ├── package.json # 依赖配置
│ └── server.js # 服务器入口
├── frontend/ # 前端代码
│ ├── src/
│ │ ├── contexts/ # React上下文
│ │ ├── pages/ # 页面组件
│ │ ├── services/ # API服务
│ │ ├── App.tsx # 主应用组件
│ │ └── index.tsx # 入口文件
│ ├── .env # 环境变量
│ └── package.json # 依赖配置
├── start.sh # 启动脚本
└── README.md # 项目说明
- ✅ 用户注册和登录
- ✅ JWT令牌认证
- ✅ 个人信息管理
- ✅ 发布遗失物品
- ✅ 物品列表展示(支持搜索、筛选、分页)
- ✅ 物品详情查看
- ✅ 更新物品状态(遗失中/已找到/已归还)
- ✅ 删除物品
- ✅ 为物品提供线索
- ✅ 线索列表展示
- ✅ 上传线索图片
- ✅ 删除线索
- ✅ 图片上传和预览
- ✅ 响应式设计
- ✅ 错误处理和验证
- ✅ 友好的用户界面
- Node.js (v14+)
- PostgreSQL (v12+)
- npm 或 yarn
# 1. 进入项目目录
cd lost-and-found-system
# 2. 运行启动脚本
./start.sh启动脚本会自动:
- 检查依赖
- 安装必要的包
- 初始化数据库
- 启动前后端服务
后端:
cd backend
npm install
npm start前端:
cd frontend
npm install
npm start- 确保PostgreSQL服务正在运行
- 创建数据库:
createdb lost_and_found
- 初始化数据库表:
psql -h localhost -U postgres -d lost_and_found -f backend/config/init.sql
DB_HOST=localhost
DB_PORT=5432
DB_NAME=lost_and_found
DB_USER=postgres
DB_PASSWORD=your_password
JWT_SECRET=your_jwt_secret_key
JWT_EXPIRES_IN=7d
PORT=5000REACT_APP_API_URL=http://localhost:5000/api
REACT_APP_UPLOAD_URL=http://localhost:5000/uploadsPOST /api/auth/register- 用户注册POST /api/auth/login- 用户登录GET /api/auth/me- 获取当前用户信息
GET /api/items- 获取物品列表(支持分页、筛选)GET /api/items/:id- 获取物品详情POST /api/items- 创建新物品(支持图片上传)PATCH /api/items/:id/status- 更新物品状态DELETE /api/items/:id- 删除物品
GET /api/clues/item/:itemId- 获取物品的线索列表POST /api/clues- 创建新线索(支持图片上传)PUT /api/clues/:id- 更新线索DELETE /api/clues/:id- 删除线索
系统已预置测试账号:
- 用户名:
testuser - 密码:
test123
启动后可通过以下地址访问:
- 前端应用: http://localhost:3000
- 后端API: http://localhost:5000
- 健康检查: http://localhost:5000/health
- API文档: http://localhost:5000/
系统包含4个核心表:
- users - 用户信息
- items - 物品信息
- clues - 线索信息
- item_images - 物品图片
详细表结构见 backend/config/init.sql
- 支持上传图片文件(jpg, png, gif)
- 单个文件大小限制:5MB
- 物品最多可上传5张图片
- 线索最多可上传1张图片
- 文件存储在
backend/uploads/目录
- 密码使用bcrypt加密存储
- JWT令牌认证
- SQL注入防护
- 文件类型验证
- 跨域资源共享(CORS)
系统支持各种设备尺寸:
- 桌面端 (≥1200px)
- 平板端 (768px-1199px)
- 移动端 (<768px)
-
数据库连接失败
- 检查PostgreSQL服务是否运行
- 验证数据库配置信息
- 确保数据库用户有访问权限
-
端口冲突
- 后端默认端口:5000
- 前端默认端口:3000
- 可在配置文件中修改端口号
-
文件上传失败
- 检查上传目录权限
- 验证文件类型和大小
- 确保磁盘空间充足
后端日志:
cd backend
npm start前端日志:
cd frontend
npm start本项目仅供学习和演示使用。
欢迎提交Issue和Pull Request来改进这个项目。
如有问题,请:
- 查看本文档的故障排除部分
- 检查控制台错误信息
- 提交Issue描述问题