仓库中同时保留了同一套业务的两种后端实现:
Node.js + Express:当前目录即为服务端实现(推荐生产使用)archive-php/:基于 PHP + MySQL 的服务端实现(已归档,功能落后于 Node.js 版本,仅用于学习参考)项目聚焦于 图片上传、可视化展示、标签检索、后台管理 等核心能力,适合作为个人照片墙、轻量图库系统、前后端分离练手项目,以及双语言后端实现对照参考。
Node.js 与 PHP 两套版本photo-wall
HanphoneJan/photo-wall
photo-wall-server/
├── app.js # 应用入口
├── config/ # 数据库和业务配置
│ ├── config.js # 通用配置(密钥、端口等)
│ └── db.js # PostgreSQL 数据库连接配置
├── controller/ # 业务控制器
│ ├── admin/ # 后台管理控制器
│ │ ├── addTag.js
│ │ ├── adminShow.js
│ │ ├── adminUpdate.js
│ │ ├── changePhotoType.js
│ │ ├── changeUser.js
│ │ ├── createTag.js
│ │ ├── deletePhoto.js
│ │ ├── deletePhotoTag.js
│ │ ├── deleteTag.js
│ │ ├── deleteUser.js
│ │ ├── getAdminTag.js
│ │ └── getUser.js
│ ├── getTag.js
│ ├── likes.js
│ ├── search.js
│ ├── show.js
│ ├── upload.js
│ └── visitCount.js
├── middleware/ # 中间件
│ └── interceptor.js # JWT 鉴权拦截器
├── routes/ # 路由定义
│ ├── admin.js # 后台管理路由
│ └── index.js # 公开接口路由
├── utils/ # 通用工具函数
│ ├── password.js # 密码哈希工具
│ └── token.js # JWT 生成与校验
├── archive-php/ # PHP + MySQL 实现(归档)
│ ├── README.md
│ ├── .env.example # PHP 环境变量示例
│ ├── application.php # PHP 应用入口
│ ├── 404.html # 错误页面
│ ├── atlas.sql # MySQL 初始化脚本
│ ├── nginx.conf # Nginx 配置示例
│ ├── config/ # PHP 配置目录
│ │ ├── config.php
│ │ ├── db_connect.php
│ │ ├── email_connect.php
│ │ └── env.php
│ ├── controller/ # PHP 控制器
│ │ ├── admin/ # PHP 后台管理
│ │ │ ├── addTag.php
│ │ │ ├── adminShow.php
│ │ │ ├── adminUpdate.php
│ │ │ ├── changePhotoType.php
│ │ │ ├── changeUser.php
│ │ │ ├── createTag.php
│ │ │ ├── deletePhoto.php
│ │ │ ├── deletePhotoTag.php
│ │ │ ├── deleteTag.php
│ │ │ ├── deleteUser.php
│ │ │ ├── getAdminTag.php
│ │ │ └── getUser.php
│ │ ├── forgotPassword.php
│ │ ├── getTag.php
│ │ ├── likes.php
│ │ ├── login.php
│ │ ├── register.php
│ │ ├── search.php
│ │ ├── sendVerificationCode.php
│ │ ├── show.php
│ │ ├── upload.php
│ │ └── visitCount.php
│ └── interceptor/ # PHP 拦截器
│ ├── interceptor.php
│ └── token.php
├── ecosystem.config.cjs # PM2 部署配置
├── init.sql # PostgreSQL 初始化脚本
├── package.json
├── package-lock.json
├── README.md
└── .gitignore
两个实现任选其一启动即可,不需要同时运行。
pnpm install
pnpm start
4001config/db.jscd archive-php
cp .env.example .env
php -S 127.0.0.1:3003 application.php
archive-php/atlas.sqlarchive-php/nginx.confarchive-php/.env.examplearchive-php/.envpm2 start ecosystem.config.cjs
pm2 save
pm2 startup