免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

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
返回資訊列表
99精品在线| 99久久9| 激情综合网五月| 婷婷色香六月综合激情| 亚洲综合婷婷| 国产黄色一级片| 嫩草AV久久伊人妇女超级A| 五月婷婷真爱激情网| 色色五月天激情| 日本操B片| 99热97| 激情五月天在线视频| 国产色色在线| 色很很96| 99九九精品| 99九九99九九九视频精品| 激情九月婷婷| 91人人爽狠狠狠| 五月婷色激情五月| 五月精品免费XXX| 婷婷久久婷婷色五月| 午夜九九九九九九九九九九九九九| 97在线天堂| 玖玖色资源| 亚洲欧洲中文日韩久久AV乱码| 色婷婷在线视频| 六月香五月婷| 欧洲亚洲欧洲99久久| 婷婷五月天久久久| 综合玖玖性爱免费视频| 99综合色色色| 欧美激情 日韩无码 婷婷 五月天| 婷婷九月综合| 天天舔天天爽| 日本五月天网站| 狠狠色综合五月| 99r这里只有精品哦| 99日本黄站| 大香蕉人人网| 五月婷婷激情久久| 久久伊人大香蕉| 国产婷婷五月天| 超级碰碰碰久久网站视频| A A色色| 色五月激情网| 五月色亭丁香| 青青草日本亚洲| 五月天婷基地| 九九免费在线视频| 亚洲视色| 天天操婷婷| 91干在线| www.婷婷.com| 任你躁XXXXX麻豆精品| 丁香五月影院| 五月丁香在线综合| 狠狠插狠狠操| 丁香五月综合激情啪啪| 婷婷五月天色播| 91久操| 99久久婷| 国产乱子轮XXX农村| 精品人妻伦九区久久AAA片| 久久五月天婷婷| 五月丁香啪啪| 亚洲精品**不卡在线播he| 婷婷色色综合| 色伊人啪| 色色色色色色色综合| 国产成人精品亚洲线观看| 丁香五月社区| 亚洲AV无码成人电影| 十二区无码| 国产精女同一区二区三区久| 久久久性爱网| 丁香五月婷婷六月婷| 色色日韩无码| 色爽九九| 国产SUV精品一区二区883| 少妇被躁爽到高潮无码文| 高潮毛片又色又爽免费| 婷婷趴趴| 丁香五月大片| www.五月天婷婷| 五月色婷婷综合| 亚洲精品又粗又大又爽A片| 99燥99日| 激情综合国产| 五月色丁香激情| 99精品一二三四视频| 丁香婷色| 99热精这里只有精品| 激情五月天伊人av| 九九精品热| 欧美69久成人做爰视频| 人妻人人操| 玖玖在线资源视频| 激情图片久久| 久99久视频精品| 热99免费在线| 日韩欧美骚货| 九九色逼| 大香蕉伊人99| 色噜久| 97干在线| 六月份天丁香婷婷| 无码成人播放器| av免费在线网站| ay2区| 精品皮股午夜AV| 久青操| 99只有精品| 久久久日韩特色特黄AAAA| 色婷婷成人网| 99热只有| 狠狠干综合网| 深爱激情五月天| 一级性感毛片| 婷婷五月精品在线| 天天干狠狠| 九久久九精品视频| 性婷婷| 96丁香六月婷婷蜜桃综合久久| WWW.国产| 久久er免费视频| 丁香六月婷婷激情| 丰满少妇猛烈A片免费看观看| 久操人妻| 97人人操com| 婷婷五月 丁香六月| jiZZdr| 久久久久人妻| 色婷婷中文字母五月丁香| 亚洲国产99| 午夜成人片400| 91成人视频| 久久久99精品| 亚洲V国产V欧美V久久久久久| 亚洲中文字幕av| 五月丁香操亭亭网| AV在线不卡网站| 成人超碰AV| 九九热中文| 人操人| 99色在线观看视频者| 91精品丝袜久久久久久| 婷婷精品在线| 九九热av| AV九九| 9色免费网| 天天拍久久| 丁香五月影院| 综合网激情五月天| 91精品国产综合久久久不卡电影| 婷婷五月情色| 九九精品免费视频99| 五月激情丁香久久综合网| 精品人人操| 五月丁香婷婷综合网色欲| 婷婷狠狠五月综合| 午夜微拍福利| 无码人妻一区| 婷婷五月丁香欧洲| 久婷五月| 成久综合视频| 亚洲乱码日产精品BD| 色婷婷丁香网| 五月婷综合性中心| 亚洲午夜在线视频| 色综合色综合网| 激情亚洲五月| 色色色无码| 99在线视频。| 人妻久久久久久久 | 亚洲国产成人AV在线| 青青草护士中出内射-欧美电影在线天堂新版| 亚洲日日日| 激情综合网址| 婷婷五月天激情网| 六月婷婷七月丁香| 色播激情| 久久婷婷丁香| 美女天天久久| 婷婷伊人久久无码色五月| 1010日日无码| 激情AV中文| 日韩AAAAA| 9热视频在线观看| 美国不卡视频| 亚洲成人在线播放| 五月丁香激情综合欧美| 99热大| 播五月,色五月,开心五月播放器 | 在线亚洲综合网| 色播激情五月天| 综合久久久婷| 色综合99| 九九精品视频在线6| 五月丁香婷婷99| 成功精品影院| 日本无va视频| 日韩国产在线免费观看| 五月婷婷五月| VfJxEwPH| www.色婷婷| 综合色久| 欧美色色色色色| 婷婷免费无马| 九九这里都是精品| 天天久久66xxx| 99性爱视频| 人人看人人要| 色五月丁香五月| 亚洲色久| 五月天色五月| 91婷婷五月天综合视频| 99干日本| 五月综合激情久久| 日本欧美在线| 26UUU欧美| 狠狠色婷婷7777久| 四季日韩AV无码综合| 夜夜久久综合网| 极品色丁香| 久久婷综| 色婷婷亚洲婷婷| 五月天婷婷激情春色小说| 五月婷婷综合影院| 色情终和网| 丁香久久久| 最新日本A片| 无人精品在线视频| 久久久久久久久久久久久久人妻视频| 伊人9草在线观看| 天天爽天天爽| 色久女| 综合狠狠干| 五月叮香啪| 99视频| 99久久极情精品一区| 亚洲国产色婷婷| 九九久99免费视频| 中字幕视频在线永久在线观看免费 | 五月天激日本色情在线| 五月婷婷六月丁香综合| 天天艹| 色999五月色| 久久久久er热| 一级A片天天操夜夜操| 成人电影在线免费试看| 婷婷五月丁香A∨| 婷婷五月天激情四射| 熟女激情五月天 | www.色九月| 青青草国产亚洲精品久久| 伊人五月天| 丁香婷婷五月六月天| 99碰碰| 亚洲无码www| 国产精产国品一二三在观看| 玖玖色综合| 超碰二区| 大香蕉中文| 婷婷五月天资源| 色综合色综合色综合高潮| aaa久久| 爆乳熟女-区二区三区| 极品少妇XXXX精品少妇偷拍| 日韩啪啪网| 色综合九九| 五月天天综合| 婷婷激情视频| 色色丁香婷婷综合| 激情综合自拍五月婷婷色五月| 久久精品日| 天天肏在线| 色人久久| www.色婷婷| 精品久久99码| 久久99久久99精品免视看婷婷| 99精品在线| 丁香婷婷色情社区成人小说| 欧美国产一区二区三区| 丁香婷婷基地| 日韩在线一级| av久热| 婷婷丁香宗合888| 婷婷五月在线视频| 一起草AV| 色10月婷婷视频| 色婷婷九月| 99自拍视频网站| 三级毛片7979| 色欲丁香| 色婷婷五月六月丁香综合视频| 丁香五月天啪啪| 久久香蕉影院| 九九热这里精品| 色色啊| 99热精品少| 色五月天天在线观看资源站| 五月婷婷久久爱| 日本熟女啪啪| 色月丁| 免费看片在线观看| 97婷婷狠狠| 在线色色| 丁香5月综合啪啪| 青青草蜜臀| 五月婷丁香亚洲| 99色最新在线视频网站| 天天综合网在线| 综合久久久| 日本久久综合| 精品一二三区久久AAA片| 免费黄网不卡AV| 伊人天堂婷婷| 天天干,夜夜爽| 国产精品电影| 婷婷国产五月天17c| 亚洲 欧洲 国产 伦综合| 婷婷九月综合| 激情网 五月天| 久久九九99亚洲国产久精综合| 色丁香婷婷| 日本天天色| 97碰超级人人看| 日韩成人综合网| 国产乱妇乱子在线播视频播放网站| 黄色片avv| 99超碰人人| 色色操| 国产高清av黄色看片| 另类婷婷五月天啪帕帕| 99色综合网| 另类图片激情五月天| 丁香五月停停av| 2017狠狠干| 色五月网址| 狠狠色综合无线观看| 99资源在线视频| 欧美va亚洲va| 亚洲五月婷婷| 成人免费黄色短视频| 天堂网啪啪| 丁香六月婷婷综合色| 久久这里只有精品16| 久热亚洲| 99欧美热| 婷婷在线观看五月天在线视频| 26uuu亚洲欧美| 强伦轩人妻一区二区电影| 久久久久9| 亚洲视频另类| 99re这里只有精品视频6| 99re热免费观看视频精品| 婷婷综合视频| 人碰人人人玩91| 日本色图综合| 五月丁香六月婷婷视频| 我爱大香蕉| 国产超碰av| 金桔一区二区ab地址| 九月丁香五月婷婷| 国产AV一区二区三区日韩| 色情五月| 天天撸天天干天天插| 色人久久| 香蕉伊人综合| 激情五月丁香六月婷婷| 老师的粉嫩小又紧水又多A片视频 粉嫩AV久久一区二区三区 | 九九热91| 丁香五月精品| 嫩草AV久久伊人妇女超级A| 免费AV在线| 99热只有精品在线观看| 超碰精品在线| 亚洲AV网站| 婷婷丁香五月亚洲| 色婷婷中文| 成人天天爽| 天天影院色| 亚洲狠狠色丁香婷婷综合久久| 国产在线中文字幕| 久久婷婷91| 成人va在线| 激情五月婷婷色综合| 伊人婷婷五月天| 综合超碰熟| 99热99这里有免费的精品| 婷婷五月无码| 91久久1118| 四月丁香五月婷婷久久| 七七色综合| 久久伊人日日夜夜| 亚洲婷婷五月天| 人妻人人操| 国产精品色婷婷久久久精品| 色噜噜五月丁香婷婷| 婷婷综合网站| 日韩三十六页| 婷婷五月天偷拍| 国内一级片| 中文aV网| 日韩青青| 亚洲第一精品网站| 久久资源综合| 国产这里只有精品| 日本九九视频| 武则天精品久久| 操日视频| 这里只有精品视频99| 色娸娸综合网| 国产激情AV| 五月停停999| 91人操人人人操人| 久久性爱视频| 国产精品色色| www.婷婷五月天啪啪| 久久xxxx| www天天干| 乱精品一区字幕二区| 青青草a在线| 深爱激情五月天| 天天操天天爽天天爱| 国产3p露脸普通话对白| 99热的无码| 99ri6在线视频| 欧美成人A片AAA片在线播放| 熟女91九色| 成人婷99最新| 婷婷久久国产视频| 区欧美日韩成人| 五月开心深爱激情网| 无码动漫AV| 免费看成人747474九号视频在线观看| 另类专区在线观看| 久久视频在线视频| 99综合一区| 99色在线视频观看| 五月激情综合网| 天天摸,天天爽| 欧美婷婷丁香五月社区| 五月天婷婷偷拍| 激情综合五月婷婷| www.com久久久久久久久久久久久久久久久| www.lchjjc.com| 国产精品五月天婷婷| 久re在线| 五月成人网站| 色噜噜婷婷| 激情综合色婷婷啪啪六月天| 五月天开心网| 天天草天天摸| 秋霞三级色戒| 日韩三级视频一区二区| 亚洲色五月| 丁香伊人综合| 五月天婷婷情色| 99色色网| 热久久99热欧美国产亚洲| 国产婷婷五月天| 丁香六月婷婷| www.色五月| 久久五月丁香伊人青草| 欧美色偷拍| 激情五月综合| 五月丁香婷婷六月| 六月婷婷六月天天在线免费| 操b视频在线观看一区二区| 狠狠操综合| 色五月成人网| 思思热这里只有精品视频666| 成人做爰黄A片免费看直播室男男 久草热8精品视频在线观看 | 狠狠色噜噜狠狠| 久久女婷| 六月丁香色色| 婷婷五月天另类网站| 97碰碰视频在线观看| 国产五月视频| 91欧美| 五月天激情无码专区| 婷婷色网站| 丁香五月色情av| 热99在线| 婷婷 伊人 久久| 五月天色导航| 99精品热视频只有精品10| 大香久久综合网| 天天操夜夜操| 999婷婷综合| 丁香久久久| 天天爽天天爽| 天天做天天爱| 丁香五月激情视频| www.狠狠操.com| 婷婷月综合| 五月停停99| 午夜大香蕉| 97色片| 六月丁香色婷婷| 婷婷色五月天第7色| 亚洲一区国产传媒| 久久久婷婷色五月资源网| 少妇人妻偷人精品无码视频新浪| 久机视频这只有精品| 婷婷五月天美女21p| 五月丁香六月婷婷综合伊人| 亚洲第一色网站| 玖玖在线视| 色站9/| 深夜婷婷 丁香| 亚洲成人免费在线| 色综合伊人网| 五月婷婷中文字幕| 玖玖婷婷五月天| 99在线视频免费| 99这里只有精品|v| 婷婷草| 五月天激情开心网| 五月丁香亭亭天天舔| 99这里只有精品国产| 日本色频| 久久久色婷婷五月天| 久99视频在线观看| 丁香五月首页| 亚洲精品亚洲人成人网| 五月丁香婷婷综合网| 五月天天堂久久| 开心五月婷婷婷美女| 亚洲第一av| 天综合日日夜综合7799| 97伊人综合婷婷| 玖玖热99| 色情婷婷。| 日本女人久久| 91九色丨国产丨爆乳| www.jiujiujiu| 色天堂A| 欧美三级黄色片久久| 久久大香免费| 婷婷五月丁香啪啪| 久久天天天| 久久综合激情五月天| 精品视频这里只有精品| 丁香月五月天婷婷久久| 五月花婷婷最新| 天天干天天 亚洲| 99er视频在线| 久久五月天综合| 9九色首页| 日韩综合天堂| 婷婷久草| 婷婷干| 欧美精品久| 激情亚洲婷婷| 婷婷激情五月天7| 五月综合777| www五月天激情com| 免费视频无码| 久久久久婷婷| 七月丁香婷婷 色色| 欧美日韩精品一区二区三区钱| 99久久久久久久| 丁香色综合| 五月伊人综合| 色99欧洲色19| 午夜亚洲国产精品av一区二区| 夜夜干 夜夜操| 欧美交换配乱吟粗大25P| 五月停视频天堂| 97日本在线| 五月天丁香网| 婷婷激情五月综合丁| 丁香桃色网| 五月婷在线观看| 国产真实乱了老女人视频| 五月四色激情| 超碰91av| 国产色五月婷婷| 天天做天天爱天天高潮| 国产成人网址| 欧美久人人| 天天色月| 九九热只有精品| 大香蕉久操| 色五月丁香com| 丁香五月婷婷Av| 欧洲亚洲免费视频区| 99这里只有精品|v| 色色婷婷五月天| 免费观看日韩成人av| 五月丁香婷婷综合网| 五月婷婷色情| 久九色| 激情亚洲五月| 91精品91久久久中77777| 日韩综合大黄| 久久综合人妻| 97久久超碰| 婷婷色色网站| 九九色色| 婷婷狠狠操| 精品一二三区久久AAA片| 性爱网六月丁香| 色宗合,宗合网| 欧美激情综合色综合啪啪五月| 蜜桃成语时李时珍 免费| 五月丁香毛片| 日日操人人操| 日本综合色图| 伊人激情综合网| 欧美啄木乌丝袜人妻系列| 涩涩涩五月天| 精品成人在线观看| a免费在线| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 超碰在线中文字幕| 日韩国产AV播放| 婷香五月网在线| 久久久久激情网| 激情五月天婷婷播播久久综合91| 中文字幕婷婷五月天| 手机旧版看人妻1025| 婷婷在线五月综合| 丁香五月色综合色播五月| 99狠狠操一| 欧美一级a| 激情综合网婷婷久久| 丁香九月久久| 97色啪| 亚洲热久久| 色婷婷视频综合| 久99| 快乐激情五月色婷婷| 欧美日韩成人在线网站| 国产亚洲av片| 丁香五月五婷| 激情婷婷五月丁香啪啪啪| 色情·com| 成人在线日韩| 碰碰女| pacopacomama 070722_670 素人奥様初撮りドキュメント 103 大久保純子 | 免费无码毛片一区二区A片| 色五月网址| 伊人网大香| 9精品视频在线| AV人人操| 丁香六月av| 婷婷激情社区| 婷婷色六月| 五月天色社区| 热婷婷久| 2025色婷婷| 婷婷狠狠爱| 色久五月天| 久久免费干| 日日日天天干| 亚洲成人无码免费| 天天做天天爱天天玩| 九草性爱| 日本久久性| 五月婷婷啪啪啪| 涩综合网| AA丁香综合激情| 99热这里只有精品66| 久久天天天| 色香蕉影院| 国产成人一区二区三区在线观看 | 色综合中文| 婷婷无码视频| 99爱视频在线观看| 五月激情另类| 六月婷综合| 丁香六月久| 91 原创 在线 九色| 五月天操逼网| 综合激情伊人影视在线| 欧美搡BBBBB摔BBBBB| 亚洲精品色色色| 一区二区乱视频码| 五月天婷婷色色网| 九九热a| 婷婷五月天色| 亚州性爱99| 丁香婷婷五月综合| 丁香婷婷深情五月亚洲| 777精品成人a v久久| 无码字幕中文| 五月玖玖| 久久99热免费| YW无码| 色九月婷婷综合| av 一区三区四区| 五月天激情美女久久| 精品人妻一区二区三区四区不卡在| 九月婷婷激情| 另类小说五月天| 久久精品亚洲一级牲爱综合 | 九九九九这里只有精品| 婷婷五月花| 青青草免费公开视频| 六月丁香社区| 欧美日韩成人在线| 久久受www免费人成| 另类 在线| 五月花综合网| 野外99热| 色香欲综合| 色色丁香激情五月| 色久九| 男女啪啪做爰高潮无遮挡| 99色精品| 在线五月色播| 国产精品丝| 99网| 在线中文亚洲| 婷婷免费无视频| 日韩 中文 欧美| 人妻熟女一区二区AV| 丁香五月色网| 五月丁香六月婷婷玖玖| 婷婷色情网| 五月激情四射网站| av九九| 五月六月婷婷| 噜噜综合网| 婷婷久久内射| 久久人人添人人爽添人人片αV | 激情五月天激情综合网| 九九蜜臀精品| 色婷婷先锋| 激情6月| 五月天桃色深爱网| 99久热| 亚洲精品五月| 久久婷婷六月| 中文字幕,综合,91| 99久热视频在线| 日日干夜夜干| 人人操插| 久久五月天综合| 五月婷婷久久网| 五月天激情国产综合婷婷婷就去爱| 色综合久久无码| BBWCUCKOLD精品熟妇| 亚洲五月婷婷| 色欲午夜无码久久久久久张津瑜 | 亚洲综合激情五月久久| 久99久在线| 免费观看的婷婷五月视频在线| 五月婷婷这里都是精品| 久久最新色色色| 久久久久激情网| 国产超碰av| 婷婷丁香日韩五月| 亚洲国产精品SUV| 亚洲九九视频| 五月婷婷久久综合| 丁香五月激情网| 五月婷在线播放| 99热99这里有免费的精品| 台湾综合丁香五月蜜桃| 丁香婷婷色五月| 婷婷色九月| 99九九玖玖| 九九热婷婷| 婷婷久久在线| 激情婷婷综合网| 9l视频自拍九色9l黑人| 九色亚洲| av在线免费播放观看| 午夜不卡久久精品无码免费| 精品国产AV色一区二区深夜久久| 99精品在线| 夜夜骑夜夜操| 婷婷深爱五月| 色五月播五月| 天天日天天色| 五月丁香色情| 99热只有| 午夜天堂一区人妻| 女人被躁到高潮嗷嗷叫小| 欧美丰满熟妇BBB久久久| www.色婷婷| 极品少妇高潮啪啪AV无码| 99操| 天天射天天插天天干| 大香蕉220| 婷婷五月天VI| 九九久久腿| 色原狠狠综合| 亚洲婷婷基地| 久草五月| 久久婷出差欧美色两性综合网| 五月熟妇婷婷久久| 五月色俺婷婷| 色五月丁香婷婷| 婷婷久久免费| 九九热只有精品| 五月丁香久久| 97超碰,人人舔,人人操,人人摸 | 丁香九月综合激情| AV人人操| 中文字幕日本最新乱码视频| 婷婷丁香大香蕉| 欧美三级级99久久| 欧美日韩成人在线观看| 五月丁香猫咪久久婷婷综合视频激情四射网入口 | Av九九| 99热综合| 色婷婷丁香花五月天| 特黄三级又爽又粗又大| 任我鲁这里有精品视频| 99久久综合| 69午夜成人影片| 色婷婷社区| 色丁香五月天| 精品一区二区三区免费毛片爱| 综合色、色综合| 久久aaaaa| 国产67194| 五月丁婷婷| 天天色噜| 色综合五月| 四色五月婷婷| 91色在线/日韩| 深爱激情四射| 停婷丁五月在线| 五月丁香婷婷成人网| 天天日天天久久青青| 亚洲自拍天堂| 一区二区中文字幕| 九九热99热| 色婷婷五月在线| 激情色五月天| 丁香花五月天激情| 操操操操操电影网| 色五月婷婷操逼| 最近免费中文字幕大全高清大全1| 极品五月天| 久久永久网址| 99热国产这里只有精品| 精品色色| 久99精品视频| 欧美色骚婷婷五月天| www.五月丁香| 99热在线观看| www.99精品在线| 婷婷五月天色网久| www.婷婷六月天| 新激情婷婷| 婷婷综合五月天| 五月婷婷在线观看| 色婷婷视频| 69人人操人人爽| 色噜噜狠狠色综合伊人| 婷婷五月婷婷| 欧美情色一区| 任你草| 五月成人网站| 欧美三级巜人妻互换| 99色热视频| 色综合色综合网| 亚洲无码99| www色婷婷com| www激情网| 丁香六月婷婷久久综合| 久久九九婷婷| 狠狠久综合| 日日操天天操| 成人网站免费在线播放| 亚洲成人黄色网| 丁香五月综合| 久热九九| 五月 激情视频| 玖玖@三月天天丁香婷婷| 综合综合色色| 99综合视频一体| www.99热这里精品| 丁香五月激情综合啪啪| 中字幕视频在线永久在线观看免费| 另类视频综合| 五月婷婷激情中文字幕| 色播激情婷婷| 天天cha成人综合网| 六月激情网| 五月天堂婷婷| 天堂五月婷婷| 亚洲AV永久无码影院黑人 | 亚洲夜夜操| 国产精品日本一区二区在线播放 | 欧美 日韩 成人在线| 丁香六月成人网| 俺去啦综合网| 激情五月天天| 婷婷五月天伊人网在线观看视频| 色婷婷久久| 99re最新地址视频| 欧美色图天堂网| 色色色综合色| 亚洲综合草草| 亚洲六月色婷婷| 色噜噜五月天| 玖玖婷婷色五月| 五月激情婷婷播播开心| 五月婷婷色白丝| 色七七色九九| 婷婷久久婷婷| 色婷婷的五月天| 色色五月激情| 天天爽天天操| 国产成人AV在线播放| 欧美激情VA永久在线播放| 丁香五月婷婷综合91| 五月丁香六月婷婷国产视频| 丁香婷婷久久综合在线| 五月婷婷六月丁香色| 婷婷五月综合网激情| 丁香五月天论坛| 亚洲综合成人网站| 女人天堂久久| 玖玖色综合网| 久久九九免费视频| 激情五月黄色小说| 亚洲妇女熟BBW| 美女主播野战视步页| 婷婷久久色五月婷婷久久久| 久久这里只有精品22| 91人人爱| 五月婷婷在线免费| 婷婷情色五月天| 99久久99久久综合| 另类五月婷婷| 狠狠爱深色婷婷综合| 天天视频亚洲| 成人毛片在线免费观看| 免费观看亚洲AV片| 久热久色| 99免费超碰在线| 婷婷色情六月| 91精品久久久久久久久| 亚洲精品亚洲人成人网| 天天肏屄夜夜爽| 五月婷婷色欲| 亚洲色爱综合| AV在线免费播放| 婷婷五月激情网| 五月丁香六月合| 九九综合88| 久热黄色| 精品视频99看在线视频| 亚洲精品第一国产综合亚AV | 网色99| 二人电影免费版在线观看| 91色性感五月婷婷丁香| 色婷五月天| 久青青久| 日本成人内射| 九九九色综合| 五月婷婷开心激情六月蜜桃| 99热99日天天干| 91人人操.COM| 夜夜做天天爽| 亚洲色婷婷五月天| 色婷视频| 久久偷拍综合五月天| 亚洲网视屏| 色欧美一级| 五月婷婷色| 99小精品| 狠狠色九月| 天天日天天色| 久久黄色片| 色色99| 久草 tingting| 99在线精品观看99| 国语精品探花| 五月丁香婷婷色| 婷婷碰碰| 91超级碰碰| 久久激情五月网| 日韩啪啪视频| 婷婷六久久| 婷婷五月丁香基地| VfJxEwPH| 丁香五月六月久久综合 | 午夜电影网VA内射| 九九色逼| 婷婷激情综合色五月久久91| 无码色色色| 日韩啊啊啊| 婷婷五月天直播| 九九人人自拍| 欧美性爱丁香五月| 九九热这里| 99在线观看精品视频| 婷婷狠狠久久| 天天搡日日搡aaaaⅩ| 五月综合激情网| www.婷婷五月天| 五月色综合| 五月婷婷开心六月激情小说| 国产成人网| 97超级碰碰碰| 96丁香婷婷九月蜜桃综合久久| 婷婷激情四射| 欧美婷婷综合| 亚洲精品性色| 色婷婷成人丁香| 99在线观看精品| 欧美日本不卡黄色片| 国产激情综合| 99精品自拍| 亚洲国产99| 伊人五月天婷婷| 久久99热这里| 99久久久久| 九九综合网色全集| 色婷婷丁香AV综合| 黑人巨粗进入警花疼哭A片| 99色性爰网络| 色久女| 五月天播播中文字幕| 人人人人人人人草| 五月天色综合服务平台| 天天婷婷综合| 婷婷色五月激情| 香蕉久久六月| 超碰色女| 久草嫩草在线观看| 久久久久久久久久久久久久久久一道本| 在线不卡视频| 亚洲另类在线观看| 91人人操.COM| www999日韩精品| 天天干天天操天天爽| 丁香五月婷婷激情中文| 天插天啪天啪天啪| 熟女五月天久久综合| 欧美激情 日韩无码 婷婷 五月天| 丁香大香蕉| 综合久久影院| 97资源欧美日韩大香蕉超碰一区| 久久综合播放| 香蕉大综综综合久久| 九九www| 欧美精品A片一区在线观看| 久久精彩视频99| 夜色.cnm| 影音先锋91男人资源在线播放| 久久久久久久久久久jjjj| 久久五月婷综合| 婷婷五月激情基地| 一本婷婷丁香久久 | 国产精品-第3页-91JQ就要激情网91JQ5.JQJQ926.XYZ | 丁香五月丁香伊人| 五月婷婷m| 色色网站免费观看| www.26uuu.com亚洲电影| 我要射综合| 伊人五月丁香| 五月婷婷香| 五月丁香婷婷爱| 97婷婷丁香| 欧洲亚洲免费视频9| www.99在线| 天天弄天天操| 国产欧美日韩综合精品一区二区| 免费无码毛片一区二区A片| 极品人妻VIDEOSSS人妻| 五月天社区婷婷| 99久久婷婷五月天| 丁香婷婷色情社区成人小说| 五月婷婷官网色| 婷婷婷久久久| 亚洲精品视频在线| 午夜丁香| 激情五月黄色| 99热很操老逼| 五月天婷婷免费| 色性综合| 很很干在线视频| 丁香婷婷婷五月| 丁香婷婷色情| 色99在线视频| 嫩草AV久久伊人妇女超级A| 伊人九热| 爆乳熟女一区二区三区爆乳| 99久久99九九99九九九| 袁子仪视频观看| 久99热| 色婷婷五月天成人网| 99久在线精品99re8热| 98国产精品综合一区二区三区| 激情 久久 婷婷| 激情视频综合| 日本激情ⅩXX免费视频| 色五月视频,小说| 天天人人人人人人人人人人人| 久久婷婷五月天| 欧美69久成人做爰视频| 亚洲另类AV| 色综合久久久久| 亚州日本欧州韩美高青高潮一| 可以直接看的av| 色香欲综合| 97色 五月天丁香| 九九热大香蕉| 五月婷庭丁香在线| 激情六月色| 婷婷六月色| 国产99久9在线+|+传媒| 91九色丨国产丨爆乳| 97深爱伊人综合| 久色大| 在线观看免费视频| 情一色一乱一伦一91A| 五月丁香美女| 五月天婷婷影院影院观看| 激情小说视频图片| 91女人18毛片水多国产| 亚洲永久免费| 成 人 色 色| 亚洲六月色| 久久久.www| 天天 青草 制服丝袜 在线| 天天插插天天| 激情丁香五月| 婷婷影院欧美| 情婷婷五月天在线| 99视频网址| 婷婷伊人久久无码色五月| 五月综合激情| 日本欧美国产| 丁香五月电影| 任我肏视频精品| 久久五月天激情婷婷| 欧美日韩aaa| 丰满人妻妇伦又伦精品国产| 超碰97干| 丁香五月激情无码视频| 人人操av| 久久码久久无清| 日日婷婷不卡| 久久久精品色| 99热九九在线| 思思99热这里只有精品6| 丁香五月天啪啪| 五月天婷婷涩涩| 久久五月激情网| 色婷婷狠狠18禁| 九月av在线| 丁香五月婷婷天激情| 99热首页| 大香蕉Av在线| 天天综合网亚洲网站| 狠狠色丁香| 色V狠狠的干| 婷婷亚洲综合| 五月激情婷婷偷拍| 五月视频日本免费观看| 操97| www.99热精品| 五月丁香欧美综合| 国产精产国品一二三在观看| 色婷婷WWW| 超碰在线人人| 日本97久久久精品| 99视频只有这里精品| 四川女人毛多水多A片| 这里只有精彩小视频视频网站| 日韩色五月| 5五月综合网亚洲| 激情小说视频图片网| 亚洲狠狠爱婷婷| 婷婷激情综合| www.日日夜夜| 性无码专区无码| 96丁香六月婷婷蜜桃综合久久| Caop在线| 六月丁香五月天| 婷婷六久久| 狠婷婷五月| 2017人人操| 99热只有这里有精品| 日日操夜夜操中国无码| 久久这有这里精品| 大香蕉婷婷婷| 国产avapp 网| 久久五月人人摸| 超碰成人影视| 亚洲综合视频网| 99re这里只有精品免费| 精品9l九九九九九77777| 91成人视频| 丁香六月天婷婷色| 欧美日本高清视频99| 夜夜骑夜夜撸| 六月丁香好婷婷| 日本一级特黄大片AAAAA级| 丁香六月婷婷| 色色网站| 婷婷六月丁香激情| 亚洲人成播放网站| 色婷婷狠| www,婷婷五月天777me,com| 婷婷丁香91| 超碰在线91| 婷婷六月综合激情| 激情五月综亚网| 国产乱人偷精品人妻A片| 日韩色五月| 婷婷五月天综合激情| 亚洲日比视频| 天干夜夜操| 狠狠搞亚洲| 日本色频| 亚洲精品444久久久久久| 狠狠操狠狠操AV| 五月婷婷丁香瑟瑟视频| 丁香色五月婷婷17C| 97在线天堂| 九九热视频在线观看| 丰满熟女人妻一区二区三| 丁香五月婷婷亚洲色图| 欧美在线视频9| 国产亚洲精品久久久久久郑州 | 五月婷婷黄网站大全| 五月丁香色色网| 夜夜爽天操| 国产乱码久久| 九9九9无码| 国产精品第一国产精品| 变态另类9| 在线可以看的av网址| 怕怕視頻| 艹天天射| 超碰国产在线播放| 91中文在线| 六月婷婷五月天| 青青草深爱激情网| 成人短视频在线| 日本9区视频| 午夜69成人做爰视频| 五月丁香91| 五月丁香六月激情综合欧美| 色久在| AA久久| 激情色情五月天| 图片区 小说区 区 亚洲五月| 九九热中文| 妻久久人久久| 26uuu激情五月天| 久久狠狠欧美| 日本精品干| 五月伊人91| 伊人激情| 热九九精品| 99无码视频| 丁香五月激情综合啪啪| 777.色色| www.99热| 中文字幕人妻在线| 久久精品99久久久久久久久| 99国产99|