色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線(xiàn)實(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í)間線(xiàn)來(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ù)源、所有操作盡量能在線(xiàn)執(zhí)行而非復(fù)制粘貼、所有代碼示例必須與實(shí)際代碼倉(cāng)庫(kù)保持同步。為了做到這三點(diǎn)技術(shù)選型一開(kāi)始就沒(méi)什么懸念。前端需要一套成熟的 React 生態(tài)后端需要一個(gè)能直接復(fù)用前端類(lèi)型定義的服務(wù)端方案數(shù)據(jù)庫(kù)需要一個(gè)支持快速迭代且類(lèi)型安全的 ORM。結(jié)果就是 TypeScript 打底Next.js 做頁(yè)面和接口宿主tRPC 做端到端類(lèi)型安全的通信Prisma 管理 PostgreSQL最后用 Tailwind 快速搭界面。這五個(gè)組件正好就是 T3 Stack 的完整陣容。這里我多說(shuō)一句為什么不用傳統(tǒng)的 REST 方案。如果按 REST 來(lái)寫(xiě)前端需要維護(hù)一套 API 路徑常量后端需要寫(xiě)路由和中間層校驗(yàn)兩邊各維護(hù)一份類(lèi)型定義聯(lián)調(diào)時(shí)總會(huì)有一方先改。tRPC 的思路是讓你直接“調(diào)用函數(shù)”而且函數(shù)簽名里的類(lèi)型是自動(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)和類(lèi)型同步成本在兩個(gè)人開(kāi)發(fā)的小項(xiàng)目里會(huì)被放大。最終定下 T3 組合的核心原因可以歸納成三條單一代碼倉(cāng)庫(kù)、單一語(yǔ)言、單一類(lèi)型系統(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)部工具類(lèi)項(xiàng)目”t3code恰好屬于這一類(lèi)。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)有類(lè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里提供前后端共享的類(lèi)型工具前端頁(yè)面完全可以直接引用server層的類(lèi)型不需要額外的 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 客戶(hù)端的全局緩存防止開(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 打通全棧類(lèi)型安全3.1 tRPC 的三個(gè)核心概念tRPC 上手前先記住三個(gè)詞procedure、router、caller。procedure 是對(duì)后端函數(shù)的一個(gè)抽象分 query查詢(xún)和 mutation寫(xiě)操作兩類(lèi)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)檩斎腩?lèi)型和安全校驗(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類(lèi)型是直接從服務(wù)端entry.list這個(gè) procedure 的返回值推斷出來(lái)的。也就是說(shuō)如果后端改了返回結(jié)構(gòu)前端這里會(huì)立刻出現(xiàn)類(lèi)型報(bào)錯(cuò)不用等接口聯(lián)調(diào)發(fā)現(xiàn)問(wèn)題。第二createEntry.mutate的入?yún)㈩?lèi)型也是從服務(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 下只需要改一處剩下兩處類(lèi)型會(huì)自動(dòng)傳播。3.3 tRPC 和 Next.js Server Component 的結(jié)合除了客戶(hù)端調(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)出的不是客戶(hù)端那個(gè)api。它會(huì)在服務(wù)端直接調(diào)用 router 里的函數(shù)數(shù)據(jù)不經(jīng)過(guò)網(wǎng)絡(luò)棧性能上比傳統(tǒng) SSR 還要好。這種寫(xiě)法非常適合內(nèi)容展示類(lè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[] 類(lèi)型省一張關(guān)聯(lián)表查詢(xún)hasTag的場(chǎng)景用tags [docker]就能完成夠用且簡(jiǎn)單。關(guān)于category一開(kāi)始我用了必填字段后來(lái)發(fā)現(xiàn)實(shí)際錄入時(shí)很多條目其實(shí)不好歸類(lèi)改成了可選。這個(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)致在線(xiàn)遷移失敗。這個(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)建新遷移。框架預(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)求打滿(mǎn)我的建議是檢查.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)目本身不依賴(lài)重型可視化庫(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)部工具圖片不多但每次訪(fǎng)問(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)上線(xiàn)后我觀察了 Vercel 分析面板t3code的首頁(yè) LCP 穩(wěn)定在 1.2 秒以?xún)?nèi)交互頁(yè)面 INP 在 200ms 以?xún)?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 查詢(xún)里加take分頁(yè)參數(shù)或者引入搜索。目前t3code的數(shù)據(jù)量在幾百條量級(jí)索引都命中沒(méi)必要過(guò)度設(shè)計(jì)。6. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄6.1 類(lèi)型不更新的典型問(wèn)題tRPC 類(lèi)型傳播是它的賣(mài)點(diǎn)但開(kāi)發(fā)中有一個(gè)很煩的現(xiàn)象后端路由改了前端報(bào)錯(cuò)卻還是舊類(lèi)型。這個(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 類(lèi)型看是否有顯式 any # 在代碼里搜索 : any如果有替換為具體類(lèi)型 # 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)很省事。現(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前端類(lèi)型與后端不一致dev server 緩存舊類(lèi)型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)型帶來(lái)的省心感只有當(dāng)你改完后端字段前端整條鏈路自動(dòng)同步時(shí)才有直觀感受。如果你手上也有類(lèi)似t3code這種前后端同團(tuán)隊(duì)維護(hù)的內(nèi)部項(xiàng)目不妨按這套思路試一次從某種意義上說(shuō)它會(huì)改變你對(duì)全棧開(kāi)發(fā)的某些習(xí)慣。最后留個(gè)擴(kuò)展建議下一步可以給t3code加上簡(jiǎn)單的基于會(huì)話(huà)的登錄鑒權(quán)接入 tRPC 的 middleware這樣每一條 procedure 都能統(tǒng)一控制訪(fǎng)問(wèn)權(quán)限項(xiàng)目的完整度會(huì)再上一個(gè)臺(tái)階。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
高清国产成人无码| 综合网97| 日韩精品中文字幕一| 加勒比综合在线| 防屏蔽在线视频| 黄色片A级一区二区三区| 国产60区。| 九九色图| 国产欧美一级在线观看| 91精品国产91久久福利| 91M一社| 青青草九九九九九| 五月丁香成人网| 乱论91| 人人干人人操人人爱| 美女91色黄18| 亚洲爱爱视频一区二区| 欧美 亚洲 大香| 色999五月色| 性影在线视频| 国产又黄又爽又刺激久久久久久| 97国产超碰| 久久久噜噜噜久久人妻| 超碰久久网| 亚洲AV乱码专区国产噜噜亚洲| 中文字幕一区二区在线日韩精品| 偷拍 欧美 日韩| 韩日欧亚a级| 久神马| 亚洲天堂中文字幕无码男同| 久久一二三四五六七八九区区区| 久草五月| 久操精品网| 婷婷五月天影院| 国产精品一二三在线看| 久久成人午夜精品影院| 久久精视频美日韩在线视频| 色99视频| 久热伊人| 白丝少妇一区二区| 天天做天天爱天天爽AV| 色色综合97| 亚州色图欧美| 超碰色97| 中文字幕一区二区视频在线观看 | 熟妇色99| 色香综合| 曰韩人妻中文字幕在线| 超碰97人妻在线| 欧美一级A一级a爱片久久| 色图四区| 搡老女人911熟妇老熟女| 黄片免费日韩| 天天操夜夜操狠很操| 92性色国产午夜福利在线661 | 女人爽到高潮潮喷18禁网站| 少妇超碰在线| 丝袜美腿校园春色| 尤物视频网 刘玥| 粉嫩久久久极品| 一二三区视频在线观看| 97超碰色色| 久久无码一区二区二三区性色| 91社区伊人| 秋霞一级A片黄色视频| 亚洲性爱电影| 欧美网站免费| 亚州操操穴网| 亚洲自拍欧美色综合| 成人久久精品| 性生活性生大爱77AV国产| 91M一社| 大色综合| 久久毛卡| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 94色色电影网| 国产精品无码av在线 | 婷婷五月天色网| 94色色电影网| 国产日韩欧美亚洲精品95| 国产18精品亚洲精品| 激情第四色| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 青娱乐久久艹| 啊啊啊啊啊啊在线看| 97色97好| 凹凸 69堂 在线播放| 久久综合九色综合欧洲98| 日韩免费大片一级播放| 超碰97男人| 尤物AV免费网站| 亚洲无码 国产无码| 欧美激情中文字幕另类小说| 老熟女区| 香蕉视频欧美一卡二卡| 久久亚洲av成人无码国产| 人妻一区二区三区| 俞拍久久国应视频| 无码日韩网站| 欧美亚洲成人在线一区二区三区| 天天影视色香欲综合网小说| 超碰99在线观看| av天天在线| 性一级黄色录像片网站导航| 无码伊人久久大杳蕉中文无码| 熟啊v色欧美热| 99国产女人| 亚洲av综合色区无码一| 人妻在线大香蕉| 91啪啪| 青草av在线| 九九九九免费高| 国产精品白丝在线播放| 亚射在线| 亚洲AV无码翔田千里网站| 亚洲熟妇自偷自拍另欧美| 亚洲不卡一| 操逼操逼逼操操逼91| 精品久久久中文字幕不| 99亚洲国产精品色一区二区三区| 九九九久千久久激情蜜桃在线看 | 亚洲国产亚洲天堂| 日韩操逼HD| 国产精品熟女AV中文字幕在线播放| 一卡二卡三卡| 五月综合久久| 男人的天堂 在线一区| 欧美毛片在线网| 日韩精品午夜操呦呦不卡影院| 国产精品一区二区三区,亚洲综合| 秋霞午夜视频一区二区| 亚洲制服欧美另类内射| 97欧美日韩精品| 日本肉体xxxx裸交| 国产在线激情| 色蜜AV| 一区二区影视| 麻豆国产av网| 国内毛片国产欧美拍| 情色五月天久久久| 欧美久久人人网| 色www精品视频在线观看| 欧美大香蕉同搞| AV色图| 日韩免费看黄片| 91熟女视频网| 久久久久久性爱片| 91精品国产日韩欧美综合| 校园春色中文字幕AV| 日本五十路熟女一区二区| 加勒比综合a∨| 任你爽视频| 97香蕉网| 91嫩草在线| 国产一区二区三区影片| 91综合色| 色哟哟av网址| 亚洲激情网一二三四区| 国产91乱伦| 舔舔啊| 久久精品国产72国产精品福利| 亚洲一区制服诱惑| 欧美综合97www| 天堂无码精品国产久| 青青草在线视频播放器| 99999久久久久9国产精品| 丰满美女一级毛片在线播放| 成人十八禁日韩欧美一二三| 国产大学生高潮在线播放| 97天天摸天天爽| 九九精品热| 91少妇| 麻豆天美传媒在线视频天堂| 日韩色欲久久一二三四区| 热久久无毒不卡| 97资源制服丝袜| 性色av大全| 毛片99-全集电影手机免费观看完整-B029AV | 五月天丁香| av无线看| 91狠狠综合| 久久大精品乱码视频人妻熟女| 久操精品网| 香伊人在线| 欧美日韩国产精品久久色婷婷| 澳门成人网站久国产日韩| 亚洲一卡2卡3卡4卡乱码网站| 漂亮人妻被强中文字幕hd| 久久精品72| 99色综合| 色yeye成人免费视频| 另类图片天天影视| 偷拍新久久| av一区二区三区四区五区久草臀| 久久久99久9| 国产成人精品亚洲日本| 日韩久久.一级黄色片| 成 人 A V免费视频在线观看| 欧美色爱综合| 伊人欧美大香蕉视频| 91色伦综合| 九九热免费在线国产视频伊人五月| 色啪网| 最近2019中文字幕国语免费版| 日韩无码人妻| 91亚洲网| 97国产精品视频| 欧美色道啊| 亚洲一区二区 麻豆传媒| 高清不卡视频| 亚洲熟妇图片| 日本九九久久99播| 日本亚洲vr欧美不卡高清专区| 色99视频| 蜜臀国产AV中文字幕| 簧片免费看视频| 久久精品国产亚洲AV无码电影| 国产野战露脸在线播放| 天天做日日做| 夜嗨影院| 日本 欧美 国产一区| 精品一二三区久久AAA片| 人妻一区视频| 青青操轻轻| av无码av无码专区| 亚洲色综合| 天天天天操| 91在线色综合| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 狠狠狠狠狠| 一区二区日韩欧美久久| 97视频在线免费看| 亚州欧美总和| 国产sv美女内射| 亚洲精品人体| 麻豆国产97在线| 亚洲密乳AV| 岛国视频免费在线观看| 嗯嗯嗯好爽| 亚洲欧美综合色| 撸撸成人在线视频| 人澡逼| 91国产丝袜白虎| 久久这里只| 1769一区| 日本午夜福利影院| 大香蕉手机在线视频| 久久久久ab| 欧亚韩国999| 久久精品无码专区| 一区二区三区在线美女| 亚洲熟女中文字幕在线| 四虎 精品 WWW| 久啪| 青青青青操国内视频在线| 麻豆国产97在线| 无色无码| 在线人妻熟女一区二区三区四区五区| 爱妻综合网| 欧美性色欧美| 国产网红精品| 乱日视频| 亚洲小说视频| 人人操人人狠狠操| 天天摸天天碰天天添青青| 国产国产亚洲一二三久久| 在线a亚洲视频播放在线| 一区二区三区成人高清视频| 久久久久久久久久久久久久久乱码| 欧美日韩美女精品久草一区二区三区 | 97超碰色屌| 无码二级三级| 日韩A优精品在线观看| 九九热精品在线| 极品粉嫩少妇视频| 国产精品熟女一区二区三区| 天天操天天舔| 96久久久精品| 日本狂喷奶水在线播放212| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 国产在线精品偷| 天天日天天射天天干| 九久9精品| 亚洲精品日韩国产欧美| 超碰久久精品| 无码高清操逼| 国产熟女一区二区丰满| 日本操逼视频在线| 国产极品999| 男人的天堂99| 狠狠色色| 国产三级片在线观看| 囯产乱伦一区二区三女| 久久久少妇诱惑精品视频| 亚洲国产美女久久久久| 啊啊啊快操我视频| a片久久久久久久久久久久 | 97天天摸天天爽| 日本三级日本三级99| 欧美91精彩| 欧州一区二区三区四区| 中日无幕一二三四区| 久久少妇| 91国产丝袜足交精品视频| 亚洲交性| 黑操B| 亚洲欧美999| 精品久久久九九九孕妇| 一区操逼| 久草成人影片| 丁香五月激情啪啪| 久久男人的天堂| 国内精品不卡无毒99999| 色综合av综合久久| 玖玖爱一区在线| 搡老女人老妇女AAA一VU麻豆 | 爱av免费| www男人天堂| 婷婷综合五月| 黄色成人网久久久久久| 亚洲综合69| 爽 好舒服 无码刺激久久| nuu12国产麻豆精品| 九色视频91| 玖草在线视频| 亚洲图片 激情小说| 全免费a敌肛交毛片免费| 伊人9| 99精品丰满人妻无| 久久无码成人| 巨乳特殊服务按摩| 东京热一区二区三区四区五区六区| 99视频这有这里有精品| 青草伊人久久| 91国产丝袜足交精品视频| 一级片在线观看高清无码| 亚洲女人毛茸茸91| 国语人妻精彩刺激| 中文字幕中文字幕一区二区| 久久久久久久| 亚洲自拍一区夜夜操| AV污污污污| 嗯嗯啊啊啊好爽| 欧美天天综| 99精品视频在线观看免费| 青草一区二区| 久久精品国产精品| 久久久工口| 亚洲无码久久久久久久| 亚洲熟女乱色一区二区三区 | 久操91视频| 欧美天天在线| 国内黄色精品| 99婷婷| 国产家庭乱伦性爱视频| 国产麻豆91欧美一区二区久久婷婷国产精品 | 亚洲丝袜天堂| 一区二区激情国产熟女| 久久久免费一级黄片| 精品久久久av无码免费| 一区二区三区一亚洲中文字幕、综合区灬 | 看黄片视频免费| 中国一级αV| 死我十八禁| 亚洲综合小视频小说在线观看| 99综合免费视频| 美国一区二区三区视频| 大色综合| 亚洲美女AV无码| 亚洲熟妇AV日韩熟妇在线| yazhousetuoumei| 亚洲AV免费在线| 日本五十路熟女一区二区| 日本视频在线中文字幕| 99re久久| 97天堂| 欧美日韩小说| 偷拍亚洲情色| 天天影视综合色| 人妻少妇三级| 欧亚日韩综合精品国产| 天堂射| 亚洲精品国产精品乱码不卡| 丰满翘臀美女影院视频| 久久久九97| 色色色网站| 激情综合久久| 色99视频| 97色在线观看| 观看视频图片一区二区三区| 激情露脸爱| 九一亚洲国产免费| 欧美日韩222| 美女高潮视频91| 国产AV天美| 欧美在线啊啊啊| 在线观看视频91| 亚洲高清少妇| 午夜九九| 啊啊啊啊啊好多水| 色y情视频免费看| 国产精品久久天天干| 搡老熟女免费视频| 欧美日韩黄片精品在线| 日本高清一区二区在线| 99久久婷婷| 久久草草欧美精品| 嗯~啊~快点 死我视频| 日韩欧美亚洲国产日韩| 一直超碰| 精品人妻久久久| 老妇女91| 亚洲日韩在线a不卡99精品 | 日韩中文字幕2020| 亚州五月| av网站在线看| 亚洲字幕一区二区| 日韩999| 中文字幕在线播放2中文字幕在线观看2| 久久黄黄| 操淫穴亚洲五月丁香| 超碰在线综合97| 97Ai亚洲| 黄色AAAAA欧美| 人人插人人搞人人操| 欧美少妇大量自拍视频在线观看| 97超碰免费人人性爱| 中文字幕熟女人妻丝袜丝| 麻豆 美女 丝袜 人妻 中文| 9丨亚洲一区二区在线| 久久性爱大全| 艳尻美人妻| 97超碰伊人| 五月天久久综合网| 一本道综合色图| 91天天c| 人妻丝袜一区二区三区在线| 亚洲第一精品在线视频| 狠狠操夜夜操蜜桃视频三区| 老熟妇一区二区三区啪啪| 91亚洲人| 日韩午夜啪啪视频| 呦女网站| 亚洲 一区二区 自拍| 亚洲丝袜色| 性感美女啊啊啊在线| 91福利网在线观看| 亚洲中文字幕噜噜噜久久久| WWW美腿丝袜香蕉中文| 一中国女人毛片水真多| 日本91白丝| 97精品人妻一二三四| 欧美综合娱乐久久| 亚洲蜜臀懂色| 国产拍偷精品网站| 97天天摸天天碰| 99热在线只有精品| 亚洲综合中文字幕有码| 亚洲欧美一区二区不卡视频播放 | 精品久久青青草| 9精品久久久久| 婷婷影院入口| 欧美一品道| 人人妻人射| 久久久久久久久久久999| 极品国产内射| 日韩三级网址| 国产精品一区二区亚洲人成毛片| 熟女人妻av在线资源,黄色的资源| 精品国产乱码久久久影院| 亚洲av影音先锋| 久久综合久色欧美综合狠狠| 人妻中文字幕日韩电影| 土豪酒店各种姿势玩弄极品幼稚| 日韩一级成人毛片免费观看| 中文字幕精品专区搜索结果91| 韩国午夜理伦三级好看| 97人妻人人躁人人玩人人| 久久精视频美日韩在线视频| 九色 蝌蚪 熟女自 | 91真人天天在线| 人人干黄色| 成年男人的天堂| 婷婷超| 天天综合AV| 探花视频免费观看国产专区| 青娱乐导航AV| 欧美不卡五十路| 蜜臀亚洲中文| 欧美A片中文字幕| 亚洲综合性感在线| 中文字幕一区二区三区高清| 91在线/欧洲| 三级特黄60分钟播放| 天天内射| 啊v视频在线观看| 久男人久久| 色欲久久综合| 美女91| 久久人妻办公室视频| 亚洲国产成人精品女人久久久| 91国产精品在线看| 久久国产成人精品国产成人亚洲| 日韩精品人妻中文字幕有码午| 91在线免费精品视频| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 97操b| 很很干很很操| 久艾草在线精品视频在线观看| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 久久精品熟女亚洲AV麻豆软件| 怡红院怡春院| 国产日韩欧美亚洲精品95 | 淫骚熟女一区二区三区| 中文字幕精品一区二区精| 97操碰| 日韩天美| 免费人成在线观看网站品爱网| 蜜臀va69| 91天美传媒精品| 一级黄色性爱A级片| 欧洲人妻视频| 偷拍在线观看视频| 久久99精品视频| 91精品无码久久久久久久| 330dv亚洲成年视频网| WWW啪啪的com| 亚洲情色视频| 亚洲成人色情五月天丁香花| 九九久久99| 亚洲欧美成人网站AAA| 蜜桃久久精品一区二区三区| 中文字幕在线24| 人人操人人操人人人操| 欧美丝袜中文字幕07在线| 99RE在线视频精品,这里只有精品| 亚洲欧美国产成人综合不卡| 超碰97亚洲| yazhouzaixian| 美女露胸露屁股| 夜夜影视四色| 中文字幕奈奈美被公侵犯| 青青草依人大香蕉| 六九九九| 九九综合色| 国产欧美精选激情视频| а√天堂资源官网在线资源| 新91视频.cmp| 亚洲资源网| 在线视频一区二区传媒| 农村妇女一级二级三级视频| 亚洲av综合色区无码一| 欧美成人AⅤ大片在线观看| 亚洲熟女av中文字幕| 97天天插| 精品人妻一二三四区视频| 亚洲男人的天堂一区二区| 色婷婷av在线观看| 五月天大香蕉| 人妻熟女av国产网站| 激情接吻视频久久久久久| 在线观看不卡一区二区三区| 亚洲开心网| 久久免费少妇| 美女91在线| 色婷婷日韩精品一区二区三区| 蜜臀无码一区二区| 青青欧洲黑| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 91AV天美在线视频| 久久精品中文字幕观看| 精品人妻1区| 久久久精品电影| 中文AV制服乱伦| 黑人综合网| 欧美97爱| 白丝被操91| 操国产逼| 欧美性生活男人的天堂| 无码天天操| 国精精品无码一二三区水多多| 亚洲国产高清福利视频| 夜夜影视四色| 豆花视频操逼网址| 秋霞久久亚洲精品成人| 思思热在线cao| 国产中文字幕曰本毛片| 99久热| 日本三级韩国三级99| 丁香五月天婷婷姐| 天操老女人| 区自美91| 另类图片综合| 久久久精品中文字幕爱豆| 丰满人妻一区二区三区免费| 欧美综合网在线| 男女无套 免费网站| jk白丝没脱就开始啪啪| 久久‘黄片视频| 久热伊人| 麻豆精品天美| 欧美另类丝袜熟女| 国产高清自拍| 尤物黄色在线观看网站| 91碰碰碰| 99热精品国产| 少好三P| 日本一级特级毛片视频| 性爱Av免费| 99热亚洲| 亚洲男人的天堂AV| 色婷婷日韩精品一区二区三区| 日少妇视频| 亚洲国产奇米影视久久| 一区二区日韩欧美久久| 自拍欧美| 欧美人妖内射| 377p欧洲日本亚洲大胆| 久99| 伦在线97| 17c嫩草51久久91嫩草| 岛国AB视频| 国产性感骚丝袜在线| 九久久精品| 天天射天天操天天干天天吃2018| 亚洲国产日韩欧美熟妇在线| 亚州再线| 麻豆三极片| 97国产成人精品免费视频| 澳门成人网站久国产日韩| 欧日韩一二三f区| 91久久免费视频互動交流| 男人的天堂2019AV| 操死我了啊啊啊| 26uuu久久| 91neishe| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 嗯嗯啊在线视频| 天天躁狠狠躁av| 黄片qw| 亚洲 图片 综合91| 亚洲双插| 综合啪啪| 欧美亚洲清纯| 国产 无码 一区二区| 日韩av色图综合| 中文字幕99999| 九九香蕉网| 九九久精品| 久久久久久久久久8888| 亚洲综合伊人| 曰韩人妻中文字幕在线 | 亚洲电影91| 26UUU欧美激情一区二区| 亚洲男人的天堂V| 天天综合~91| 大香蕉伊人久久| 妇女乱色二区| 综合啪啪| 少妇天堂| 日本一区二区电影网站| 久久六六| 欧美中出1| 伊蕉97蜜桃97狠狠综合干| 人妻偷拍一区二区三区| 色九月综合| 影音先锋日本一区二区| 天天舔天天日天天射| 日日日日做夜夜夜夜无码| 亚洲男人的天堂在线看| 欧美日韩国产三级黄色| 色69大色97香蕉| 国产成人综合网| 久久岛国| 欧美色图成人网一区二区| 97视频在线播放| 欧美日日网| 人妻一二三区| 9997se| 久久久久国产精品片区无码直播| 超碰 国产熟女精品一区| 国产精品亚洲免费| 69国产对白刺激| 伊人成人情色综合| 日韩乱伦视频| 一区二区影视| 欧美激情片一区二区| 欧美一区二区三区日韩| 欧美性高潮在线| 96爱综合| 在线精品福利免费播放| 午夜毛片亚洲精品片国产久久久| 丰满少妇一区二区三区专区| 一二三四视频中文字幕在线看| 久久视频,这里只有精品| 高清无码国产亚洲| 欧美激情性久久久久久| 欧美高清在线| 怡红院怡春院| 天堂中文日本在线观看| 97久久久网站| 亚洲精品1区| 国模精品一区二区三区苹果色戒 | 色欲久久综合| 国产美女口爆吞精视频| 97chaopenrihan| 亚码激情| 亚洲天天做日日做天天谢日日| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 超碰精品日韩欧美国产| 国产风韵犹存熟妇三区| 欧美日韩免费专区在线| 男人的天堂一区三区| 国产精品久久久久久高清无码免费看| 91精品人妻五十路| 亚洲一二三精品久久网 | 久久久久78| 国产97视频免费观看| 性爱视频免费网址| 大逼色网站| 欧美在线中M| 精品v1区| 久久a久久| 欧美国产日韩高清在线| 欧美人妻精品一区二区| 女性喷水高潮在线观看| 黄久久| 老熟女中文字幕高清| 天堂av2019| 色色无码| 中文字幕 国产 精品| 3P乱轮视频| 日韩精品资源专区二区| 少妇的嫩逼图片| 麻豆色99999| 裸体1区| 亚码人妻| 欧美精品久久96人妻无码| 偷拍欧美激情| 人妻少妇一区二区| 精品少妇后入一区二区三区四区人妻巨乳 | 久久久久久久亚洲Av无码| 欧美18 在线观看| 天天澡天天爽日日AV| 亚洲日韩美女丝袜美腿人妻视频| 一二三卡欧美日韩人妻免费精品| 久久精品中文| 在线黄色污污网站| 美女淫穴| 香蕉免费一区二区三区不读 | 国产成人拍国产亚洲精品| 国产97亚洲| 99re免费| 一起草高清无码| 男插女青青影院| 国产肏逼网站| 操www| 精品中文字幕第一页| 亚洲一区二区三区婷婷| 97色亚洲| 少妇久久久久久| 成人性爱免费播放| 韩美日操逼| 久热香蕉精品在线视频| 艹少妇网站| 精品一区二区成人动漫| 激情丁香婷婷| 久久久艹艹艹| 欧美大香蕉97| 麻豆一区在线| 婷婷10月天青娱乐| 诱惑网综合| 人人干黄色| 青娱乐国产精品| av在线资源| http://qxhbdz.com| 亚洲性猛交| 久草久日| 电家庭影院午夜69久久夜色精品国产69乱| 91精品国产一区三一| 女人久久久| 国产探花日韩援交| 久久精品国产亚洲AV高级北京| 开心五月婷婷激情| 精品人妻二区三区| 激情久久日韩精品中文字幕麻豆| 久久熟女嫩草成人片免费| 欧美v日韩v亚洲v最新在线| 麻豆国产视频精品观看| 欧美十八禁在线看| 天天日老熟妇| 亚洲九九爱| 欧美亚洲综合高清在线| 激情综合二| 发朗少妇买婬全视频中文| 亚洲国产精品久久久男人的天堂| 情色五月天就去干| 天天躁日日躁狠狠狠躁| 国产精品久久久久久久AV大片 | 色在线69堂| 不卡二三区人妻少妇| 亚洲图片日本AⅤ欧美在线| 夜夜草网站| 人人搡人人肉久久精品| 97伦综合| 夜夜影视四色| 4141514逼喷水三级片| 97超碰伊人| 日日干天天干夜夜爽| 色色五月天婷婷| 日韩电影天堂视频一区二区| 国产老太乱伦一区| 韩国一级婬片A片AAAAA| 久久同城AV| V A在线| 成人欧美一区二区三区黑人一| 中出789在线视频| 日本一道在线播放高清| 欧美性爱伊人| 久久综合日韩亚洲欧美| 神马麻豆福利院 | 91美女色视频亚洲| 欧美超碰97| 男人的天堂网免费| 亚洲精品国产熟女久久久| 韩日性爱av| 综精品久久久aaaa| 国产强奸乱伦第1页| 国产成人无码网站在线视频| 亚洲伊人久久精品影院| A级国产欧美激情在线| 欧美人妻精品| 夜夜高潮夜夜爽夜夜爱爱一区| 秋霞曰韩R级| 东京热精品97综合网| 黄人人操人人操| 熟女人妻av在线资源,黄色的资源| 尤物视频新赏网鲜网色诱网| 青娱乐国产盛宴视频| 久久久专区| 最新av中文字幕高清| 久久天天躁日日躁狠狠躁 | 国产综合色精品在线观看| 天天日少妇逼AV| 老鸭窝在线视频播放| 日本岛国黄色网址| 久久精品国产97欧美精品亚洲| 亚洲图片偷拍视频区| 超碰精品人妻狠狠干| 国产成人bd在线观看| 九九九九97| 国产久久久久久久久一区二区| 亚洲青青草| 国产欧美亚洲精品a第2页| 日本黄色天堂| 99色在线| 蜜臀久久99精品久久久久久酒店 | 久久激情视频| Aa东京男人的天堂| 六月激情婷婷| 本道在线| 99色在线视频| 91视频女生| 蜜桃视频精品一区二区| 秋霞网无码| 天天日日本| 韩国成人精品久久久免费看| 激情人妻另类| 99无码| 国产精品美女| 97日视频| 国产精品自在线发布| 九九热国产| 欧州色图区| 黄片免费看的| 青草伊人久久| 欧美有码亚洲中文字幕一区二区三区四区| 18禁看网站一区| 国产精品3| 欧美一级色| 蜜乳成人AV| 98福利在线视频| 国产免费一区二区三区最新不卡 | 大香蕉国产中文自拍| 二男一女成人A片| 久久蜜桃一区二区| 天天干天天日天天射黄色大片| 国产精品欧美日韩久久| 大香蕉色欲AV| 天天日日舔舔| 99视频这有这里有精品| 亭亭在线资源| 熟妇熟女一区二三区| 亚洲97久久精品亚洲| 97在线观看免费视频| 国产久久日| 一色网男人的天堂| 亚洲国产欧美另类自拍| 欧美天天综合网| 9999亚洲精品| 精爱久久| 亚洲精品美女久久久久久久久| 日本操逼aaaaa| 欧美另类丝袜熟女| 中文字幕文字幕无码一区二区三区电影99| 综合网色| 操逼无码一区| 日韩三级伊人| 91精品久久久久| 国产原创精品| 成人看片网站| 久久婷婷综合国际产色怕| 亚洲精品97| 9久久久久久| 熟女一区二区三区| 少妇同性| 欧美亚洲日韩人妻在线观看| 男人的天堂一区三区| 亚洲人体视频在线观看| 综合欧美亚洲| 亚洲se电影| 啊啊啊啊啊啊啊啊啊在线观看| 国产亚洲人妻综合日韩 久久| 日韩午夜啪啪视频| 超碰97亚洲| 亚洲性天堂| 亚洲同性aV综合| 青青草久草AV| 日韩精品国模| 久久国产对白激情浪潮| 性色中出| 蜜桃久久综合视频| 污啪啪啪视频| 日本九九九九| 人妻中文在线| 亚洲精品aa久久伊人| ji熟女.com| 涩涩涩综合| 免费少妇一区二区| 国产操伦| 五十路六十路七十路熟婆| 国产精品直播在线观看直播| 亚洲一二三四区| 91综合中文字幕| 人妻无码一区二区三区久久99| 欧美综合 站| 蜜桃臀AV在线| 人妻美腿丝袜日韩| 亚洲精品国产拍免费91在线| 美女丝袜激情小说| 曰韩少妇无码| 嫩草91| 人人妻人人爽人人精品| 九九九国产精品| 在线欧美亚洲| 家庭乱伦麻豆| 欧差乱伦二三| 免费看国产曰批40分钟怎么下载| 人人操人人插人www| 郑州宾馆老熟女露脸啪啪| 午夜啪啪片| 精品超碰国产| 蜜色网色哟哟| 二对二中文字幕。| 亚洲人精品午夜不卡| 激情四射婷婷六月天| 中文字幕国产| 91性片| 午夜乱轮操逼视频免费看| 中文视频在线观看| 国产成人自拍视频视频| 色一色综合网| 欧美亚洲日韩人妻在线观看| 天堂资源欧美| 精品九九九九九九九九九| 亚洲一区二区中文字幕| 97综合国产| 国产亚洲中文不卡二区| aaa一级黄片| 狠狠久久亚洲欧美专区| 欧美亚洲日韩16色| 久久久久96| 国产精品人妻免费精品| 精品高清一区二区三区三州| 超碰人人草| 亚洲淫乱骚妇AV| 欧美日韩精品久久久久东北老熟妇| 欧美性爱一区二区| 囯戸精品高潮呻吟旡码| 久久久婷婷| 无码9区| 91无码人妻| 国产无码精品成人| 亚洲黄色a级片| 97久精品| 欧美激色| 美日韩男女操屄视频| 99热婷婷| 亚州色图狠狠干| 72av视频| 日韩美女啪啪一区| 95精品在线| 人乳av| 干我久操| caorenqi shipin| 欧美综合在线91| 亚洲熟女av中文字幕| 亚洲 在线| 久久久无码av精| 黄总AV色图| 麻豆精品.欧美精品.日韩精品.| 北约熟女超碰| 亚洲一区二区麻豆影院| 九九九国产精品| 久久久亚洲高清不打码| 男人的天堂亚洲| 青女偷拍网| 啪啪啪东京| 国产传媒日本欧美专区| 超碰地址久久| 国产 v乱码一区二| 中文字幕乱偷人妻久久艾草网| 老熟女综合| www.久久| 亚洲综合在线91| 黄页视频网站野外| 国产亚洲日本| 日韩啊V| 97天天摸天天碰| 久久少妇| 啪啪啪综合网| 992大香蕉| 久久精品国产亚洲AV成人直播| 人妻人妻天天碰| 亚洲AV无线| 日韩久久艹| 欧美亚洲第一页| 亚熟在线| 8x福利精品第一福利视频导航| 任我爽视频在线观看| 精品九区| 猛交交| 欧美日韩系列| 色五月婷婷久久| 综合五月天| 欧美一区二区亚洲天堂| 国产精品禁久久久精品| 国产大学生高潮在线播放| 夜夜青青无码影院| av凤凰久久久| 99在线精品观看视频中文| 欧美综合区| 人人妻人人澡人人爽久久av| www.91色| 蜜臀久久99精品久久久久久-DVD原版全| 婷婷久久五月| 91情色| 欧美久久久15P| 黑人精品XXX一区一二区| 国产精品suv一区| 亚洲一区二区久久久久| 五毛骚逼极品美女怕怕| 久久色情| 91N综合网| 天天透伊人| 操逼逼一区视频| 91精品国久久久久久无码| 久久久免费的精品| 91欧美色| 天天透伊人| 久操网无码在线| 91网站在线播放| 国产精品一二三区福利| 熟妇xxxxx性春色| 日韩不卡码| 日本三级中国三级99人妇网站| 神马久久久久| 青草香蕉网| 国产成人精品日本视频| 中国的操老妇女| 久久久爆乳翘臀一线天伦理视频| 99久久亚洲精品无码毛片潘甜甜| 久久久久久性爱视频| 约操熟妇| 亚洲在线欧美| 日韩 欧美 校园一区| 无码自拍SM| 国产精品黑人一区二区三区| 国产精品老熟女一区二区| 91精品人妻偷情| 欧美女同在线| 手机看片1024你懂的国产| 呦呦一区| 国内成人圈中文字幕无码视频| 人人操av| 国产三级多多影院2022国产AA一级毛片无码 | 欧美人人天天网| 91九色首页| 精品少妇人妻av久久免费| 97鸡把在线视频| 一区中文字幕二区日韩| 色五月丁香五月| 久久五月天婷婷丁香中文字幕| 欧美偷偷网| 特级大荫道BBwBBwBBW| 五月丁香啪啪网| 美女熟妇色| 人人妻人人玩人人澡人人爽| 激情五月综合网| 国产成人精品日本视频| 超清福利精品视频在线| 国产精品久久久午夜夜伦鲁鲁| 日本丝袜美腿人妻九九| 丁香五月成人| 99精品欧美一区二区三区桃色| 久久大| 天天操天天舔| 日韩精品作爱导航| 91+欧美| 午夜精品久久久久久久男人的天堂 | 欧美一品道| 99热精品青草在线| 亚州少妇| 99人人干| av天堂精品久久| 久久透逼视频| 国产精品福利资源在线尤物| 97超碰伊人| 在线播放中文字幕| 91老熟女逼| 97福利视频| 国语av最新自产拍在线观看| 中国AAAAAA黄色片| 600国产精品视频| 青青草无码视频| 久久婷婷亚洲欧| 91真人天天在线| 婷婷伊人一区| 中文一区二区婷婷视频| 精品国产乱码久久久久久久久1 | 蜜桃传媒视频第一区入口在线看| 久久精品人妻一区二区| 免费观看国产不卡av| 亚洲超碰AV| 成人福利视频网| 久操凹凸视频| 亚洲一区二区三区不卡国产欧美| 日韩欧美大片免费高清啪啪| 天天色综合影视网| 日曰骚久久精品| 中文字幕三四五区| 色九九久九九| 91丝袜视频在线观看| 啊啊啊啊好爽好舒服一区二区易域| 日韩欧美天堂| 久久久久久久久久久久色网| 91第一页| 美女久久久久久久久久久| 97在线免费观看视频| 国产91亚洲精品一区二区三区|