案例2 · 用 Claude Code CLI 生成 Express 接口并自动自测

本节目标

场景:在空目录里让 Agent 生成一个 GET /api/todos 与 POST /api/todos 的 Express 服务,并自带测试。

给 Agent 的目标(不是步骤):

在当前目录初始化一个最小 Express 服务:
- GET /api/todos 返回内存中的待办列表
- POST /api/todos body={text} 新增一条,返回创建结果
- 用 Node 内置 test runner 写 2 个测试覆盖上述接口
- 跑通 npm test 后再告诉我怎么 npm start

Agent 会自主做的事:npm init、npm i express、写 app.js、写 test.js、npm test。你要做的:先看它改了哪些文件、再跑测试确认。

一个最小可运行产物(节选):

// app.js(由 Agent 生成,可直接 node app.js 启动)
const express = require('express')
const app = express()
app.use(express.json())
const todos = []
app.get('/api/todos', (req, res) => res.json(todos))
app.post('/api/todos', (req, res) => {
  const item = { id: todos.length + 1, text: req.body.text }
  todos.push(item); res.status(201).json(item)
})
app.listen(3000, () => console.log('on :3000'))

运行方式:npm init -y && npm i express && node app.js,另开终端 curl localhost:3000/api/todos。

名词解释

课后练习

  1. 用 L3 Agent 生成服务后,你第一件该做的事是什么?
    • 答案:用 git diff 或文件列表看清它新建/改了哪些文件,确认没有越界改动,再跑测试。
  2. 这个例子的 todos 用内存数组,上线会有什么问题?
    • 答案:进程重启数据全丢、多实例不共享、无并发保护;生产须换数据库(如 SQLite/Postgres)并加持久化。

总结

这个案例展示了 Vibe Coding 最"爽"的形态:L3 Agent 接管了从初始化到自测的全流程,你只给了"目标"而非"步骤"。但爽的背后是责任转移——Agent 自主改多文件,你不能再假装"代码都是我写的所以我知道它干嘛"。我的铁律是:Agent 跑完,第一件事永远是 git diff 看清它动了什么,再跑测试确认行为。很多人被 Agent "自动搞定"的丝滑迷惑,直接上线,结果踩到它自作主张加的依赖或改坏的配置。记住,自主度越高,审阅的权重越大。把"搭建交给它、把关留给你",L3 才是杠杆;把"搭建和把关都交给它",L3 就是地雷。