2026.06.04

AI 开发实战:个人博客网站建设(一):后端服务

从零到一,使用AI工具开发,包含完整的后端服务、后台管理、博客网站,从项目创建到部署的整个流程。

前言

AI开发无疑是未来编程的主流方向,但学会正确使用AI并不容易。与其纸上谈兵,不如边学边做,在实践中积累经验。于是,我决定从零开发一个个人博客网站——如你所见,这个博客正是此次开发的成果。同时,我也将这一过程简要记录下来,作为学习路上的经验总结。

技术选型

在技术选型上,我会尽量多尝试不同类型的 AI 工具与模型,以体验不同的开发效果。具体到后端服务的开发,我选择了 Claude Code 作为 AI 辅助工具,搭配国内流行的 GLM 5 模型,并添加了 Everything Claude Code 插件来辅助开发。由于我对后端开发学习较少,并不擅长,因此选择了一个对前端开发者更易上手的 Node.js 框架——NestJS。

由于域名的审批时间需要很长,开发前可以先去申请一个域名以便后续部署使用。

需求设计

通过与AI对话,让其先简单生成博客网站最基础的需求文档,以便后续能够根据文档生成所需数据库内容。

/ecc:plan 请作为资深产品经理,为个人博客网站设计后台管理功能的PRD文档,输出到项目根目录的PRD.md文件中。
- 根据互联网调研主流博客后台的功能设计最佳实践,多个方案时需反复询问确认,勿自行决定
- 文档内容结构简洁易读,便于AI快速理解上下文
- 仅设计实现最基础的用户登录、文章、标签管理等内容
- 重点描述功能逻辑、用户交互流程、业务规则
- 不涉及技术实现、数据库设计、API设计等内容

如果生成的文档有偏差时要及时纠正,确保能够实现最基础的内容。

数据库设计

/ecc:plan请作为资深的后端开发工程师,根据PRD.md内容从零设计一个个人博客网站所需的数据库表,输出到database.md文
档中。
- 根据互联网调研主流功能设计最佳实践,多个方案时需反复询问确认,勿自行决定
- 文档内容结构简洁易读,便于AI快速理解上下文
- 数据库类型为mysql

直接让其通过需求文档先设计数据库,设计过程根据需求及时让AI进行调整,如数据的是否使用软删除、表名规范等。

项目初始化

/ecc:plan请作为资深的后端开发工程师,使用nestjs+ts从零创建个后端项目。
- 根据互联网调研最佳的开发方案,多个方案时需反复询问确认,勿自行决定
- 根据当前PRD文档分析所需的依赖,依赖内容要求使用最新版本
- 初始化项目,分析,安装所需的依赖
- 仅创建基本的项目结构,不实现接口
- 生成配置好数据库连接等配置文件

完善项目配置文件

生成项目的环境配置方案可能不太合适,因此要根据情况及时调整。

/ecc:plan 有关环境config配置的方式,更换采用yaml+env的方案,确保能够生成良好的配置数据结构,也避免上传敏感的配置信息
/ecc:plan添加node脚本,用于读取config下可配置的信息,生成用于可配置的env文件,以便填入环境的变量

Snipaste_2026-06-03_23-26-27

其他优化

/ecc:plan在common下创建utils文件夹,并新增文件管理与业务无关的通用工具函数,将deepMerge迁移至其中合适的文件再导出
/ecc:plan
- 使用autoLoadEntities将获取config配置的字符串提取为常量
- 新增config有关的ts类型
- 常量与类型存放在src/config下的文件内
- 直接从config.get<Database>(database)获取整个配置对象进行赋值
- AllExceptionsFilter修改为GlobalExceptionFilter,并修改文件命名,让文件名称与类命名关联
- 采用策略模式处理不同的异常类型,对非服务器异常的异常status正常返回200,由前端自定义处理
- 为当前项目的函数方法、特殊处理逻辑提供注释说明

总结为SKILL

/ecc:plan将以上优化过程总结为skill
- skill的根据内容分成不同的文件
- 便于AI快速理解上下文,并决定生成代码的规则、规范
- 不涉及的具体的业务内容

af371eae9814445e9c8c6bf485fe8950

初始化数据库

数据库需要提前准备,数据库的连接、创建这里不做描述。 有数据库后运行之前让AI写的开发环境配置文件生成脚本pnpm config:setup,在生成的配置文件中填写数据库信息。 先检查下scripts中的migration命令是否是否正确,没问题后运行。

pnpm migration:generate
pnpm migration:run

数据库便初始化完毕,接下就可以正常开发接口了。

用户登录认证功能

小试牛刀,不必基于一次完成所有接口,先生成两个接口看看效果,调整好AI生成的代码风格、规范后再完成剩下的接口。

/ecc:plan 根据PRD文档,实现用户注册和登录接口

# 注册接口(POST /user/register):
- 接收 username、email、password
- 验证参数(用户名 3-50 字符,邮箱格式正确,密码至少 6 位)
- 检查用户名和邮箱是否已存在
- 密码用 bcrypt 加密
- 保存到数据库
- 返回成功信息

# 登录接口(POST /user/login):
- 接收 username、password
- 验证用户是否存在
- 验证密码是否正确
- 生成 JWT token(有效期 7 天)
- 返回 token 和用户信息
/ecc:plan 完善JwtAuthGuard
- 完善jwt登录判断
- 守卫添加至app下做全局
- 添加自定义装饰器A1lowAnon做免判断白名单
/ecc:plan 代码规范优化
- 所有的类型、属性、方法、方法内的逻辑、类、类属性、类方法等等都需要适当添加注释
- 新增@/文件别名,优化”."外层文件的引1入,引入最外层文件下代码优先使用别名
- index桶文件的使用”export *“导出所有
- 需自定义中文异常提示,如“名称长度不能超过50个字符”
- 必传字段优先做判空,显示不能为空
- 校验错误时仅message回显示第一条即可
- 将规范写入skill中

文章、tag功能开发

接口的风格、规范确定后,可直接生成剩余需要的接口内容。按照自己的设计,开发对应的接口即可。

/ecc:plan根据prd内容设计并开发tag、文章等相关接口开发

阿里OSS上传

后续的迭代开发会使用图片相关的上传、下载等功能,这里使用的是阿里的OSS进行管理资源,关于OSS的购买、配置等内容可参考官方文档,或者网上查询教程,这里不做描述,在准备好OSS相关配置、密钥信息后,开始继续有关上传服务的开发。

/ecc:plan接入阿里图片上传ali-oss
- 在config添加可用于配置region、bucket、accesskeyld、accesskeySecret等信息
- 生成上传图片上传接口,能够压缩图片大小的同时,确保图片质量

此时,我们的域名可能还未申请到,因此,这里还需要开发一个开放的接口来代理加载图片。 并且让有保存图片地址的相关接口,仅保存图片在OSS上相对地址,以便后续更换图片域名。

/ecc:plan 新增图片加载接口,并对图片上传相关的接口进行优化
- 封装图片地址解析函数,使得保存数据时仅保存图片的相对地址
- 封装图片地址拼接函数,在接口返回时使用代理地址对图片进行拼接再返回
- 根据OSS资源下载方式,新增图片加载接口,接口无权限控制,可跨域请求

至此,接口开发后可在postman上测试调整,确认没问题后便完成了后端服务基础功能的开发。

读到哪里,就把此刻留在哪里全部