目實(shí)踐:基于 Express.js + TypeScript + Prisma 的 REST API 模板全解析)
Agentic Awesome Skills 項(xiàng)目實(shí)踐基于 Express.js TypeScript Prisma 的 REST API 模板全解析【免費(fèi)下載鏈接】agentic-awesome-skillsAAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,600 agentic skills. Includes CLI, local MCP, catalog, plugins, and Workbench.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/an/agentic-awesome-skills導(dǎo)讀本文以 Agentic Awesome SkillsAAS倉庫中 app-builder 技能的 express-api 項(xiàng)目模板 為核心主體系統(tǒng)拆解一套以 Node.js 20、Express.js、TypeScript、PostgreSQL Prisma、Zod、JWT bcrypt 為技術(shù)棧的 REST API 腳手架原則。讀完本文你將掌握這套模板的目錄分層、中間件裝配順序、統(tǒng)一響應(yīng)契約、初始化命令與工程最佳實(shí)踐并理解它如何在 AAS 的 app-builder 編排體系中通過關(guān)鍵詞檢測被自動選中作為 Agent 快速落地 API 服務(wù)的基線規(guī)范。模板定位App Builder 技能樹中的 REST API 分支在 AAS 倉庫中express-api 模板并不是孤立存在的文件而是 app-builder 技能 下 13 個(gè)項(xiàng)目模板之一。該技能整體承擔(dān)應(yīng)用構(gòu)建編排器職責(zé)分析用戶自然語言請求 → 判定項(xiàng)目類型 → 選擇技術(shù)棧 → 規(guī)劃目錄結(jié)構(gòu) → 協(xié)調(diào)多個(gè)專職 Agent 分工實(shí)施。在 templates/SKILL.md 的模板索引表中express-api對應(yīng)的技術(shù)棧標(biāo)記為 Express JWT適用場景明確為REST API在 project-detection.md 的關(guān)鍵詞矩陣中當(dāng)用戶請求中出現(xiàn)api、backend、service、rest等關(guān)鍵詞時(shí)項(xiàng)目類型被判定為 API Service并自動路由到express-api模板該技能同時(shí)維護(hù)了配套的 tech-stack.md2025 默認(rèn)技術(shù)棧選型與 scaffolding.md目錄結(jié)構(gòu)與核心文件原則本文討論的模板正是這些全局原則在純后端 API場景下的具體落地。因此這套模板的目標(biāo)讀者與使用者是需要從零搭建后端服務(wù)的 Agent 或開發(fā)者希望獲得一套開箱即用、結(jié)構(gòu)清晰、類型安全、帶鑒權(quán)與校驗(yàn)?zāi)芰Φ?Express 工程基線。技術(shù)??傆[模板在 frontmatter 中聲明了核心定位Express.js REST API template principles. TypeScript, Prisma, JWT.并以表格固化了一組默認(rèn)選型組件技術(shù)運(yùn)行時(shí)Node.js 20框架Express.js語言TypeScript數(shù)據(jù)庫PostgreSQL Prisma校驗(yàn)Zod鑒權(quán)JWT bcrypt這組選型與 AAS 全局技術(shù)棧文檔 tech-stack.md 的默認(rèn)方向保持一致數(shù)據(jù)庫首選 PostgreSQL、ORM 首選 Prisma/Drizzle、校驗(yàn)首選 Zod/TypeBox??梢酝茢嗄0灏押蠖?API 場景收斂為一條確定性的技術(shù)路徑Express 負(fù)責(zé) HTTP 層Prisma 負(fù)責(zé)類型安全的數(shù)據(jù)庫訪問Zod 負(fù)責(zé)運(yùn)行時(shí)輸入校驗(yàn)JWT bcrypt 負(fù)責(zé)身份認(rèn)證與密碼哈希TypeScript 在編譯期提供全鏈路類型保障。需要說明的適用前提Node.js 20 是模板聲明的最低運(yùn)行時(shí)版本要求PostgreSQL 是 Prisma 的默認(rèn)數(shù)據(jù)庫目標(biāo)實(shí)際使用時(shí)需在prisma/schema.prisma中配置正確的數(shù)據(jù)源連接串。目錄結(jié)構(gòu)分層架構(gòu)的物理映射模板給出了標(biāo)準(zhǔn)的目錄骨架這是整套工程規(guī)范的核心骨架完整繼承如下project-name/ ├── prisma/ │ └── schema.prisma ├── src/ │ ├── app.ts # Express setup │ ├── config/ # Environment │ ├── routes/ # Route handlers │ ├── controllers/ # Business logic │ ├── services/ # Data access │ ├── middleware/ │ │ ├── auth.ts # JWT verify │ │ ├── error.ts # Error handler │ │ └── validate.ts # Zod validation │ ├── schemas/ # Zod schemas │ └── utils/ └── package.json該結(jié)構(gòu)與 scaffolding.md 中強(qiáng)調(diào)的分層架構(gòu)、職責(zé)單一原則一脈相承每一層有明確邊界prisma/schema.prisma唯一的數(shù)據(jù)庫模型定義入口數(shù)據(jù)模型、枚舉、關(guān)系都在此聲明是后續(xù)遷移與類型生成的源頭src/app.tsExpress 應(yīng)用裝配入口負(fù)責(zé)注冊中間件棧、掛載路由、啟動服務(wù)src/config/集中管理環(huán)境變量讀取與配置對象避免配置散落各處對應(yīng)最佳實(shí)踐Environment-based configsrc/routes/只做 URL 到 handler 的映射保持薄路由具體邏輯下沉到 controllersrc/controllers/業(yè)務(wù)編排層接收請求、調(diào)用 service、組裝響應(yīng)對應(yīng)最佳實(shí)踐Layer architecture的中間層src/services/數(shù)據(jù)訪問層封裝 Prisma 查詢與領(lǐng)域操作controller 不直接觸碰數(shù)據(jù)庫src/middleware/auth.tsJWT 校驗(yàn)中間件保護(hù)需要認(rèn)證的路由src/middleware/error.ts全局錯誤處理中間件統(tǒng)一輸出錯誤響應(yīng)src/middleware/validate.ts基于 Zod schema 的請求校驗(yàn)中間件src/schemas/集中存放 Zod schema供校驗(yàn)中間件與類型推導(dǎo)復(fù)用src/utils/通用工具函數(shù)??蓮?fù)制執(zhí)行的目錄創(chuàng)建命令如下示例mkdir -p project-name/src/{config,routes,controllers,services,middleware,schemas,utils} mkdir -p project-name/prisma中間件棧請求生命周期的裝配順序模板明確規(guī)定了中間件裝配的六步順序這一順序直接影響請求處理的安全性與正確性順序中間件職責(zé)1helmet安全防護(hù)設(shè)置各類 HTTP 安全響應(yīng)頭2cors跨域資源共享配置3morganHTTP 請求日志4body parsing解析 JSON/urlencoded 請求體5routes業(yè)務(wù)路由6error handler統(tǒng)一錯誤兜底順序背后的原理可以這樣理解helmet 與 cors 屬于全局安全前置必須在任何業(yè)務(wù)邏輯前生效morgan 記錄請求日志應(yīng)盡早介入以捕獲完整請求信息body parsing 必須在路由之前執(zhí)行否則控制器拿不到請求體錯誤處理中間件必須放在最后才能捕獲前面所有環(huán)節(jié)拋出的異常。這是 Express 中間件洋蔥模型的標(biāo)準(zhǔn)排布方式。對應(yīng)的裝配示例依據(jù)模板順序展開import express from express; import helmet from helmet; import cors from cors; import morgan from morgan; import { errorHandler } from ./middleware/error; import routes from ./routes; const app express(); app.use(helmet()); // 1. security headers app.use(cors()); // 2. cross-origin app.use(morgan(dev)); // 3. logging app.use(express.json()); // 4. body parsing app.use(routes); // 5. business routes app.use(errorHandler); // 6. error handler export { app };API 響應(yīng)契約統(tǒng)一的數(shù)據(jù)信封模板定義了前后端約定俗成的統(tǒng)一響應(yīng)結(jié)構(gòu)這是團(tuán)隊(duì)協(xié)作與前端類型化的基礎(chǔ)類型結(jié)構(gòu)成功{ success: true, data: {...} }失敗{ error: message, details: [...] }成功響應(yīng)統(tǒng)一包一層success: true布爾標(biāo)記與data數(shù)據(jù)負(fù)載客戶端據(jù)此無需再自行判斷狀態(tài)碼語義錯誤響應(yīng)使用error字段承載人類可讀的錯誤信息details數(shù)組用于攜帶結(jié)構(gòu)化細(xì)節(jié)典型場景是 Zod 校驗(yàn)失敗時(shí)的字段級錯誤列表。這一契約由middleware/error.ts全局錯誤處理器與middleware/validate.tsZod 校驗(yàn)失敗轉(zhuǎn)換共同保障確保所有路由共享同一套錯誤格式。示例錯誤響應(yīng)形狀{ error: Validation failed, details: [ { field: email, message: Invalid email address } ] }初始化步驟從空目錄到可運(yùn)行服務(wù)模板給出了六步初始化流程這是落地最快的路徑創(chuàng)建項(xiàng)目目錄mkdir project-name初始化包管理npm init -y安裝依賴npm install express prisma zod bcrypt jsonwebtoken配置 Prismanpx prisma init生成 schema 與連接配置并在prisma/schema.prisma中聲明數(shù)據(jù)模型推送數(shù)據(jù)庫結(jié)構(gòu)npm run db:push對應(yīng)prisma db push將 schema 同步到 PostgreSQL啟動開發(fā)服務(wù)npm run dev對應(yīng)tsx watch或nodemon驅(qū)動的 TypeScript 開發(fā)腳本由于模板同時(shí)使用 TypeScript 與 Prisma實(shí)際工程通常還需補(bǔ)充以下開發(fā)依賴與腳本依據(jù)技術(shù)棧推導(dǎo)供參考npm install -D typescript tsx types/express types/jsonwebtoken types/bcrypt// package.json scripts示意 { scripts: { dev: tsx watch src/app.ts, build: tsc, db:push: prisma db push, db:migrate: prisma migrate dev } }關(guān)于db:push與db:migrate的取舍db:push適合模板初始化階段的快速建表直接依據(jù) schema 同步數(shù)據(jù)庫結(jié)構(gòu)而不產(chǎn)生遷移歷史進(jìn)入正式迭代后應(yīng)切換到prisma migrate dev生成可版本化的遷移文件。最佳實(shí)踐模板背后的工程底線模板在結(jié)尾固化了一批最佳實(shí)踐逐條展開如下分層架構(gòu)routes → controllers → services嚴(yán)格的三層依賴方向路由不寫業(yè)務(wù)、控制器不寫 SQL、服務(wù)層負(fù)責(zé)數(shù)據(jù)訪問對應(yīng)目錄結(jié)構(gòu)中的routes/、controllers/、services/三個(gè)目錄。這與 scaffolding.md 強(qiáng)調(diào)的薄路由、邏輯下沉原則一致使用 Zod 校驗(yàn)所有輸入所有請求體、查詢參數(shù)、路徑參數(shù)都應(yīng)經(jīng)過middleware/validate.ts校驗(yàn)schema 統(tǒng)一存放在schemas/既能運(yùn)行時(shí)攔截非法輸入又能通過z.infertypeof schema推導(dǎo)出靜態(tài)類型集中式錯誤處理絕不散落 try/catch統(tǒng)一交給middleware/error.ts收口配合統(tǒng)一的{ error, details }響應(yīng)契約避免錯誤格式漂移基于環(huán)境的配置連接串、JWT 密鑰、端口等敏感與可變值全部來自環(huán)境變量集中在config/讀取并導(dǎo)出類型化配置對象配合.env.example提交模板、.env本地注入的慣例使用 Prisma 實(shí)現(xiàn)類型安全的數(shù)據(jù)庫訪問以prisma/schema.prisma為唯一模型源生成的 Prisma Client 在編譯期約束查詢字段與返回類型從根源上減少手寫 SQL 的拼寫錯誤與類型失配。在 App Builder 編排流程中的落地方式了解模板本身之后還應(yīng)理解它在 Agent 工作流中的觸發(fā)與執(zhí)行方式。根據(jù) SKILL.md 的選擇性閱讀規(guī)則當(dāng)收到類似創(chuàng)建一個(gè)帶用戶認(rèn)證的 REST API請求時(shí)編排流程如下project-detection.md 對請求做關(guān)鍵詞分詞命中api/backend/service/rest后判定項(xiàng)目類型為 API Service指向express-api模板只讀取 templates/express-api/TEMPLATE.md 這一個(gè)模板文件按其技術(shù)棧與目錄結(jié)構(gòu)落地按 agent-coordination.md 的流水線由 Database Architect 設(shè)計(jì) Prisma schema → Backend Specialist 實(shí)現(xiàn) routes/controllers/services/middleware → 進(jìn)入并行階段由 Security Auditor 與 Test Engineer 審查與補(bǔ)測 → 最后由 DevOps Engineer 配置環(huán)境與部署。這套模板的價(jià)值在于把Express API 工程長什么樣的隱性經(jīng)驗(yàn)顯性化為可復(fù)用的模板文件讓 Agent 與開發(fā)者共享同一套結(jié)構(gòu)、契約與規(guī)范減少每次從零搭建時(shí)的決策成本與風(fēng)格漂移。小結(jié)express-api 模板是 AAS app-builder 技能面向純后端 REST API場景的標(biāo)準(zhǔn)化答案以 Node.js 20 為運(yùn)行時(shí)、TypeScript 貫穿全鏈路Express 承載 HTTP 層Prisma 提供 PostgreSQL 的類型安全訪問Zod 把關(guān)所有輸入JWT bcrypt 完成認(rèn)證與密碼安全六步初始化流程可在數(shù)分鐘內(nèi)拉起可運(yùn)行服務(wù)統(tǒng)一響應(yīng)契約與六段式中間件棧則保障了工程的一致性與可維護(hù)性。對希望讓 Agent 穩(wěn)定產(chǎn)出高質(zhì)量 API 工程的團(tuán)隊(duì)而言這套模板既是腳手架也是一份可直接引用的架構(gòu)規(guī)范。【免費(fèi)下載鏈接】agentic-awesome-skillsAAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,600 agentic skills. Includes CLI, local MCP, catalog, plugins, and Workbench.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/an/agentic-awesome-skills創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考