99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

T3 Stack 實(shí)戰(zhàn):用 TypeScript、Next.js、tRPC、Prisma 構(gòu)建全棧內(nèi)部工具

T3 Stack 實(shí)戰(zhàn):用 TypeScript、Next.js、tRPC、Prisma 構(gòu)建全棧內(nèi)部工具 去年年底我接了一個(gè)內(nèi)部工具的重構(gòu)需求項(xiàng)目代號(hào)就叫t3code。最初的需求很樸素把團(tuán)隊(duì)散落在各個(gè)文檔里的流程、命令和模板整理成一套可交互的網(wǎng)頁(yè)工具讓新同學(xué)能照著操作老同學(xué)能快速查參數(shù)。但做著做著我發(fā)現(xiàn)這個(gè)項(xiàng)目的技術(shù)選型比業(yè)務(wù)本身更值得聊——它最終落到了 TypeScript Next.js tRPC Prisma Tailwind 這一整套全棧組合上也就是社區(qū)里常說(shuō)的 T3 Stack。這篇文章我會(huì)把t3code從立項(xiàng)到部署全過(guò)程的思路、配置、代碼和踩過(guò)的坑完整寫(xiě)出來(lái)如果你正在糾結(jié)要不要用這套技術(shù)?;蛘咭呀?jīng)入坑想看看別人的實(shí)踐這篇應(yīng)該對(duì)你有用。先說(shuō)明一下t3code不是什么開(kāi)源框架也不是某個(gè)現(xiàn)成產(chǎn)品的倉(cāng)庫(kù)名它只是我給這個(gè)內(nèi)部項(xiàng)目起的代號(hào)。但這個(gè)代號(hào)背后選型的過(guò)程以及每一層技術(shù)承擔(dān)的角色完全可以作為一個(gè)全棧項(xiàng)目的參考樣本。接下來(lái)我會(huì)按照項(xiàng)目推進(jìn)的時(shí)間線來(lái)講先講整體設(shè)計(jì)和技術(shù)選型再講腳手架搭建和數(shù)據(jù)庫(kù)建模然后是 tRPC 的完整鏈路實(shí)現(xiàn)最后是部署和那些你上網(wǎng)搜都不一定搜得到的坑。1. 項(xiàng)目背景與整體設(shè)計(jì)思路1.1 項(xiàng)目要解決的痛點(diǎn)與拆解方式t3code這個(gè)項(xiàng)目的原始需求本質(zhì)上是把團(tuán)隊(duì)里的“隱形知識(shí)”變成“顯性工具”。我之前統(tǒng)計(jì)過(guò)團(tuán)隊(duì)內(nèi)部常用的命令、腳本、配置片段大概有六十多條分散在 Confluence、群公告、個(gè)人筆記里版本還對(duì)不上。比如同一個(gè)部署命令有人寫(xiě)成 Docker 形式有人寫(xiě)成裸進(jìn)程形式新同學(xué)照著舊文檔跑必然報(bào)錯(cuò)。所以第一版設(shè)計(jì)就定了三個(gè)原則所有內(nèi)容必須有唯一數(shù)據(jù)源、所有操作盡量能在線執(zhí)行而非復(fù)制粘貼、所有代碼示例必須與實(shí)際代碼倉(cāng)庫(kù)保持同步。為了做到這三點(diǎn)技術(shù)選型一開(kāi)始就沒(méi)什么懸念。前端需要一套成熟的 React 生態(tài)后端需要一個(gè)能直接復(fù)用前端類型定義的服務(wù)端方案數(shù)據(jù)庫(kù)需要一個(gè)支持快速迭代且類型安全的 ORM。結(jié)果就是 TypeScript 打底Next.js 做頁(yè)面和接口宿主tRPC 做端到端類型安全的通信Prisma 管理 PostgreSQL最后用 Tailwind 快速搭界面。這五個(gè)組件正好就是 T3 Stack 的完整陣容。這里我多說(shuō)一句為什么不用傳統(tǒng)的 REST 方案。如果按 REST 來(lái)寫(xiě)前端需要維護(hù)一套 API 路徑常量后端需要寫(xiě)路由和中間層校驗(yàn)兩邊各維護(hù)一份類型定義聯(lián)調(diào)時(shí)總會(huì)有一方先改。tRPC 的思路是讓你直接“調(diào)用函數(shù)”而且函數(shù)簽名里的類型是自動(dòng)從前端推斷到后端的改一處另一處馬上報(bào)錯(cuò)。對(duì)于t3code這種需要頻繁增刪字段的配置管理工具這個(gè)特性省下的是實(shí)實(shí)在在的開(kāi)發(fā)時(shí)間。1.2 為什么用 T3 Stack 而不是其他組合其實(shí)我在立項(xiàng)前也對(duì)比過(guò)幾套方案。第一套是 Next.js GraphQL TypeScriptGraphQL 的 schema 定義和安全校驗(yàn)都很強(qiáng)但對(duì)一個(gè)幾十個(gè)接口的內(nèi)部工具來(lái)說(shuō)寫(xiě) schema、配 resolver、維護(hù) fragment 的復(fù)雜度偏高收益不明顯。第二套是 NestJS React 前后端分離工程上是標(biāo)準(zhǔn)做法但兩個(gè)倉(cāng)庫(kù)之間的聯(lián)調(diào)和類型同步成本在兩個(gè)人開(kāi)發(fā)的小項(xiàng)目里會(huì)被放大。最終定下 T3 組合的核心原因可以歸納成三條單一代碼倉(cāng)庫(kù)、單一語(yǔ)言、單一類型系統(tǒng)前后端不存在“跨語(yǔ)言邊界”。初始化體驗(yàn)極好create-t3-app會(huì)把 Next.js、tRPC、Prisma、Tailwind 的工程模板一次性裝好省去手工拼裝的時(shí)間。社區(qū)維護(hù)積極Next.js 和 Prisma 的版本迭代都會(huì)被模板及時(shí)跟進(jìn)。另外要提一個(gè)反向觀點(diǎn)T3 Stack 不是銀彈。如果你的項(xiàng)目需要對(duì)外提供開(kāi)放 API或者有其他語(yǔ)言的服務(wù)端要對(duì)接tRPC 的“函數(shù)調(diào)用”模式就不太合適REST 或 GraphQL 才是兼容性更好的選擇。所以這個(gè)選型適合“前后端都由同一撥人維護(hù)的內(nèi)部工具類項(xiàng)目”t3code恰好屬于這一類。2. 從零搭建 t3code腳手架與核心配置2.1 初始化項(xiàng)目與選項(xiàng)選擇t3code的初始化我用的是官方腳手架一條命令就能拉起整套工程npx create-t3-applatest t3code過(guò)程會(huì)問(wèn)你幾個(gè)問(wèn)題這里把當(dāng)時(shí)的選擇列出來(lái)并解釋原因TypeScript必選整個(gè) T3 棧的基石不選就沒(méi)有類型安全可言。Next.js選 App Router 模式新項(xiàng)目沒(méi)必要再用 Pages Router。tRPC選這是前后端聯(lián)通的核心。Prisma選配合 PostgreSQL 使用。Tailwind CSS選界面開(kāi)發(fā)效率和一致性都靠它。初始化 Git選方便隨時(shí)回滾。導(dǎo)入路徑別名選/別名能讓代碼結(jié)構(gòu)更清晰。跑完之后目錄結(jié)構(gòu)是這樣的核心部分t3code/ ├── prisma/ │ ├── schema.prisma │ └── seed.ts ├── src/ │ ├── app/ │ │ ├── api/trpc/[trpc]/route.ts │ │ ├── layout.tsx │ │ └── page.tsx │ ├── server/ │ │ ├── api/ │ │ │ ├── routers/ │ │ │ ├── root.ts │ │ │ └── trpc.ts │ │ └── db.ts │ ├── trpc/ │ │ ├── server.ts │ │ └── client.ts │ └── styles/ │ └── globals.css └── .env這個(gè)結(jié)構(gòu)最有價(jià)值的地方在于src/server/api里寫(xiě)路由src/trpc里提供前后端共享的類型工具前端頁(yè)面完全可以直接引用server層的類型不需要額外的 d.ts 文件。2.2 環(huán)境變量與數(shù)據(jù)庫(kù)配置接下來(lái)是數(shù)據(jù)庫(kù)部分。t3code用的是 PostgreSQL我在本地用 Docker 起了個(gè)實(shí)例.env 配置如下DATABASE_URLpostgresql://postgres:passwordlocalhost:5432/t3code?schemapublic NEXT_PUBLIC_APP_URLhttp://localhost:3000注意一個(gè)細(xì)節(jié)create-t3-app生成的模板默認(rèn)會(huì)在src/server/db.ts里用globalThis做 Prisma 客戶端的全局緩存防止開(kāi)發(fā)模式下熱更新導(dǎo)致連接數(shù)暴增。這個(gè)是模板自動(dòng)處理的但如果你手動(dòng)搭建 Prisma一定要記得自己加這段。然后執(zhí)行遷移npx prisma migrate dev --name init這一步會(huì)根據(jù) schema 生成遷移 SQL 并同步數(shù)據(jù)庫(kù)同時(shí)生成最新的 Prisma Client整個(gè)鏈路到這里就通了。2.3 Tailwind 主題定制界面方面我沒(méi)有用現(xiàn)成的 UI 組件庫(kù)而是直接用 Tailwind 寫(xiě)了基礎(chǔ)樣式。t3code是一個(gè)內(nèi)部工具不需要花哨的視覺(jué)要的是信息密度和一致性。我在globals.css里定義了幾個(gè)關(guān)鍵的設(shè)計(jì)變量tailwind base; tailwind components; tailwind utilities; layer base { :root { --background: 210 40% 98%; --foreground: 222 47% 11%; --primary: 221 83% 53%; --muted: 214 32% 91%; } }這樣做的原因有兩點(diǎn)第一CSS 變量驅(qū)動(dòng)的主題方便后續(xù)加暗色模式不需要改組件代碼第二Tailwind 的hsl(var(--...))寫(xiě)法比硬編碼顏色更可維護(hù)。寫(xiě)組件時(shí)直接bg-background text-foreground就能跟隨主題變化非常順手。3. 核心鏈路用 tRPC 打通全棧類型安全3.1 tRPC 的三個(gè)核心概念tRPC 上手前先記住三個(gè)詞procedure、router、caller。procedure 是對(duì)后端函數(shù)的一個(gè)抽象分 query查詢和 mutation寫(xiě)操作兩類router 是多個(gè) procedure 的集合可以嵌套caller 是服務(wù)端內(nèi)部調(diào)用路由的方式用于在 Next.js 的 Server Component 里直接拿數(shù)據(jù)。t3code里我設(shè)計(jì)了一個(gè)基礎(chǔ)路由結(jié)構(gòu)// src/server/api/routers/entry.ts import { z } from zod; import { createTRPCRouter, publicProcedure } from ../trpc; export const entryRouter createTRPCRouter({ list: publicProcedure.query(async ({ ctx }) { return ctx.db.entry.findMany({ orderBy: { updatedAt: desc }, }); }), byId: publicProcedure.input(z.string()).query(async ({ ctx, input }) { return ctx.db.entry.findUnique({ where: { id: input } }); }), create: publicProcedure .input(z.object({ title: z.string().min(1), content: z.string().min(1), tags: z.array(z.string()).default([]), })) .mutation(async ({ ctx, input }) { return ctx.db.entry.create({ data: input }); }), });這里的zod校驗(yàn)是 tRPC 框架強(qiáng)推的因?yàn)檩斎腩愋秃桶踩r?yàn)可以一次定義。比如create這個(gè) mutation如果前端傳了空字符串程序會(huì)在進(jìn)數(shù)據(jù)庫(kù)之前直接拒絕不需要在業(yè)務(wù)代碼里再寫(xiě)一遍 if 判斷。3.2 一個(gè)完整的 CRUD 實(shí)現(xiàn)鏈路上面這段只是服務(wù)端的路由前端是怎么調(diào)用的呢t3code的頁(yè)面組件里調(diào)用方式是這樣的use client; import { api } from ~/trpc/client; export function EntryList() { const { data, refetch } api.entry.list.useQuery(); const createEntry api.entry.create.useMutation({ onSuccess: () refetch(), }); return ( div {data?.map((entry) ( div key{entry.id} h3{entry.title}/h3 p{entry.content}/p /div ))} button onClick{() createEntry.mutate({ title: test, content: hello })} 添加 /button /div ); }這段代碼里有兩個(gè)容易被忽略但很關(guān)鍵的點(diǎn)。第一api.entry.list.useQuery()返回的data類型是直接從服務(wù)端entry.list這個(gè) procedure 的返回值推斷出來(lái)的。也就是說(shuō)如果后端改了返回結(jié)構(gòu)前端這里會(huì)立刻出現(xiàn)類型報(bào)錯(cuò)不用等接口聯(lián)調(diào)發(fā)現(xiàn)問(wèn)題。第二createEntry.mutate的入?yún)㈩愋鸵彩菑姆?wù)端輸入校驗(yàn)的 zod schema 自動(dòng)推斷的。服務(wù)端要求title必須是字符串且至少 1 個(gè)字符那么前端傳數(shù)字或空字符串在編輯階段就會(huì)報(bào)錯(cuò)。這里的時(shí)間收益是很直觀的內(nèi)部工具的需求變化特別頻繁昨天可能還要tags字段今天就要改成category在 REST 體系下要改后端 schema、前端 interface、接口文檔三處在 tRPC 下只需要改一處剩下兩處類型會(huì)自動(dòng)傳播。3.3 tRPC 和 Next.js Server Component 的結(jié)合除了客戶端調(diào)用t3code的很多頁(yè)面其實(shí)不需要交互只需要在服務(wù)端渲染時(shí)把數(shù)據(jù)取好。這種情況下不需要走 HTTP而是直接用createCaller// src/app/entries/page.tsx import { api } from ~/trpc/server; export default async function EntriesPage() { const entries await api.entry.list(); return ( main {entries.map((entry) ( div key{entry.id}{entry.title}/div ))} /main ); }注意這里的api是~/trpc/server導(dǎo)出的不是客戶端那個(gè)api。它會(huì)在服務(wù)端直接調(diào)用 router 里的函數(shù)數(shù)據(jù)不經(jīng)過(guò)網(wǎng)絡(luò)棧性能上比傳統(tǒng) SSR 還要好。這種寫(xiě)法非常適合內(nèi)容展示類的內(nèi)部頁(yè)面。不過(guò)要注意Server Component 里不能直接調(diào)用需要登錄態(tài)的 mutation因?yàn)?mutation 本身需要返回給前端觸發(fā)。t3code的做法是只讀數(shù)據(jù)用 Server Component需要交互的表單、編輯操作都用 Client Component 調(diào) mutation。4. 數(shù)據(jù)建模與遷移實(shí)戰(zhàn)Prisma 的細(xì)節(jié)與坑4.1 t3code 的數(shù)據(jù)模型設(shè)計(jì)t3code里最核心的數(shù)據(jù)是“條目”也就是那條命令或配置片段。它的模型定義如下model Entry { id String id default(cuid()) title String content String category String? tags String[] status Status default(ACTIVE) authorId String? createdAt DateTime default(now()) updatedAt DateTime updatedAt } enum Status { ACTIVE ARCHIVED } model Tag { id String id default(cuid()) name String unique entries Entry[] }這里我特意選了cuid()而不是自增 id原因很簡(jiǎn)單內(nèi)部工具的數(shù)據(jù)會(huì)頻繁導(dǎo)入導(dǎo)出cuid 不會(huì)因?yàn)閿?shù)據(jù)合并而沖突。tags直接用 PostgreSQL 的 string[] 類型省一張關(guān)聯(lián)表查詢hasTag的場(chǎng)景用tags [docker]就能完成夠用且簡(jiǎn)單。關(guān)于category一開(kāi)始我用了必填字段后來(lái)發(fā)現(xiàn)實(shí)際錄入時(shí)很多條目其實(shí)不好歸類改成了可選。這個(gè)調(diào)整是在實(shí)踐過(guò)程中發(fā)現(xiàn)的也印證了數(shù)據(jù)建模初期別把約束設(shè)得太死盡量給可選等數(shù)據(jù)量上來(lái)了再收緊更穩(wěn)妥。4.2 遷移與重置的坑Prisma 的migrate dev在開(kāi)發(fā)環(huán)境很好用但我踩過(guò)一個(gè)具體的坑當(dāng)我把一個(gè)字段從必填改成可選時(shí)prisma migrate dev生成了一個(gè)帶ALTER COLUMN的 SQL但本地?cái)?shù)據(jù)庫(kù)已經(jīng)有數(shù)據(jù)老數(shù)據(jù)里這個(gè)字段是 null導(dǎo)致在線遷移失敗。這個(gè)問(wèn)題的實(shí)際處理方案是用prisma db push來(lái)繞過(guò)遷移歷史直接同步 schema 到數(shù)據(jù)庫(kù)。但注意這會(huì)改變數(shù)據(jù)庫(kù)結(jié)構(gòu)而不產(chǎn)生遷移文件所以只在純開(kāi)發(fā)環(huán)境用。如果是多環(huán)境部署還是老老實(shí)實(shí)改遷移 SQL或者在 schema 改動(dòng)前先寫(xiě)一個(gè)默認(rèn)值填充腳本。另外還有一個(gè)高頻坑改了schema.prisma之后Prisma Client 的代碼是自動(dòng)生成的但在 Next.js 開(kāi)發(fā)模式下偶爾不會(huì)自動(dòng)刷新導(dǎo)致新字段報(bào)“Unknown argument”。處理方法是強(qiáng)制重新生成npx prisma generate然后重啟 dev server基本都能解決。4.3 種子數(shù)據(jù)與測(cè)試數(shù)據(jù)準(zhǔn)備t3code需要一個(gè)穩(wěn)定的種子數(shù)據(jù)來(lái)驗(yàn)證界面和接口。我在prisma/seed.ts里面放了十幾條真實(shí)常用的命令模板然后用 tsx 運(yùn)行npx tsx prisma/seed.ts種子腳本用 upsert 而不是 create這樣重復(fù)執(zhí)行不會(huì)報(bào)唯一鍵沖突import { PrismaClient } from prisma/client; const prisma new PrismaClient(); async function main() { const dockerEntry await prisma.entry.upsert({ where: { id: seed-docker }, update: {}, create: { id: seed-docker, title: Docker 容器啟動(dòng)模板, content: docker run -d --name demo -p 8080:80 nginx, tags: [docker, nginx], }, }); console.log(Seeded: ${dockerEntry.title}); } main().finally(() prisma.$disconnect());這里用固定 id 是一個(gè)經(jīng)驗(yàn)之談開(kāi)發(fā)時(shí)反復(fù) seed 不會(huì)生成重復(fù)數(shù)據(jù)而且可以放心地在代碼里硬編碼這個(gè) id 作為界面演示數(shù)據(jù)。5. 部署鏈路與性能優(yōu)化要點(diǎn)5.1 部署到 Vercel 的完整配置t3code最終部署在 Vercel 上因?yàn)?Next.js 應(yīng)用用它部署最省心而且支持自動(dòng)預(yù)覽部署分支推送就能生成獨(dú)立預(yù)覽環(huán)境對(duì)團(tuán)隊(duì)協(xié)作很友好。主要配置如下環(huán)境變量DATABASE_URL 用生產(chǎn) PostgreSQL 的地址。構(gòu)建命令prisma migrate deploy next build注意這里是migrate deploy而不是migrate dev前者只會(huì)執(zhí)行已生成的遷移文件不會(huì)在 CI 里創(chuàng)建新遷移??蚣茴A(yù)設(shè)Vercel 會(huì)自動(dòng)識(shí)別 Next.js不需要額外配置。數(shù)據(jù)庫(kù)用的是 Neon 的 PostgreSQL 免費(fèi)版本身支持連接池。不過(guò)在 Vercel Serverless 環(huán)境下數(shù)據(jù)庫(kù)連接數(shù)很容易被并發(fā)請(qǐng)求打滿我的建議是檢查.env里的DATABASE_URL是否包含連接池參數(shù)例如?pgbouncertrueconnection_limit1。這一點(diǎn)很多人會(huì)忽略但實(shí)際部署后遇到連接數(shù)報(bào)錯(cuò)九成是這個(gè)原因。5.2 構(gòu)建體積與圖片優(yōu)化t3code這個(gè)項(xiàng)目本身不依賴重型可視化庫(kù)但 Next.js 默認(rèn)會(huì)把所有頁(yè)面打包到構(gòu)建產(chǎn)物里時(shí)間久了 bundle 會(huì)膨脹。我做了兩個(gè)優(yōu)化第一動(dòng)態(tài)導(dǎo)入只在需要時(shí)加載的重組件例如代碼高亮器const CodeBlock dynamic(() import(~/components/code-block), { loading: () p加載中.../p, });第二所有靜態(tài)圖片走 Next.js Image 組件自動(dòng)處理尺寸和 webp 格式。對(duì)于內(nèi)部工具圖片不多但每次訪問(wèn)都要拉原始大圖也沒(méi)有必要。Image 組件的sizes屬性一定要寫(xiě)否則會(huì)浪費(fèi)不少帶寬Image src{thumbnail} altcover width{400} height{225} sizes(max-width: 768px) 100vw, 400px /5.3 性能數(shù)據(jù)與復(fù)盤(pán)上線后我觀察了 Vercel 分析面板t3code的首頁(yè) LCP 穩(wěn)定在 1.2 秒以內(nèi)交互頁(yè)面 INP 在 200ms 以內(nèi)。對(duì)于一個(gè)內(nèi)部工具來(lái)說(shuō)這個(gè)數(shù)據(jù)已經(jīng)足夠好。需要注意如果未來(lái)?xiàng)l目數(shù)量增長(zhǎng)到上萬(wàn)條entry.list的裸查可能會(huì)成為瓶頸那時(shí)需要在 Prisma 查詢里加take分頁(yè)參數(shù)或者引入搜索。目前t3code的數(shù)據(jù)量在幾百條量級(jí)索引都命中沒(méi)必要過(guò)度設(shè)計(jì)。6. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄6.1 類型不更新的典型問(wèn)題tRPC 類型傳播是它的賣(mài)點(diǎn)但開(kāi)發(fā)中有一個(gè)很煩的現(xiàn)象后端路由改了前端報(bào)錯(cuò)卻還是舊類型。這個(gè)通常不是 tRPC 的問(wèn)題而是 TypeScript 的編譯器沒(méi)有重新生成聲明。在我遇到的情況里重啟 Next.js dev server 能解決九成問(wèn)題剩下的一成是tsconfig.json的include沒(méi)有覆蓋src/trpc目錄。排查步驟整理如下# 1. 強(qiáng)制重新生成 Prisma Client npx prisma generate # 2. 檢查 tRPC 類型看是否有顯式 any # 在代碼里搜索 : any如果有替換為具體類型 # 3. 重啟開(kāi)發(fā)服務(wù)器 # 如果還不行刪除 .next 目錄再啟動(dòng) rm -rf .next npm run dev這個(gè)三板斧在幾十個(gè)項(xiàng)目里都驗(yàn)證夠了不要一上來(lái)就懷疑框架有問(wèn)題。6.2 Prisma 連接數(shù)超限的排查前文提到了連接池這里展開(kāi)講一下真實(shí)的情況。部署初期t3code在 Vercel 上經(jīng)常報(bào)Too many clients錯(cuò)誤。排查步驟是先看日志確認(rèn)是數(shù)據(jù)庫(kù)連接數(shù)超過(guò) Neon 的限制再看DATABASE_URL有沒(méi)有配置連接池參數(shù)最后檢查代碼里有沒(méi)有重復(fù)創(chuàng)建 PrismaClient。create-t3-app模板自帶globalThis緩存不會(huì)重復(fù)創(chuàng)建最終問(wèn)題就落在連接池參數(shù)上。加上之后服務(wù)穩(wěn)定了沒(méi)有再次出現(xiàn)連接數(shù)告警。6.3 常見(jiàn)問(wèn)題速查表我整理了一張表記錄了t3code開(kāi)發(fā)中實(shí)際遇到的高頻問(wèn)題查閱或排查起來(lái)很省事?,F(xiàn)象原因解決方案本地接口返回 500Prisma Client 版本與數(shù)據(jù)庫(kù) Schema 不匹配執(zhí)行npx prisma generate后重啟 dev server部署構(gòu)建失敗遷移文件未執(zhí)行構(gòu)建命令加npx prisma migrate deploy生產(chǎn)環(huán)境連接數(shù)報(bào)錯(cuò)缺少連接池參數(shù)DATABASE_URL 加?pgbouncertrueconnection_limit1前端類型與后端不一致dev server 緩存舊類型rm -rf .next后重啟種子腳本重復(fù)執(zhí)行報(bào)錯(cuò)未使用 upsert改用upsert并設(shè)置固定 id字段改名后遷移失敗數(shù)據(jù)庫(kù)已有數(shù)據(jù)手動(dòng)編寫(xiě)遷移 SQL 或先補(bǔ)默認(rèn)值6.4 兩個(gè)值得分享的排查經(jīng)驗(yàn)除了上面這些常規(guī)問(wèn)題再講兩個(gè)t3code特有的經(jīng)驗(yàn)都是網(wǎng)上教程很少提到的。第一個(gè)是 Server Component 里調(diào)用 tRPC 時(shí)如果不小心把query寫(xiě)成了mutation瀏覽器端不會(huì)直接報(bào)錯(cuò)而是會(huì)在服務(wù)端渲染過(guò)程中拋出一個(gè)非常不直觀的錯(cuò)誤。排查的時(shí)候要看完整堆棧別只盯瀏覽器 console。正確的做法是只讀數(shù)據(jù)用api.someRouter.query寫(xiě)操作才用mutation兩者不要混用。第二個(gè)是 Tailwind 的自定義顏色變量在服務(wù)端渲染時(shí)可能會(huì)閃爍因?yàn)?CSS 變量在服務(wù)端首屏渲染時(shí)還沒(méi)掛載到:root。解決辦法是確保變量定義在layer base里且沒(méi)有在組件里覆蓋同名變量。這個(gè)問(wèn)題在新項(xiàng)目初始階段不明顯但一旦有人往全局樣式文件里多寫(xiě)了幾個(gè)--primary就會(huì)開(kāi)始亂。講一個(gè)更實(shí)際的經(jīng)驗(yàn)。t3code第二次迭代時(shí)我需要批量更新幾十條 seed 數(shù)據(jù)當(dāng)時(shí)偷懶沒(méi)有寫(xiě)腳本直接在 Prisma Studio 里手動(dòng)改。改到一半發(fā)現(xiàn)某個(gè)字段要全局替換才意識(shí)到這個(gè)操作應(yīng)該在腳本里做。后來(lái)我整理了一遍規(guī)范所有數(shù)據(jù)的導(dǎo)入導(dǎo)出、批量更新、字段遷移都必須通過(guò)prisma/scripts目錄下的腳本執(zhí)行禁止直接在數(shù)據(jù)庫(kù)管理工具里手改。這個(gè)規(guī)范看起來(lái)是自找麻煩但它保證了所有變更都有記錄、可回放對(duì)于內(nèi)部工具來(lái)說(shuō)這比花哨的功能更重要。我自己的體會(huì)是T3 Stack 給的真正優(yōu)勢(shì)不是某一個(gè)框架多強(qiáng)而是它們組合起來(lái)把“定義一次、到處使用”變成了現(xiàn)實(shí)前后端共享類型帶來(lái)的省心感只有當(dāng)你改完后端字段前端整條鏈路自動(dòng)同步時(shí)才有直觀感受。如果你手上也有類似t3code這種前后端同團(tuán)隊(duì)維護(hù)的內(nèi)部項(xiàng)目不妨按這套思路試一次從某種意義上說(shuō)它會(huì)改變你對(duì)全棧開(kāi)發(fā)的某些習(xí)慣。最后留個(gè)擴(kuò)展建議下一步可以給t3code加上簡(jiǎn)單的基于會(huì)話的登錄鑒權(quán)接入 tRPC 的 middleware這樣每一條 procedure 都能統(tǒng)一控制訪問(wèn)權(quán)限項(xiàng)目的完整度會(huì)再上一個(gè)臺(tái)階。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
操操天堂| 五月香婷婷| 亚洲熟女乱色综合亚洲网站| 五月天激情视频| 婷婷五月花西瓜| 另类A片| 五月丁香婷婷色| 天天在线久久综合 | 99精品热视频| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 最新久久网址| 91综合视频在线| 婷婷五月天综合在线| 婷婷精品性性性性性性性| 99热日| 色5月婷婷| 五月婷综合| 色婷丁香五月| 五月丁香亚洲校园欧美| 色五月综合在线| 日曰躁夜夜躁2026| 午夜成人片400| 五月天婷婷基地| 日本九九热| 特黄三级片| www.久久色.com| 五月开心婷婷极品激情| AVV黄| www.99在线| 天天操夜夜操| 丁香五月婷婷激情尤物| 在线观看欧美| 久久久久久激情| 99热只有这里才是精品| 久久AV电影| 丁香九月综合| 熟女乱论网| 99riAV国产精品视频| 亚洲人成人五月天| 欧洲综合视频在线观看。欧洲,亚洲综合食品在线观看。 | 九九色影院| 天天久久婷婷| 丁香五月最新网址| 97成人在线视频精品| 嫩草极品| 99热爆在线| 九九99久久精品| 激情五月婷婷| 六月婷婷综合网2| 噜噜噜狠狠色综合| 国产精品扒开腿做爽爽爽A片唱戏| 午夜成人网站在线观看| 国产成人AV在线| 夜夜撸日日操| 五月婷色色| 少妇人妻人伦A片| 玖玖资源在线视频| 亚洲综合五月天婷婷丁香| 久久偷拍综合五月天| 五月丁香六月情婷婷久久| 久热这里只有精品性色AV| 日本激情91| 久久在线92| 国产婷婷久久| 成人五月天综合网| 天天爱天天做天天爽| 五月婷婷这里都是精品| 国产色色色色| av中文在线| 久久草大香蕉| 丁香综合日产精品久久| 2017人人操| 91久久综合亚洲鲁鲁五月天| 综合婷婷六月| 九九热视频这里只有精品| 开心深爱激情网| 深爱开心激情| 99网| 91九九热| 天天爱天天做天天日| 欧美天天草人人草| 国产精品香蕉| 久色激情| 婷婷五月六月| 五月久久噜噜| 超碰人人91| 另类图片天天影视在线观看| 97爱艹婷婷开心丁香激情综合| 99精品综合在线| 丁香五月婷婷偷拍| 激情五月丁香激情综合网 | 色啪综合| 五月深爱网| 亚洲热视频| 操逼巨乳91| 色五月丁香五月| 国产 码在线成人网站| 激情五月黄色| 丁香九月激情| 99热这里只有精品免费| 亚洲激情四射色| 99啪啪网| 99热这里只有精品22| 午夜婷婷久久| 九 九九九AV| 五月天激情综合在线| 26uuuu精品一区二区| 六月丁香VA| 婷婷色网| 日韩高清久久| 热成人网| 国产又爽又猛又粗的视频A片| 婷婷99丁香| 丁香五月视频在线观看| 在线观看中文字幕| 97人妻碰碰碰久久香蕉| 亚洲另类噜噜| 久久久99精品免费观看| 国产99美少妇| 欧洲亚洲精品| www.91操| 强伦轩人妻一区二区电影| 熟妇内谢69XXXXXA片| 91日日日| 婷婷色在线播放| 少妇大叫太大太粗太爽了A片| 色色丁香五月| 五月婷婷69| 欧美性生交XXXXX无码小说| 九九色天堂| 日韩AAA| 天天操人人干| 狠狠色丁香| 色色a| 丁香五月天成人| 九九热视频精品2| 色老久久| 97精品欧美91久久久久久久| 欧美色偷偷大香| 激情丁香五月激情婷婷| 九九99久久精品| 99热综合| www激情| 国产激情在线| 久久9视频| 久久五月天色婷婷| 九九热自拍| 97伊人综合婷婷| 婷婷情色激情| 97人人看一| 婷婷五月激情在线视频| 久久精品五月| 天天搡日日搡aaaaⅩ| 综合伊人狠狠| 91亚洲免费片| 五月婷婷综合激情网| 亚洲第二AV| 亚洲天天综合| 日韩久综合| 中文在线视频久1| 丁香六月综合| 婷婷 伊人 久久| 五月丁香综合成人社区| 激情亚洲网| 狠狠色噜噜狠狠狠狠综合| 国产精品美女| 亚洲婷婷五月天综合| 五月婷婷成人| AV国产有码| 精品9197碰| 婷婷色五月情| xx久久| 97碰碰在线看视频免费| 欧美激情五月综合| 婷婷五月丁香青青草在线| 色色日本| 亚洲中文字幕翔田千里| 这里只有精品69| 中文字幕网伦射乱中文| 亚洲国产99| 综合久久久婷| 99无码精品| 伊人久久激情图区五月| 天堂久久丁香| 中文字幕在线资源| 丁香婷婷五色月| 色无婷婷| 五月丁香偷拍| 五月天亭亭俺也| 99热综合色图| 婷婷五月花.97| 婷婷亚洲欧美丁香五月| 日本欧美在线| 色婷婷91激情小说| 婷婷丁香五月天激情| 97丁香花五月天激情小说| 人妻久久久| 性生活久久朋友人妻| 婷婷中文字暮| 色婷婷丁香五月| 开心五月综合| 婷色人人狠| Av狠狠色丁香婷| 99激情| 激情 五月 婷婷 丁香| 4438亚洲欧美| 色婷婷电影| 欧美综合丁香网| 99在线爽| 欧美顶级少妇做爰HD | 激情五月天色色网| 狠狠干综合| 青青草深爱激情网| 99精品在线播放| 久综合4| 99人碰碰碰| 内射激情在线| 色热久资源| 99精品手机在线视频| 超碰操网| 开心激情网五月天| 激情婷婷五月色| 91艹人| 人妻丰满精品一区二区A片| se影音资源在线观看| 婷婷久久综合久| 日本在线观看aaa 99| 狠狠做婷婷| 九九这里都是精品| 久久思思热视频| 玖玖视频福利| 在线另类| 色五月婷婷基地| 五月天激情日色在线| 全部老头和老太XXXXX| 亚洲婷婷基地| 超级碰碰碰97免费| 婷婷五月天小说| 99久久精品网| ss99热| 丁香大香蕉| 嫩草视频。| 五月婷婷激情综合| 夜夜穞天天穞狠狠穞AV美女按摩| 婷婷精品视频| 伊人99热| 国产偷人爽久久久久久老妇APP| 一起草AV| 丁香五月成人网| 日韩久热| 99精品热| 色欲一区二区三区精品A片| 99热在线精品观看| 深爱激情综合| 亚洲操操操| 五月丁香婷婷啪啪| 99热精品无码| 久久人妻熟女一区二区| 激情6月| 超碰v| 色九区| 久热这里只有| 伊人高清无码| 激情婷婷网| 91综合网| 丁香五月中文字幕| 九九sese| 五月婷婷六月基地| 日本五月天网站| 婷婷五月天综合在线| 人妻VideOssS人妻高清| 99热在线播放| 久久99热这里只有精品| 极品少妇XXXX精品少妇偷拍| 就爱日五月天| 香蕉操亚洲| AV操逼网| 五月激情网络| 色停停香蕉视频| 丁香五月电影| 五月丁小婷婷激情四射| 色五月婷婷激情基地| 操人久久| 婷婷丁香视频| 日本WWW九九九| 日韩欧洲亚洲| 欧美日韩二区在线| 蜜桃婷婷狠狠久久| 色综合爱综合| 日日操天天操| 国产精品久久久久久久久久| 婷婷五月天性爱视频| 98永久精品| av网址在线| 开心五月天私房婷婷| 婷婷天天综合| 婷婷九月丁香| 久久婷婷青青| 九九热免费| 亚洲激情综合| 男人天堂AV在线一区二区| 色呦呦美女| 丁香蜜臀黄色婷婷五月天| 午夜爱爱爱成人| 狠狠草狠狠草| 麻豆WWWCOM内射软件| 婷婷色五月天色| 99热99ai| 丁香五婷婷| 大香蕉九九| 色婷婷另类| 丁香五月婷婷色| 欧美综合五月丁香五月天| 婷婷色五月婷| 婷婷干五月综合在线播放| 欧美丁香五月| 婷婷五月,综合伊人| 91九色在线视频| 色婷婷视频| 天天影院色| 天天综合色| 99ri视频在线观看| 米奇影视资源婷婷狠狠色激情欧美五月丁香 | 激情综合网,五月| 丁香六月久久| 五月天婷婷激情六月久久| 久久三级视频| 亚洲综合另类| 日韩欧美婷婷丁| 欧美成性色| 天堂综合久久 | 婷婷综合激情五月综合| 丁香六月综合激情| 成人AV在线网站| 丁香五月停停av| 五月丁香啪啪网| 婷婷九色| 激情综合五月婷婷丁香| 欧洲区自拍| 色五月天综合| 国产日产亚系列精品版优势| 国产激情综合五月| 熟女激情五月天| 超碰人人91| 色久五月天| 疯狂做受XXXX高潮A片动画| 天天搡日日搡aaaaⅩ| 99热免| 人妻丰满精品一区二区A片| 婷婷五月色情天| 新激情五月天天在线网| 另类国产区| 婷婷丁香五月在线播放| 久久九九一區| 九九色图| 久草大| 久久92| 久久婷婷五月综合色丁香| 99热精品一| 中文字幕日本最新乱码视频 | 日本色五月| 六月色 亚洲| 欧洲第一久色| 日韩美女在线视频19| 色五月综合激情| 天天干在线播放| 九月色婷婷综合| 亚洲久久天堂| 综合久久五月天| 久久全色| 九九色图| 99爱免费在线观看| 色色色色欧美| 成年人丁香五月| 婷婷六月色情| 婷婷五月激情综合| 天天插天天很| 日韩无码亚欧无码| 99在线视频播放| 五月丁香啪啪啪综合网| 91超碰人人操| 婷婷激情五月天视频在线| 人人操超碰| 99热国产这里只有精品| 久久综合激情| 欧美成人一区二区三区在线视频| 17.c黄色| 婷婷射图| 日韩免费视频| 亭亭五月丁香五月天激情| 综合色网站| 五月丁香六月婷婷网| 2025中文在线视频字幕免费观看| 91碰操| 中文AV在线观看| 伊人干综合| 国产成人精品一区二三区熟女在线 | 激情五月婷婷| 四色女婷婷| 丁香九月综合在线| 99精品热| 九九热在线视频| 五月天激情综合在线| 中字幕视频在线永久在线观看免费| 天天插天天| 97操碰在线视频| 日本天天色| 六月婷婷狠狠做| 亚洲视频无| 人人草人人爱| 99视频精品全部观看10| WWW色综合| 五月综合人妻| 无码99| 2025年最新亚洲在线欧美| 超碰色婷婷| 蜜桃人妻无码AV天堂三区| 五月天涩涩| 黄色99视频| 婷婷丁香婷婷97| 人人干av| 色综合久久88色综合天天看| 天天色天天爱天天爽| 五月丁香黄色| 丁香五月婷婷香| 久久99网| 最新久久网址| 色五月婷婷小说亚洲中文字幕组| 丁香五月婷婷姐| 婷婷人妻激情| 女同在线9| 色色色色综合网| 狠狠操狠狠操| 99热在线观看精品| 婷婷五月天性| 激情五月婷婷色综合| 啪啪99| 久久香视频| 欧美槡BBBB槡BBB少妇| 伊人玖玖精品| 欧美婷婷综合| 深爱激情丁香| 五月天天爽| 天天插夜夜爽| 新99色色色色色色| 密黄站| 五月婷婷深深爱| 六月丁香色婷婷| 欧美综合丁香网| 色婷婷黄色网络| 丁香五婷婷| 日韩成人综合| 91久久色| 玖玖精品婷婷| 日韩超碰在线| 色五月激情| 71在线精品视频一区| 九九无毛| 日韩婷久| 九热视频精品| 超碰人人操| bukadeavzaixian| 日逼影音先锋AV男人资源站| 天天做天天爱天天要| 激情婷婷五月黑人| 婷婷香五月综合激情| 亚洲成人电影aaaa| 久久九精品| 五月开心婷婷| 婷婷五亚洲| 五月丁香在线偷拍视频| 国产婷婷五月天| 亚洲狠狠狠| 五月丁香六月婷婷综合网缴情| 国产高清RV综合aVa| 米奇激情婷婷| 日韩欧美一级大黄网站| 狠狠干五月天| 99在线精品观看99| 无码AV免费精品一区二区三区 | 99热无码| 五月丁香啪综合| 91色五月| 久久精品99国产精品日本| 亚洲日韩一页精品发布| 色在线免费观看| 97伦色婷婷| 久热久操久热久草国产91| 99九九视频精彩在线| 精品人妻一区| 日韩AAAAA| 99精品偷自拍| 久激情| 大香蕉婷婷丁香天堂AV| 五月婷婷天天色| 五月开心激情网| 激情五月天小说网| 六月激情综合| 91色色色视频| 综合色情网| 中文字幕+乱码+中文字幕在线观看| 四五月婷婷| 激情伊人五月天| 五月婷婷五月天| www久久久| 久久婷婷网址| 久久这里都是精品免费| 99成人小视频| 婷婷色五月天在线观看| 色XX综合网| 久草A片| 久久精品99国产精品日本| 婷婷六月香| 性色婷婷| 开心五月深爱五月丁香五月激情五月| 五月婷婷av| 日本eVa一区=区视频| 成人人操| 丁香婷婷人妻综合网| 五月的色婷婷高潮| 色999亚洲人成色| 五月婷婷精品视频| 五月天婷婷色紫薇阁| 婷婷 月 丁香| 五月激情啪啪| 色婷婷五月在线| 色五月在线| 女人天堂AV| 欧美精品中文字幕亚洲专区| 久久99精品久久久久久噜噜| 色色婷婷综合网| 91viP在线看| 欧美 色婷婷| 九月丁香| 久草视频一,二三四| 91 影音先锋| 婷婷伊人| 91九色在线视频| 伊人99久久| 天天做天天爱天天爽夜夜揉| 综合婷婷五月天| 97超碰婷婷五月天| 26uuu.| 亚洲婷婷91丁香| 九九精品丁香花| 99这里只有免费的小视频在线观看| 另类激情综合| 97人人干。| 人人干Av| 超碰狠狠干99| WWW.桔色成人.COM入口| 五月丁香六月激情| 秋霞性爱AV| 超碰资源在线| 十区AV| 99热无码首页| 色婷婷色综合| 99在线亚洲| 婷婷五月丁香第四色超碰在线| 国产伊人五月天| 97碰啪啪| 五月丁香色色网| 欧美三日本三级少妇三99| 久久久人人操A V| 99色免费| 亚洲操B| 婷婷丁香五月基地| rr天天操| 狠狠色大香蕉| www.久久99热地址发布| 色五月天丁香婷婷| 狠狠久久婷五月| 婷婷激情人妻| 色色五月天婷婷| 99久视频| 国产av天堂| 天天日日天天| 九月婷婷久久| 玖玖爱资源站| 天天操天天操综合| 国产资源91在线| 色色婷婷综合| 99热精国产这里只有精品| 99热99在线| 人人人操| 97碰超级人人看| 亚洲人人操| 色色色热热热| 婷婷人人操| www.婷婷| 91啪啪视频| 久月婷婷| 日木狠狠干| 啪啪91| 99在线观看视频免费| 开心五月激情网| 欧美视频在线观看噜噜| 亚洲五月天色色| 色婷婷A| 九九RE视频在线精品| 99操视频| 这里只有精品9| 91丨九色熟女丨首页| PORNY九色9l自拍视频成人| 超碰碰碰碰| 老美AA片| 九色91视频| 国产美女无遮挡裸体毛片A片| www.91有码.com| 99操不停| 99热这里只有精品55| 深爱激情久久| 97色色色| 97碰碰草| 99色免费观看全部| 人妻精品久久久久久久| 99热碰碰热| 三年高清大片免费观看国语| 五月综合色| 日本va欧美va精品发布视频| 五月丁香啪。| 黄色三级毛片中字| 日日干天天射| 色操b| 五月婷在线观看| 色www99| 99热免费在线| 亚洲国产精品VA在线看黑人| www.久久五月天.com| 午夜婷婷久久 | 成人丁香五月天Av| 婷婷五月俺要去| 天天综合 99久久婷婷| 婷婷五月天播| 99久操| 一二线视频 另类| 婷婷性爱影院| 99久久6| 日本色婷婷五月天成人电影| 久99综合婷婷| 久久婷婷的综合色丁香五月| 成人做爰黄A片免费看直播室男男| 婷婷玖玖五月天| 天天 青草 丝袜制服 在线| 成人av在线网站| 亚洲中文字幕翔田千里| 色婷婷在线视频| 久99视频在线观看| 日韩色色视频| WWW,五月| 国产精品视频久久99| 亚洲综合网区| 99热久| 久久WW| 久热9热| 亚洲九九99精品视频在线播放| 色香欲综合| 色五月天堂| 欧洲一区二区| 五月天激情四射网站| www.9色色色| 人妻日日日| 99精品国产在热久久| 狠狠色色| www.国产色| 婷婷伊人久久| 激情婷婷色色| 色播五月| 天天日日夜夜| 亚洲激情AV| 色婷婷色99国产综合精品| 开心五月婷婷激情| 超碰av在线| 九九操操| 色99在线| 成人做爰A片免费看网站找不到了| 久久99网| 99国产精品白浆在线观看免费| 色婷婷电影网| 欧美日韩欧美| 国av网| 9l久久久视频| av最新在线| 久久女婷| 丁香五月影院| 亚洲妇女熟BBW| 密着浓厚中出乚交尾GvG935| 波多婷婷久久| 亚洲免费视频网站| 色久女| 色婷婷手机在线| 五月丁色AV| 婷婷久久免费看| 欧美英丁香开心快乐六月天网| 性色99| 婷婷婷婷婷婷婷五月丁香| 婷婷五月天美女21p| 五月丁香好婷婷A片网| 精品久久99| 国产精品VIDEOSSEX久久发布| 日韩精品视频中文字幕| 激情碰碰碰| 五月婷婷中文字幕| 亚洲色激婷| 色噜噜在线| 国产毛片精品一区二区色欲黄A片| 97精品在线| 夜夜爽日日躁| 日屌日日操日日色| 在线99热| 国产一级黄色影片,| 超碰猛烈的性猛交| 色色色视频| 啪到高潮激情丁香五月| 91九色视频| 婷婷91视频| 久久婷婷人人| 丁香五月骚喷水视频| 丁香激情综合| 久久五月天婷婷| 婷婷碰碰| 婷婷99| 亚洲 六月 综合| 97干免费视频| 激情五月丁香五月色| 色99在线观看| 婷婷五月骚厕所| 久99久在线| 伊人高清无码| 色色激情五月天| 26uuu另类亚洲欧美日本一| 五月色网| 欧美激情综合色综合色| 99在线精品免费视频| 极品精品一区二区三区在线| 亚洲综合婷婷| 色婷婷狠狠18| 国产亚洲精品AAAA片APP| 亚洲色婷婷五月天| 婷婷深爱网| 婷婷五月色播| 婷婷五月精品中文字幕| 蜜臀嫩草| 国产肥白大熟妇BBBB视频| 大香蕉欧美在线| 婷婷五月天com| 91一起操| 99热天堂| 婷婷激情小说| 婷婷五月丁香图片人人操| 亚洲黄色影视| 91要啪| 国产91在线视频| renrencaoav| 五月婷激情| 成人av在线网址| 激情五月,激情综合网| 国产乱妇无乱码大黄AA片| 九九综合九九| 五月天丁香婷婷社区| 五月成人丁香av91| 狠狠草婷婷| 思思久久99| 亚洲AV日韩无码| 成人丁香五月天Av| 色欧美日| 五月天婷婷影院影院观看| chaopengdaxiangjiao| 综合在线网| 欧美色五月| 99综合视频一体| 91超碰在线观看| 久热91精品| 综合99视频| 五月丁香六月婷婷成人电影| 碰碰碰91| 狠狠干在线| 毛片九九九九九九| 精品乱码久久久久| 国产精品岛国片在线观看免费| 六月婷婷久久大全| www,99色| 天天综合网站| www.五月天婷婷| 噜噜色五月| 色碰碰| 97人人干人人操| 婷婷色网站| 婷婷啪啪| 六月婷婷六月天天在线免费| 五月婷婷色| 九九视频精品这里只有| 乱岳熟女50岁| 日日夜夜爽爽| 日韩AV一区二区三区| www.henhengan| 国产综合81p| 另类A片| 99re热精品在线视频| 99色网站| 狠狠干在线视频| 99热只有这里有精品| 99色.com| 91九色首页| 五月丁香色婷婷伊人| 免费做A爰片77777| 婷婷色av| 国产avapp 网| 色五月av| 天天情色五月天| 超碰在线播放免费观看| 婷婷丁香花五月天| 综合欧美五月婷婷| 久久婷青青草原| 五月综合激情网| 天天艹天天综合网| 狠狠干五月| 婷婷五月天视频| 这里只有精品在线视频精品| 亚洲色图欧美色图日本视频| 欧美五月婷婷| 華人性愛AV在線| 老师高潮流白浆喷水的A片| 色色a| 五月丁香网av| 美女xx不卡| 综合色五月| 激情5月天天天| 欧美色色干| 国产成人精品一区二区三区视频| 五月婷婷影| 五月丁香六月色婷婷综合五月天| 色五月婷婷777| 蜜臀av粉嫩av懂色av| 激情精品久久| 97干视频在线| 少妇水多A片太爽了| 99色热视频在线| 色播五月天天| 久久久久久久久99精品| 天天揷综合网| 大香蕉九九| 色狠久| 广东99色在线| 五月天操逼网| 人人综合色| 五月综合激情| 大香蕉欧美在线| 婷婷五月偷拍| 色八月婷婷| 天堂综合久| va婷婷| 人人亚洲| 中文资源在线a | 五月天婷婷AV| 蜜桃五月天色| 欧美激情五月天婷婷| 香蕉大综综综合久久| 亚洲五月六月婷婷| 丁香五月天堂网| 91热视频色网站| 无码 色| 色天天综合色| 亚洲五月婷| 色婷婷五月影院| 亚洲AV久久久久久久久久久久久久久久| www.久久爱| 亚洲五月天另类小说图片| 婷婷色五月天综合网| 色婷婷丁香网| 996热re视频精品视频| 91精品久| 九月丁香婷婷网| 人与禽A片啪啪| 九九色婷婷| 婷婷五月av| 丁香五月激情网| 色婷婷五月天激情在线观看| 九九热视频免费| 色婷婷五月网| 色五月天成人在线| 狠狠五月天婷婷| 九九热这里只有精品23| 婷婷的99视频网站| 99热久草| 九九精品综合| 日本美女上人| 伊人www22综合色| 国产综合81p| 人人爽欧美婷婷久久久五月丁香| 国产高潮白浆一区二区| 97碰碰免费.视频| 91在线97视频| 色五月丁香91| 丁香五月天91| 色都都狠狠色都都色综合色| 五月天婷婷色综合| 拍色综合| 色婷婷文字幕| 视频一二区| 九九热啪啪| 亚洲天堂热| 六月丁香婷婷色狠狠久久| 91久久99久久91熟女精品| 婷婷91| 天天人人综合| 色婷婷欧美在线| 99色丁香婷婷综合网| 婷婷五月天亚洲精品| 亚洲经典小视频| 国产精品人人妻人人爽| 色激情五月天| 五月丁香婷婷久久| 99精品在线观看视频| 99久久久| 香蕉影院色| 操婷婷基地| 激情五月婷| 九九人妻福利| 色五月天网| 天天爽夜夜爽夜夜爽精品视频| 五月婷婷视频| 97人人射| 91久久精品国产91性色TV| 在线综合啪| 99re在线视频| 色五月综合婷婷久久综合婷婷久久综合婷婷久久综合婷婷久久 | 九九爱激情| 欧美人人超级碰| 啪啪激情综合| 一本久久亚洲五月婷婷| 人人噜天天上| 日韩欧洲亚洲| 99久久国产宗和精品1上映| 日韩熟女啪啪视频| 日本久久精品18| 婷婷五月蜜桃成人桃色丁香| 伊人狠狠干| 久久丝袜婷婷| 激情五月婷婷| 色婷婷四色| 五月婷婷开心深| 99免费视频网| 五月天综合视频| 9 7总站超级碰免费视频| 色五月天丁香婷婷| 高清无码一区二区三区四区| 五月婷婷激情五月| 99激情视频| 丁香六月婷婷开心婷婷网| 天天爽在线视频| 岛国AV网站| 色色a| 日韩天堂久久| 梁铮版蜘蛛女在线观看| 色色A| 99热免费| 欧美色色色色色色色色色色| 呦呦v线| 91碰| 性爱技巧五月| 丁香亭亭久久| 九九热婷婷| 99热在线观看| 成人片在线播放| 五月激情久久综合网| 久久曰曰| 日本操碰碰| 五月天影院| 激情久久久| 久9热视频在线观看| 99精品无码网站| 99免费| 五月99久久| 丁香五月婷在线| 综合五月天| 色碰干| 五月天激情婷婷久久| 成人无码髙潮喷水A片| 热99精品视频五月| 97色色综合| 欧美日韩成卜| 丁香六月av| 成人亚洲精品| 伊人久久大香天蕉亚洲特级| 九九九九九九九热| 狠狠色丁香| 91丨九色丨国产打屁股| 色婷婷五月天在线观看| 丁香九月色| 色狠狠图片| 青草青草视频2免费观看| 超碰久热| 在线播放成人网站| 99在线公开视频| 五月天综合色| 婷婷色五月天色色| 婷婷丁香人妻天天久久| 激情五月天天| 五月天婷婷色小说| 国产精品第一国产精品| 天天插天天插天天日| 99色视频| 99精品在线| 激情婷婷| 丁香婷婷六月激情文学 | 激情小说视频图片| 久久激情五月天| 99免费热视频在线| 永久免费视频| 97在线精品视频| 一区二区免费看| 丁香婷婷色色| 久久新| 九九操操| 五月丁香手机在线| 五月婷视频| 亚洲欧洲99| 日本人妻A片成人免费看片| 99er这里只有精品视频| 六月丁香五月婷婷| 免费日韩99| 日韩中文字幕| 五月情涩综合婷婷| 97在线日韩| 日本狠狠色| 91九色无码日韩| 99熟女| Se.婷婷五月天| 国产精品久久久爽爽爽麻豆色哟哟 | www.91色| 久热精品视频在线观| 婷婷五月天影院| 丁香五月23111| 五月天激情日色在线| 日本婷色| 第四色激情网| 99这里有精品视频| www.六月丁香看AV| 色婷婷综合在线| 99操逼视频| 日本激情ⅩXX免费视频| 在线视频区| 五月丁香六月婷婷激情视频在线观看免费| 狠狠色丁香久久婷婷综合五月| 五夜婷婷| 亚洲成人电影aaaa| 国产综合丁香五月天| 九九五月天| www.夜夜夜| 丁香五月婷婷高清| 黄色片区子| 日日想日日夜日日操| 潮汕成人AV片在线| 99热爱爱干干日| 情欲综合网| 婷婷五月精品中文| 狠狠色综合网站久久久久| 色狠狠六月| 天天操天天曰天天射| 五月激情影视| 色婷婷色婷婷五月| 激情五月丁香五月| 色婷婷很很丝袜| 日韩啪| 丁香五月AV综合激情| 中日韩狠狠色| 白人荫道BBWBBB大荫道| 激情五月丁香婷婷| 婷婷丁香色五月天久久88| 色噜婷婷| 99精品综合视频| 97色色色色色| 激情综合网络插| 五月丁香久久婷| 丁香六月婷婷久久综合| 色综合伊人网| 丁香 婷婷五月| 伊人网啪啪| 久久久国产精品黄毛片| 色综合区| 婷婷五月天免费视频在线观看| 久久亚洲婷婷| 九九热99精品| 国产亚洲精品AAAAAAA片| 囯产精品久久欠久久久久久九大| 99热免费网站| 久久9热| 超碰国产一区| 99人人干| 久草性爱| 五月天婷婷在线AN| 色九月激情综合网| 九九热这里只有精品5| 九热视频精品| 97碰碰叉| 五月婷婷综合网| 99碰超| 五月综合激情| 欧美色色色色色色色| 激情网站综合五月天| 99无码超碰| 成人资源在线| www.com在线操视频免费观看| 久热免费视频| 538在线精品| 影音先锋一区| 狠狠色成人影片| 激情婷婷五月基地| 久久99久久99精品免视看婷婷| 亚洲激情网| 五月丁香综合激情网| 欧美婷婷综合网| 欧美英丁香开心快乐六月天网| 婷婷亚洲五| 婷婷色综合| 色婷婷免费视频| 99视频在线观看网址| 天啪天啪天啪天啪| 亚洲综合色成丁香五月色| 亚洲精品无码一区二区| 久久这里只精品| 丁香五月天啪啪| 亚洲综合久| 色狠狠综合网| 婷婷欧美综合| www.久久爱.com| 5五月综合网亚洲| 五月丁香另类图片| 99热在线这里| 人人干人人操人人摸| 五月天激情无码专区| 天天天天天天天操| 丁香九月婷婷色| 3www激情| 日日夜夜狠狠干| 五月丁香淫淫婷婷婷| 五月丁香六月婷婷亚洲综合| 五月天激情无码专区| 婷婷色爱| 99久热这里只有精品| 夜夜撸日日操| 九热视频在线精品15| 99热综合网| 婷婷久久五月天| 成人短视频在线观看| 亚洲精品久久久久久久久久吃药| 免费无码毛片一区二区A片| 欧美成人AAA片一区国产精品| 青草视频在线观看视频 | 天天日夜夜拍| 激情网五月天| CHINESE熟女老女人HD视频| 国产欧美熟妇另类久久久| 欧美情色电影一区二区| 色婷婷激情视频| 色色色婷婷五月| 五月丁香激情啪啪| 亚洲AV成人在线| 中字幕视频在线永久在线观看免费| 激情五月婷婷| 亚洲99一级无嗎特制在线| 五月婷婷日本| 九九RE视频在线精品| 五月丁香激情片| 五月婷婷在线网站| 国产精品五月天婷婷| 激情99| 色屌丝中文字幕| 久久caop| 一区三区视频有限公司| 在线中文字幕av| 丁香婷婷丁香五月欧美人| 狠狠狠狠狠草| 久久激情天堂| 日本色色色| 色亭亭九月| 色婷天天| www.狠狠操.com| 色五月激情五月天| 日日综合网| 丁香五月-激情综合| 五月婷婷激情日本| 日日日日做夜夜夜夜无码| 1010日日无码| 性欧美日本| 日曰躁夜夜躁2026| 精品99在线| 婷婷激情区| 免费啪啪亚州视频| 久久AV无码精品人妻系列试探| 秋霞丝袜啪啪啪| 五月天色狠狠| 久久久久这里只有精品| 婷婷久久五月天| 91AV视频| 日本天天综合| 日韩精品一品二区三区的使用体验| 婷婷丁香五月综合| 亚洲无码成人网| 天天艹天天色| 色综合九九| 亚洲视频另类| 亚洲综合激| 婷婷九月亚洲| 综合网精品99| 五月婷婷色播视频| 99色综合| 99热10在线高清播放| 日木狠狠干| 日本婷色| 丁香五月欧美婷婷综合| 伊九九三级区| 开心五月网 | 久9热在线视频| 五月草影视| 五月天综合网| www..999热久| 久久久久丁香婷婷五月天| 精品夜夜澡人妻无码AV| 五月丁香激情四射综合| 婷婷丁香人妻天天| 日韩av网站在线观看| 九月av在线| 色色色色av777| 性一交一乱一交A片久久四色| 任你操精品免费| 精品99*| 久热这里只有精品在线观看| 五月婷婷偷拍| 丁香五月婷婷www..com| 99亚洲欧洲| 天天做天天爽| 99热国产精品| 国产九九一区二区三区| 五月丁香在线观看国产| 婷婷丁香成人在线视频| 91九九| 原琪琪色影院| 丁香久月| 成人网站高清无码| 久狠日av| 99色人| 激情五月五月五月婷婷| 影音先锋女人AA鲁色资源| 97福利视频| 99热婷婷| 日韩久久视频| 五月天婷婷av| 99热最新精品| 91婷婷色五月| 色色色综合色| 生活片五区| www99久久| 猫咪伊人久久| 站长推荐无码播放| 九九婷婷综合| 亚洲在线资源| 996热| 无码se| 婷婷五月色播| 婷婷五月天伊人在线| 五月天激情网图片| 就爱操www com| 伊人高清无码| 久久久精品色色色|