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

ARTICLE DETAIL

資訊詳情

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

T3 Stack 實(shí)戰(zhàn):t3code 全棧項(xiàng)目中的類型安全與工程實(shí)踐

T3 Stack 實(shí)戰(zhàn):t3code 全棧項(xiàng)目中的類型安全與工程實(shí)踐 t3code 這個(gè)代號(hào)算是我今年親手從零搭起來的一個(gè)全棧項(xiàng)目。說白了它不是一個(gè) Murmur 出來的新框架也不是什么花哨工具鏈而是一套以 TypeScript 類型安全為軸心的完整開發(fā)模板前端用 Next.js后端邏輯收進(jìn) tRPC 路由數(shù)據(jù)庫(kù)走 Prisma樣式用 Tailwind認(rèn)證交給 NextAuth。這一套組合在圈子里常被叫 T3 Stack而 t3code 就是我在這個(gè)技術(shù)選型下沉淀出來的項(xiàng)目骨架和踩坑實(shí)錄。這篇文章想把我在搭建過程中真正有價(jià)值的決策、踩過的坑、以及最后留下的工程實(shí)踐寫清楚給那些準(zhǔn)備拿起 T3 Stack 做全棧項(xiàng)目的人一個(gè)可以參考的真實(shí)樣本也聊聊為什么“類型安全”這三個(gè)字能省掉那么多破事。這個(gè)項(xiàng)目適合誰看如果你已經(jīng)在用 TypeScript 寫 React又對(duì) Next.js 的 API Routes 感到似懂非懂或者你想知道數(shù)據(jù)庫(kù)、API、前端類型到底能不能共用一份那這篇文章應(yīng)該能給你一個(gè)很具體的答案。1. 為什么 t3code 會(huì)把項(xiàng)目壓在 T3 Stack 上1.1 先理清“類型安全全?!钡降资×耸裁次蚁日f結(jié)論類型安全全棧不是一個(gè)錦上添花的特性它會(huì)直接改變你寫代碼的順序和溝通成本。傳統(tǒng)的前后端分離項(xiàng)目里前端要依賴后端開放的 REST 文檔或者一個(gè)手寫的類型聲明文件接口一變前端大部分情況是不知道的——等編譯報(bào)錯(cuò)已經(jīng)是在聯(lián)調(diào)時(shí)了。T3 Stack 的核心思路是把類型本身當(dāng)作前后端之間的接口協(xié)議數(shù)據(jù)庫(kù)字段類型由 Prisma Schema 定義tRPC 路由的輸入輸出類型由 TypeScript 自動(dòng)推導(dǎo)前端組件 import 一個(gè)被推導(dǎo)好的 hook直接就能拿到帶類型的返回值。我在 t3code 里第一次明顯感覺到這個(gè)優(yōu)勢(shì)是寫一個(gè)用戶列表頁面。后端有一個(gè)getAllUsers的 query返回結(jié)構(gòu)里帶有profile關(guān)聯(lián)表的數(shù)據(jù)。我在 Prisma 里給Profile模型加了個(gè)字段前端頁面代碼完全沒動(dòng)再看瀏覽器頁面上的字段已經(jīng)自動(dòng)被 TypeScript 識(shí)別到了。沒有聯(lián)調(diào)群沒有“后端接口改了前端記得跟上”這種需求因?yàn)閮烧弑緛砭驮谕粋€(gè)類型系統(tǒng)里。1.2 tRPC 和 API Routes 的取舍像函數(shù)調(diào)用一樣調(diào)后端有人會(huì)問Next.js 自帶 API Routes為什么還要再加一層 tRPC我的答案是API Routes 是 HTTP 層面的解決方案而 tRPC 是類型層面的解決方案。API Routes 要求你手動(dòng)管理請(qǐng)求路徑、校驗(yàn)參數(shù)、序列化響應(yīng)、處理錯(cuò)誤每個(gè)環(huán)節(jié)都是手寫的也因此每個(gè)環(huán)節(jié)都可能跟類型脫節(jié)。tRPC 則把這一層包裝成類型安全的函數(shù)調(diào)用你寫的是api.user.getAll.query()但它在瀏覽器環(huán)境會(huì)自動(dòng)通過 HTTP 請(qǐng)求把參數(shù)發(fā)到服務(wù)端路由再把返回值序列化回來全程類型都是推導(dǎo)的不需要你維護(hù)任何路由字符串。當(dāng)然這不是說 REST 就一無是處。如果你的項(xiàng)目有公共 API、有大量第三方調(diào)用REST 和 OpenAPI 可能更合適。但對(duì)于 t3code 這種前后端同倉(cāng)庫(kù)、同語言的內(nèi)部業(yè)務(wù)系統(tǒng)tRPC 的性價(jià)比非常高。它省掉的不只是寫接口文檔的時(shí)間更省掉了“前端猜后端字段含義”這種溝通摩擦。1.3 三個(gè)關(guān)鍵依賴的邊界Next.js 只是宿主tRPC 是骨Prisma 是丹田很多初學(xué)者會(huì)把這幾個(gè)概念混在一起我建議把它們拆開理解。Next.js 在這里只承擔(dān)框架宿主角色負(fù)責(zé)頁面渲染、路由處理和 Server Component 的調(diào)度。tRPC 是連接層它不負(fù)責(zé)渲染也不負(fù)責(zé)數(shù)據(jù)庫(kù)只負(fù)責(zé)“讓函數(shù)調(diào)用變?yōu)檫h(yuǎn)程調(diào)用”這件事。Prisma 才是數(shù)據(jù)世界真正的源頭你的模型字段、枚舉、關(guān)系都在這里定義。Tailwind 是純表現(xiàn)層它跟業(yè)務(wù)邏輯沒有耦合愛用不用。我在 t3code 的架構(gòu)設(shè)計(jì)里非??桃獾刈屵@三者保持單方向依賴Prisma Schema 是真理之源tRPC Router 消費(fèi) Prisma 的輸出Next.js 頁面消費(fèi) tRPC 的輸出。方向一旦反過來代碼就會(huì)開始亂。比如有人會(huì)把 tRPC 調(diào)用寫到 Prisma 的 seed 腳本里我看了就腦仁疼——那個(gè)腳本應(yīng)該直接用 Prisma Client沒必要經(jīng)過 tRPC 這層 HTTP 邏輯。2. 腳手架跑通之后目錄里真正值得警惕的東西2.1 create-t3-app 到底生成了什么先別急著刪用npm create t3-applatest t3code初始化項(xiàng)目非??鞄追昼娋湍芘芷饋?。但跑起來之后最容易犯的錯(cuò)是看多了網(wǎng)上那些“精簡(jiǎn)目錄”的教程手癢把默認(rèn)結(jié)構(gòu)改了。我建議你在項(xiàng)目初期至少保留這幾個(gè)文件src/server/db.tsPrisma Client 的單例封裝開發(fā)環(huán)境避免熱更新創(chuàng)建太多連接。src/server/api/trpc.tstRPC 的初始化文件和上下文類型定義幾乎所有路由都依賴它。src/trpc/server.ts/src/trpc/react.tsx服務(wù)端調(diào)用器和客戶端 React Hooks 的橋接層。這些文件不是說不能改而是你會(huì)頻繁用到它們不如先保持默認(rèn)等理解透了再優(yōu)化。我在 t3code 的前兩周就是這么干的只新增業(yè)務(wù)文件不重構(gòu)腳手架把精力放在熟悉結(jié)構(gòu)上。這里還要提一個(gè)細(xì)節(jié)默認(rèn)模板會(huì)生成app/api/trpc/[trpc]/route.ts這是 tRPC HTTP 網(wǎng)關(guān)在 Next.js App Router 下的標(biāo)準(zhǔn)入口。初次看這個(gè)文件的人可能會(huì)覺得它很“魔法”但展開看它其實(shí)就是把收到的 HTTP 請(qǐng)求交給fetchRequestHandler再傳一個(gè)createContext函數(shù)進(jìn)去而已。理解它之后你調(diào)試 tRPC 的報(bào)錯(cuò)會(huì)方便很多。2.2 App Router 還是 Pages Routert3code 的選擇與理由create-t3-app 在很長(zhǎng)一段時(shí)間里默認(rèn)使用 Next.js App Router我直接沿用沒有切回 Pages Router。原因不復(fù)雜App Router 的 Server Component 可以讓我在服務(wù)端直接調(diào)用 tRPC Procedure避免很多組件變成 Client Component頁面也更容易拿搜索引擎的分?jǐn)?shù)。但我也必須誠(chéng)實(shí)提醒App Router 的學(xué)習(xí)曲線明顯更陡如果你是第一次接觸建議先花半天把一個(gè) React Server Component 和 Client Component 的邊界理清楚再來用 tRPC。在 App Router 下t3code 的做法是頁面主體邏輯盡量放 Server Component只有需要交互的局部區(qū)域比如搜索框、表格操作按鈕、篩選器用use client。數(shù)據(jù)獲取統(tǒng)一走服務(wù)端調(diào)用 tRPC 的createCaller而不是在客戶端useQuery。這樣首屏 HTML 里已經(jīng)有數(shù)據(jù)瀏覽器端不需要先發(fā)一堆請(qǐng)求再渲染骨架屏體驗(yàn)好很多。2.3 補(bǔ)齊 tRPC 客戶端 Context否則瀏覽器里全是 404這里我要說一個(gè)特別容易踩、但又特別隱蔽的坑。如果你在非 Server Component 環(huán)境調(diào)用api.user.getAll.useQuery()而項(xiàng)目里沒有在根布局或者TRPCReactProvider里掛載 Context Provider瀏覽器控制臺(tái)只會(huì)給你一片 404。原因很簡(jiǎn)單tRPC 客戶端的 hooks 需要 Provider 才能拿到正確的 URL 和請(qǐng)求方法Provider 沒掛請(qǐng)求路徑不會(huì)自動(dòng)注冊(cè)到 Next.js 的 route handler 上。t3code 的寫法是在app/layout.tsx里用TRPCReactProvider包住整個(gè)頁面Provider 內(nèi)部再包一層headers()讀取服務(wù)端返回的 cookies確保服務(wù)端渲染和客戶端渲染兩邊拿到的請(qǐng)求頭一致。這個(gè)細(xì)節(jié)如果不做部分頁面在 SSR 下可能正常一旦客戶端導(dǎo)航就出問題Debug 起來非常費(fèi)勁因?yàn)閳?bào)錯(cuò)不一定指向 Provider。3. Prisma 從 SQLite 遷到 PostgreSQL 時(shí)我踩過的三個(gè)數(shù)據(jù)坑3.1 第一個(gè)坑SQLite 習(xí)慣寫進(jìn) schemaPostgres 直接給你顏色t3code 開發(fā)早期為了零配置我直接用 SQLite 當(dāng)數(shù)據(jù)庫(kù)。本地跑得很爽直到我決定把數(shù)據(jù)庫(kù)換成 PostgreSQL準(zhǔn)備上生產(chǎn)環(huán)境的時(shí)候才發(fā)現(xiàn) schema 里有好幾個(gè)字段是為 SQLite 量身定做的。最典型的是String default()這種寫法。SQLite 對(duì)空串處理很佛系但 PostgreSQL 里有些字段類型會(huì)在空串和空值之間產(chǎn)生語義沖突比如Decimal類型存儲(chǔ)空串會(huì)直接報(bào)錯(cuò)。另一個(gè)坑是枚舉類型SQLite 不原生支持enumPrisma 會(huì)退化成字符串檢查一換到 PostgreSQL模型定義就必須顯式聲明枚舉舊數(shù)據(jù)里如果有枚舉外的值遷移會(huì)失敗。我的建議是從第一天就用 PostgreSQL 或者 MySQL 來開發(fā)哪怕本地跑 Docker 也要用生產(chǎn)同款數(shù)據(jù)庫(kù)?,F(xiàn)在 Docker 起一個(gè) Postgres 只要一分鐘不要在“反正后面會(huì)換”上面省時(shí)間。3.2 第二個(gè)坑BigInt 與 Date 在 tRPC 傳輸層的序列化問題Prisma 里有幾個(gè)字段類型會(huì)在 JSON 序列化時(shí)產(chǎn)生意外。最典型的是BigInt。PostgreSQL 的某些計(jì)數(shù) ID 用了BigIntPrisma 返回的是一個(gè) JavaScript BigInt 對(duì)象可 JSON.stringify 根本不支持 BigInt默認(rèn)直接拋TypeError: Do not know how to serialize a BigInt。這個(gè)問題在沒有 tRPC 的時(shí)候也存在但因?yàn)?tRPC 會(huì)自動(dòng)做序列化報(bào)錯(cuò)信息會(huì)出現(xiàn)在運(yùn)行時(shí)更隱蔽。t3code 的處理方式是給這些字段定義明確的數(shù)據(jù)傳輸對(duì)象DTO在 tRPC Router 的返回處就把BigInt轉(zhuǎn)成字符串或者 Number。另外一個(gè)常見問題是 Date 對(duì)象Prisma 返回的 Date 在 tRPC 里會(huì)變成 ISO 字符串前端做時(shí)間格式化的時(shí)候如果直接new Date(value)還能用但如果拿它做value instanceof Date的判斷就會(huì)出問題。所以我的原則是跨 tRPC 邊界的日期統(tǒng)一用字符串傳遞顯示格式統(tǒng)一在展示層處理絕不把 Date 對(duì)象直接往 client 丟。3.3 第三個(gè)坑connection pool 和事務(wù)隔離級(jí)別少一次壓測(cè)都不知道本地 SQLite 是一次連接一個(gè)文件幾乎沒有并發(fā)問題。但 PostgreSQL 在 Serverless 環(huán)境下的連接數(shù)是非常稀缺的資源尤其是部署到 Vercel 或 Netlify 這類無服務(wù)器平臺(tái)時(shí)Prisma Client 如果不做連接池管理每個(gè) Lambda 實(shí)例可能都會(huì)去搶數(shù)據(jù)庫(kù)連接稍微有點(diǎn)流量連接數(shù)就爆了。t3code 后面部署到一臺(tái)小云主機(jī)上用常駐 Node 進(jìn)程跑遇到的情況是Prisma 默認(rèn)的事務(wù)隔離級(jí)別在并發(fā)寫多的時(shí)候會(huì)產(chǎn)生大量重試異??雌饋硐袷恰芭及l(fā)報(bào)錯(cuò)”但壓測(cè)一上就原形畢露。我建議你在寫涉及多表更新的 mutation 時(shí)提前想清楚這個(gè)事務(wù)的隔離級(jí)別并且使用 Prisma 的連接池配置比如?connection_limit5pool_timeout2這類參數(shù)。平時(shí)看起來無關(guān)緊要到了并發(fā)場(chǎng)景就是能不能扛住壓測(cè)的分水嶺。4. tRPC 路由不是簡(jiǎn)單拆文件中間件、上下文與錯(cuò)誤碼設(shè)計(jì)4.1 從 createTRPCRouter 到隱式依賴先說說 tRPC 路由的組織方式。很多人第一次接觸 tRPC會(huì)以為它就是把 API Routes 換個(gè)寫法路由文件拆得多了自然就有結(jié)構(gòu)。但實(shí)際上 tRPC 有一個(gè)更重要的隱式依賴路由會(huì)攜帶一個(gè)共享的 Context。這個(gè) Context 是你每次請(qǐng)求的“環(huán)境快照”里面可以放數(shù)據(jù)庫(kù)實(shí)例、當(dāng)前登錄用戶、請(qǐng)求頭信息等。所有 Procedure 都能訪問這份 Context所以路由設(shè)計(jì)得好不好很大程度取決于 Context 設(shè)計(jì)得好不好。t3code 的 Context 里我放了三樣?xùn)|西Prisma Client 實(shí)例、session對(duì)象可能為 null、以及一個(gè)表示“當(dāng)前請(qǐng)求是否來自客戶端”的isClient布爾值。中間件再根據(jù) Context 里的 session 狀態(tài)決定放行還是拒絕。如果想把 Context 設(shè)計(jì)好一個(gè)習(xí)慣是永遠(yuǎn)不要在生產(chǎn)路由里直接讀文件或者請(qǐng)求體所有依賴都通過 Context 注入后續(xù)測(cè)試會(huì)輕松很多。4.2 一個(gè)全局 middleware 能省掉多少 if這里的核心是避免在每一個(gè) mutation 里寫一大段“如果是管理員就怎么樣”的邏輯。t3code 里我套了兩層中間件第一層是全局的只做基本日志和耗時(shí)記錄第二層是“需要登錄”的中間件掛在所有需要身份校驗(yàn)的路由組上。這個(gè)中間件的寫法非常直白const protectedProcedure tRPC.procedure.use(async ({ ctx, next }) { if (!ctx.session?.user) { throw new TRPCError({ code: UNAUTHORIZED, message: 登錄后才能執(zhí)行這個(gè)操作, }); } return next({ ctx: { ...ctx, user: ctx.session.user, }, }); });之后任何需要登錄的接口都直接用protectedProcedure不需要在業(yè)務(wù)代碼里再判斷session。如果你有十幾個(gè)查詢都要做登錄校驗(yàn)這一個(gè)中間件就能刪掉十幾遍重復(fù)邏輯。更關(guān)鍵的是后面加權(quán)限系統(tǒng)也只需要在中間件里多套一層業(yè)務(wù)代碼一行都不用改。4.3 錯(cuò)誤碼與錯(cuò)誤信息的結(jié)構(gòu)約定tRPC 自帶的錯(cuò)誤碼體系已經(jīng)覆蓋了常見情況比如BAD_REQUEST、UNAUTHORIZED、FORBIDDEN、NOT_FOUND、INTERNAL_SERVER_ERROR。但這里有個(gè)容易忽略的點(diǎn)默認(rèn)的message是字面量英文而前端用戶根本看不到也不應(yīng)該看到。我的做法是在前端統(tǒng)一封裝一個(gè)errorMapper函數(shù)把 tRPC 的 error shape 映射成用戶可讀的中文文案同時(shí)把code傳給日志系統(tǒng)。另外不要把業(yè)務(wù)錯(cuò)誤全拋成INTERNAL_SERVER_ERROR否則你查日志會(huì)瘋掉。比如用戶傳了一個(gè)不存在的 ID就應(yīng)該拋NOT_FOUND權(quán)限不夠就拋FORBIDDEN。我見過很多半路出家的項(xiàng)目不管什么錯(cuò)誤都是BAD_REQUEST排查起來完全靠猜。錯(cuò)誤碼的語義化是工程成熟度非常顯性的信號(hào)。5. NextAuth 接入 tRPC 受保護(hù)路由的完整鏈路5.1 為什么在 App Router 下不能直接用舊版 session 寫法NextAuth 在 Pages Router 時(shí)代最常用的拿 session 方式是getSession()在服務(wù)端getServerSideProps里每次請(qǐng)求調(diào)用一次。但在 App Router 下推薦的做法是getServerSession()配合authOptions從請(qǐng)求頭里恢復(fù) session。t3code 一開始沒注意這個(gè)區(qū)別我照舊用getSession()在 Server Component 里取數(shù)據(jù)某天突然發(fā)現(xiàn)部分頁面在刷新時(shí)會(huì)拿到 null而客戶端導(dǎo)航時(shí)又是正常的。最后定位下來是因?yàn)間etSession()依賴的請(qǐng)求上下文在 App Router 的 Server Component 里不一定能拿到完整的 cookies 和 headers導(dǎo)致 session 讀取不穩(wěn)定。換成getServerSession后這個(gè)問題就消失了。如果你用 NextAuth v5現(xiàn)在是 Auth.js那一套 API 又會(huì)變所以我的建議是不要憑記憶寫每次都要確認(rèn)當(dāng)前版本對(duì)應(yīng)的官方示例這種基礎(chǔ)鏈路不值得省那兩分鐘。5.2 Auth.ts 與 tRPC context 的橋接t3code 里最關(guān)鍵的橋接文件是把 tRPC 的 Context 和 NextAuth 的 Session 連起來?;咀龇ㄊ窃赾reateContext里并行調(diào)用getServerSession把返回的 session 塞給 tRPC。這里有個(gè)實(shí)操細(xì)節(jié)第一次請(qǐng)求時(shí)Prisma Client、session 這些對(duì)象都會(huì)被初始化如果你的選擇器頻繁創(chuàng)建 PrismaClient熱更新階段會(huì)有大量連接殘留所以一定記得用全局單例模式。而生成了 session 之后要記得把 session 放到 Context 里而不是每次在路由里重新getServerSession否則你的 query 函數(shù)會(huì)變得很啰嗦而且沒法統(tǒng)一做緩存。5.3 Credentials Provider 的 JWT 坑t3code 早期為了簡(jiǎn)單用 NextAuth 的 Credentials Provider 實(shí)現(xiàn)郵箱密碼登錄。這個(gè) Provider 默認(rèn)不會(huì)把用戶 ID 寫進(jìn) session而是把整個(gè)登錄請(qǐng)求交給 JWT 策略。這里有個(gè)坑如果你在signIn回調(diào)里沒有做足夠校驗(yàn)或者jwt回調(diào)里沒有把 userId 賦到 token 上前端拿到 session 時(shí)沒有 user.id然后 tRPC 中間件就會(huì)把明明已經(jīng)登錄的人當(dāng)成游客。正確做法是在jwt回調(diào)里手動(dòng)寫入callbacks: { jwt({ token, user }) { if (user) { token.userId user.id; } return token; }, session({ session, token }) { if (session.user) { session.user.id token.userId as string; } return session; }, }這個(gè)看著不復(fù)雜但網(wǎng)上能搜到的案例大多只寫 GitHub 登錄沒有注意 Credentials Provider 的特殊性。如果你用第三方 OAuth 登錄可能不會(huì)觸發(fā)這個(gè)場(chǎng)景但一旦切到賬密登錄就非常容易卡在這里。6. 部署到生產(chǎn)環(huán)境后類型安全救不了你的那些時(shí)刻6.1 Vercel Serverless 環(huán)境下的 Prisma 連接池坦白說t3code 部署到 Vercel 的第一版是在流量稍大時(shí)直接崩掉的。原因跟前面說的數(shù)據(jù)庫(kù)連接池高度相關(guān)Vercel 的 Lambda 是短生命周期進(jìn)程每個(gè)實(shí)例啟動(dòng)時(shí)都會(huì)初始化 Prisma Client如果數(shù)據(jù)庫(kù)連接池的上限配置得太小一有流量波動(dòng)Prisma 就只能排隊(duì)等待。而排隊(duì)時(shí)間一旦超過 Lambda 超時(shí)閾值用戶就會(huì)看到 504。我的解決方式其實(shí)很“土”在云廠商的數(shù)據(jù)庫(kù)參數(shù)里提高了最大連接數(shù)同時(shí)在 Prisma 的連接串上顯式設(shè)置了connection_limit和pool_timeout讓連接等待有上限。如果你用的是 Prisma 官方加速服務(wù)那又是另一套配置??傊涀∫稽c(diǎn)本地跑得好不代表生產(chǎn)不會(huì)死連接池這個(gè)東西一定要在部署前想清楚。6.2 WebSocket 適配器在無狀態(tài)環(huán)境里的噩夢(mèng)如果想做實(shí)時(shí)更新很多人第一反應(yīng)是上 tRPC subscription。但請(qǐng)注意tRPC subscription 默認(rèn)依賴 WebSocket而 Vercel 這類 Serverless 平臺(tái)對(duì) WebSocket 的支持非常有限如果你部署到邊緣函數(shù)WebSocket 長(zhǎng)連接更是直接不可用。t3code 后來放棄在 Vercel 上做實(shí)時(shí)訂閱改到了常駐 Node 進(jìn)程的服務(wù)器上WebSocket 才穩(wěn)定下來。如果你一定要在 Serverless 環(huán)境用 subscription建議了解trpc/server的subscription適配器和平臺(tái)限制。很多項(xiàng)目的實(shí)時(shí)功能用輪詢就足夠了不一定非要長(zhǎng)連接。千萬不要因?yàn)椤皩?shí)時(shí)”兩個(gè)字就把架構(gòu)搞得復(fù)雜輪詢 短緩存往往在 90% 的場(chǎng)景里都?jí)蛴谩?.3 環(huán)境變量與多環(huán)境配置zod 校驗(yàn)寫在最前面環(huán)境變量是部署出錯(cuò)的高發(fā)區(qū)。t3code 的做法是用一個(gè) zod schema 在啟動(dòng)時(shí)校驗(yàn)所有關(guān)鍵環(huán)境變量缺哪個(gè)直接給你一個(gè)清晰的中文報(bào)錯(cuò)而不是等你運(yùn)行到某個(gè)接口才炸。比如DATABASE_URL、NEXTAUTH_SECRET、S3_BUCKET這些變量在 config 文件里統(tǒng)一讀取并校驗(yàn)。這樣做的另一個(gè)好處是如果把環(huán)境變量集中到一個(gè) TypeScript 文件IDE 提示會(huì)非常舒服而且新同事上手時(shí)看到這個(gè)文件就大概知道項(xiàng)目依賴哪些外部資源。這也是我從很多生產(chǎn)事故里學(xué)到的教訓(xùn)說句實(shí)話類型安全能保證代碼內(nèi)部不出錯(cuò)但保證不了你部署環(huán)境的外部配置不出錯(cuò)多一道啟動(dòng)時(shí)校驗(yàn)比什么都強(qiáng)。7. t3code 下一步實(shí)時(shí)訂閱、文件上傳、可觀測(cè)性7.1 用 tRPC subscription 替換定時(shí)輪詢t3code 現(xiàn)在的消息列表已經(jīng)改成真實(shí)時(shí)更新了因?yàn)榉?wù)端不再受限于無狀態(tài)環(huán)境。tRPC subscription 的寫法跟 query 非常接近核心還是在 router 里注冊(cè)subscription然后通過發(fā)布訂閱源把更新推給客戶端。這里有一個(gè)值得注意的設(shè)計(jì)不要在前端直接調(diào)用 subscription 的發(fā)布函數(shù)所有發(fā)布動(dòng)作都應(yīng)該由服務(wù)端業(yè)務(wù)觸發(fā)客戶端只能監(jiān)聽。我在實(shí)際使用中的體會(huì)是tRPC subscription 的代碼量比 WebSocket 原生實(shí)現(xiàn)少得多可讀性也好適合中小型項(xiàng)目。但它對(duì)連接狀態(tài)的恢復(fù)處理不如成熟的消息隊(duì)列所以 websocket 斷線重連時(shí)的消息補(bǔ)償還得自己在業(yè)務(wù)層處理。這部分如果做得不好用戶可能錯(cuò)過重要通知。7.2 文件上傳不留服務(wù)器直接走后端簽名 URL很多初學(xué)者會(huì)把文件上傳寫成POST /api/upload然后把文件寫進(jìn)服務(wù)器磁盤。這在本地開發(fā)沒事上了生產(chǎn)要么磁盤不夠要么負(fù)載均衡多個(gè)實(shí)例之間文件不同步。t3code 的做法是走 Object Storage比如 S3 兼容存儲(chǔ)上傳邏輯用預(yù)簽名 URL 實(shí)現(xiàn)前端先調(diào)用 tRPC 的getUploadUrlmutation傳入文件名和類型。后端返回一個(gè)短時(shí)有效的上傳 URL。前端直接用 PUT 或 POST 把文件流推到存儲(chǔ)服務(wù)不走應(yīng)用服務(wù)器。這個(gè)方案既減少服務(wù)器帶寬壓力又能避免接口被惡意塞大文件。我之前踩過一個(gè)坑是沒有限制上傳大小結(jié)果被一個(gè)同事傳了個(gè) 2GB 的視頻桶直接吃到告警。后來我加上了文件大小和后綴名校驗(yàn)總算沒再出事。7.3 加一層可觀測(cè)性把每次 query 的耗時(shí)暴露出來最后我想聊一個(gè)沒那么炫酷但非常重要的部分可觀測(cè)性。t3code 在中間件里給每個(gè) tRPC procedure 記錄了一條日志包含路徑、耗時(shí)、狀態(tài)碼、用戶 ID。這樣一旦線上有問題我可以從日志里很快定位到具體是哪個(gè)查詢慢而不是等到用戶反饋。具體實(shí)現(xiàn)也很簡(jiǎn)單就是給 tRPC 加一個(gè)onError處理器和一個(gè)耗時(shí)中間件。日志不一定要上分布式鏈路追蹤剛開始用控制臺(tái)輸出加一個(gè)結(jié)構(gòu)化日志文件就夠用。等哪天流量大了再引入 OpenTelemetry 也不遲。這個(gè)過程中最有價(jià)值的不是某個(gè)工具而是“把每一次請(qǐng)求都當(dāng)成可觀測(cè)事件”的工程習(xí)慣。t3code 這套搭建過程里我印象最深的反而不是某個(gè)具體 API而是類型安全帶來的正反饋循環(huán)數(shù)據(jù)庫(kù)結(jié)構(gòu)一變類型跟著變編譯就報(bào)錯(cuò)修復(fù)的速度遠(yuǎn)快于肉眼排查接口文檔。但也正因?yàn)樗验_發(fā)體驗(yàn)拉得很高部署和運(yùn)維階段的坑反而容易被忽略。如果你打算用 T3 Stack 做自己的項(xiàng)目我建議不要只盯著框架的花哨功能先把 Context、中間件、錯(cuò)誤碼、連接池這些基建打扎實(shí)很多線上問題是可以提前避免的。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
嫩草美女久久| 欧亚不卡| 91午夜无码| 999九九精品| 亚洲码专区| 97超碰久久| 台湾大香蕉99热| 伊人久久大香大香线蕉中文| 国产中文字幕曰本毛片| 欧美综合另类| 色五月激情AV在线| 在线啊啊啊啊| 女人天堂av在线播放| 欧美制服网站美腿丝袜| 日本一级二级三级网站| 另类小说综合网| 伊人久久综合影院| {男男暴菊gay无套网站| 蜜臀中文字幕| 欧洲小说色图视频另类| 午夜福利免费福利视频| 国产精品白领在线观看| 国产诱惑| 日本新免费二区三区| 精品区9| 99精品视频在线观看免费| 亚洲另类天堂| 欧亚无码视频| 女沟厕偷窥piss小便| 国产精品久久久久久夜夜夜夜| 久久熟女人| 91精品丝袜久久久久久| 超碰人人干| 小日子操bb在线看| 成人性爱视频在线看| 中文字幕在线观看网址| 久久久偷拍| 67914在线兔费成人视频| 色偷偷色偷偷欧美日韩| 啊啊啊好舒服好爽啊啊啊视频| 9色在线| yellow网站免费观看日韩高清无码| 一个人免费视频观看在线WWW| 农村少妇久久久久久久| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 五月天丁香网| 日操粉逼逼| 欧美亚洲综合色| 久久九九国产精品| 视频国产精品未满十八禁止在线观看| 欧美成人一级麻豆| 日日爱99| 精品人妻一二三| 精品少妇一区二区三区| 999国产精品999久久久久久| 舔人妻中文免费视频| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 手机看片1025| 超碰成人最新最好看| 日韩美女操b| 粉嫩av在线一区二区| 秋霞影音一区二区三区| 国产精品久久久久久久电影渣男| 99999国产精品| 综合网色| 久久综合18p| 亚洲nv男人的天堂网| 天美av在线观看| 91九久| 91伊人大香蕉| 91爱看| 黄色二级片网站| 欧美伦乱爱| 色操逼网| 97色婷| 美女黄色一级A视频| 口爆综合网| 操我啊啊啊啊啊| 人妻 制服 日韩 中文 在线| 亚州精品人妻一二三区| 眼镜人妻101.com| 日本性爱不卡视频| 欧美在线官网| 大香蕉伊利av| 日韩一级二级在线| 青草视频人妻在线观看| 国产午夜精品一区二区三区牛牛| 亚洲网站一区二区在线| www.91色综合| 天堂亚洲欧美| av无线看| 日韩中文字幕熟妇人妻| 蜜桃臀久久| 97久久久久| 性暴力欧美猛交在线直播| 激情小说成人日本无码一| 久久无码电影| 97久久精品亚洲| 国产精品熟女九九九| 男人的天堂com| av天堂精品久久| 丁香五月社区| 精品无码一区二区人妻久久蜜桃| AV麻豆免费一区| 一区二区三区激情在线观看| 蜜乳成人AV| 亚洲第2页| 亚州色交| 日夜伊人网| 天天操天天干一区二区| 少妇500双飞99| 日韩人妻丝袜中文字幕| 日本肉体xxxx裸交| 久操B网| 国模久久在线| 韩国手机不卡无码三级视频| 丝袜综合色图| 加勒比海色香蕉婷婷| 秋霞视频一区二区| 久久国产精品91| 一本一道久久综合久久| 思思热国产在线视频| 一区二区三区精品黑丝白丝酒店对鸡| 青青草无码视频| 亚洲性爱成人| 韩国轻伦国内自拍一区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 一本色道无码DVD中文字幕| 99ri视频| 精品熟妇视频一区二区| 中文字幕精品日韩中文字幕| 亚热日本熟女| 日韩在线一区高清在线| 欧美一级专区免费大片 | 欧美视频激情久久久久久| 澳门色噜噜色噜噜色噜噜色噜噜色噜噜| 人人摸.人人色| 久久视网78| 亚洲97成人在线观看| 97人人干人人操| 91日日夜夜| 国产18精品亚洲精品| 精品久久九| 国产亚洲中文不卡二区| 欧美亚州综合网图片| 全球成人中文在线| 午夜男人的天堂| 色综合尤物| 欧美日韩不卡传媒| 99色悠悠| 国产美女口爆吞精视频| 试看福利| 91超碰人人操| 97精品视频| 日韩/97| 操B在线观看| 超碰69| 日韩不卡a级视频专区| 日本精品久久久久久久| 久久激情亚洲精品无码?V| 亚洲一区制服诱惑| 91九色精品熟女内射| 91久| 欧美一区二区成人一卡| 成人26uuu| 精品久久久久成人码免| 婷婷五月色| 免费精品无码一级毛片牛牛影视| 在线观看午夜婷婷久久久久清性观看| 成人av免费观看| 久久69| 91亚州欧美| 欧美刺激色黄片免费看| 欧美色亚洲| 91香蕉国产尤物视频| 精品无码一区二区| 亚洲精品第一| 色在线视频导航| 97超碰资源网| 九九伊人网| 欧美,日韩,亚洲视频| 精品欧美老熟女一二区| 久久久久成人网| 亚洲中文电影| 中日韩久久人妻一区二区| 99久久久无码精品国产人| 不卡六六在线91| 大香蕉综合| 再深点灬舒服灬太大了好硬好爽| 极品欧美一区二区三区| 91操熟女视频| SUV一区二区在线看| 婷婷天堂站| 99国产在线 精品 视频| 97干在线| 香蕉99秘 一区精品蜜桃臀| 久草色悠悠在线视频| 67194国产| 乱伦图av| 国产精品区在线12p| 亚洲深夜福利| 久操av在线| 精品精品精品| 狠狠色综合网| 日韩一级成人毛片免费观看 | 亚洲综合网电影91| 久草电影网| 国产乱人妻精品入口| 综合激情五月天| 老熟妇一区二区三区…| 伊人黄色片| 亚洲中文字幕熟女| 免费试看60秒| AV中文字幕三四五| 夜夜夜爽www精品视频| 久久综合久色欧美综合狠狠| 国产乱不卡| 伊人久久亚洲色欲综合网站| 嗯~啊~快点 死我视频免费看网站| 亚州高清色综合| 青青草五月天| 夜夜嗨一区二区三区三州加勒比| 精品人妻一区二区免费看| 大香蕉中文网| 欧美激情性久久久久久| 久操凹凸视频| 色婷婷五月综合| 亚洲另类综合欧美| 国产农村妇女精品一| 97资源欧美| 视频在线中文字幕| 日本大香蕉综合网红本杳社区| 97鸡把在线视频| 无码高清少妇久久| 欧美人妻精品一区二区| 五月丁香| 啊啊啊久久久视频| 天天综合网91| 日本视频一区二区三区| 狠狠干综合| xxx亚洲午夜天堂| 欧亚第一综合网| 天天综合网~91综合网| 亚洲成人免费电影| 国产精品制服丝袜中文字幕日韩一区二区三区| 91N综合网在线| 超碰九7| 一级岛国大片| 日韩啪啪啪啪啪| 欧美 综合 亚洲| 亚洲欲色| 伊人激情五月天一区二区| 亚欧精品久久久久久久久久久| 精爱久久| 日逼97| 亚洲免费成人在线高清无码视频| 日韩精品.久久精品.AV女优.天美传媒| 亚洲色图国产另类| 国产精品扒开腿做爽爽爽视频| 黄色激情电影在线观看| 日韩人妻资源网| 精人妻无码一区二区三区伊人直播| 97免费在线观看| 手机在线视频国内精品| 久久久久久久久久久久久9999| a片亚洲一本通视频| 蜜桃久久一区二区| 大地资源在线观看中文第二页| 亚洲伊人久久精品狠狠在线| 99国产女人| 一区二区影院| 亚洲视频,小说| 伦理第一页| 午夜精品探花| 天天激色| 秋霞免费AV| 热久久国产精品视频大陆精品| 婷婷五月天激情小说| 天天日天天操VV| 绯色一区二区三区不卡少妇| 爱爱动态120秒| 中国少妇啪啪视频| 五月天社区| 超碰碰小说97| 91精品无码人妻系列| 日逼五月天| AV麻豆免费一区| 超碰97资源大奶| 久久91| 97天天爽| 精品日韩人妻视频| 欧美午夜色妇色鬼| 国产一区二区三区视频在线看| 超碰97资源大奶| 放黄片放3级黄片没穿衣服| 啊啊啊操一区| 精品人成视频在线观看| 吉田爱美AV在线| 婷婷av在线中文字幕| 99re不伦| 色色色欧美| 九九九九97| 影音先锋乱| 人伦四五区| 九九在线精品| 天天看天天日天天操| 日韩亚洲美州欧洲综三区一品在线| 狠狠爱夜夜| 久久香蕉影院| 12一15性XXXX粉嫩国产| 亚欧美综合网。| 青青操狠狠撩| 九九九网站| 久久久久久亚洲精品中文字幕人妻| 日夜伊人网| 午夜精品久久久| 91在线美女| 无码137片内射在线影院| 久久这里精品国产99丫e6| 测评在线观看AV| 区二区亚洲婷| 10000部十八禁看电影| 强奸乱伦大香蕉| 亚洲无限观看| 99热最新| 收看日本人日bb| 淫乱图区 | 婷婷伊人綜合中文字幕小说| 日韩精品在线视频,日韩精品……| 精品久久久久瑟瑟| 国产AV无码AV| 日韩成人高清一区二区| 偷窥自拍A片| 深夜国产一区二区三区在线看| 中文字幕十五区| 一级特级aaaa毛片免费观看 | 欧美性性性| 欧美在线色图| 2024人人操人人摸| 国产在线激情视频| 色婷婷国产精品一区在线观看| 人妻爽爽啪视频| 久久久中文| 日本操逼aaaaa| 综合亚洲网| 精久久久91| 大香蕉啪啪网| 五月天丁香婷婷综合网站| 久夜视频| 久久大香蕉97| 男人的天堂在线| 欧美精品另类人妖xxxx| 熟女被操视频网址| 双插性欧美一二三区| 性爱1区| 草草草视频在线免费看| 国产精品丝袜在线| 欧美色图小说综合| 亚洲和欧美裸体美女双飞视频| 丁香五月色| 国产51色综合久久免费| 日韩无码视频黄色| 国产兽交视频在线播放| 久久人妻| 国产精品第一页国产大屁股视频免费区 | 一区二区视频在线播放| 色y情视频免费看| 97亚洲精品| 综合五月天| 亚码人妻| 黄资源| 97色论| 超碰国产情侣自拍网| 亚洲操操| 97AV爱| 男人的天堂2018东京热啪啪啪| 日韩激情中文字幕有码| 欧美性爱中文字幕无线码| 国产第12页| 黄色免费一级在线毛片| 欧美日韩97| 五月天久久人妻| 国产又大又粗又长视频| 亚洲国产中文字幕| 后入人妻无码| 92一区二区| 69一区二区| 偷拍 亚洲 欧美| 东京热毛片177b2viP| 凌辱美少妇久久aV| 男女做爰猛烈动高潮A片免费应用| 亚洲在线| 看免费的黄片| 人人透人人操| 狼天天狼天天大香蕉| oumeisetu综合| 久久久9视频| 91在线限制级| 国产精品久久久久久久久久二区三区| 在免费jIzzjIzz在线视频| 欧美不卡二区| 婷婷五月天色| 日本不卡码黄色| av午夜玫瑰| 九九九九九九视频| 亚洲资源吧| 99re99| 色吧5亚洲| 成人无码电影在线观看网| 国产日韩欧美亚洲精品95| 狠狠色狠狠色狠狠五月| 清柠毛片| 成人在线视频一区| 日韩日韩日韩-国产乱码精品一区二区| 欧美的精品的视频| 欧美人与动性人交a| 精品中文字幕第一页| 国语av最新自产拍在线观看| 欧美99热| 国产成人主播| 亚洲高清欧美总合| 国产精品日韩在线一区| 综合激情婷婷| 9久精品视频在线观看| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 久久透逼视频| 亚洲精品美女久久久久久久久| 激情五月综合网| 99热aaa| 丝袜视频网国产90| 精品无码不卡视频| A V少妇特黄三级| 亚洲大胆人体av| 91性网| 国产女人极品高潮毛片| 久久久久密| 婷婷五月天色网| 欧美偷拍区| 在线观看国产黄色| 风月影院男女十八禁| 亚州综合在线| 日韩电影天堂视频二区三区| 91人妻PORNY九色大屁股| 国产呦精品系列在线观看| 男人的天堂在线| 五月丁香久久| 国产无马av| 欧美人人曰人人操人人射射| 亚洲色人阁| 久久大精品乱码视频人妻熟女| 婷婷啪啪| 91精品无码人妻系列| a片在线播放| 婷婷丁香人妻 | 久久久久久久久久久久黄色 | 国产美女口爆吞精视频| 撸无码不卡免费视频| 黑丝日韩av丝袜av| 欧美黄页在线| 女人高潮大叫一级毛片| 国产亚洲精品农村妇女 | 91青青| 欧美亚洲厕所精品偷拍91| 成人综合网 欧美| 97超碰色屌| 99操| 成人国产精品三级A片| 夜夜操美女| 91骚熟女| 最新AV在线| 中文无线日韩一区| 中文字幕人妻色偷偷久久皮 | 99热超碰| 日本福利二区视频| 国产三级日产三级韩国三级 | 人妻丝袜日本| 这里都是精品| 密臀在线一区尤物| 亚洲成人综合在线| 亚洲最大网站av| 国产精品干干干| 性爱Av免费| 国产性爱在线视频一区二区| 波多野42部激情无码喷潮| 91色狼| 我要色综合网| 人妻二区| 免费一级黄色录像影片| 综合免费无码中文| 国产福利av精彩对白| 国产区性爱在线视频秋霞豆| 亚洲精品第一| 九九久久99| 色色五月天激情| 99ri视频| 日本天堂网| 9999伦理视频| 学生妹天天看| 日韩精品人妻中文字幕不卡乱码| 天堂亚洲精品| 嗯嗯啊啊好爽| www.久久制服糖| 综合五月婷婷亚洲一区| 91爆操视频| 久久久精品国产亚洲AV无码| 五月天婷婷综合网| 亚洲射综合网| 精人妻无码一区二区三区伊人直播 | 男人成人黄色视频在线观看免费下载| 日本久久999| 四虎影视永久在线观看精品免费网站| 久久久极品| 91综合在线| 午夜福利1区2区3区| 成人a大片在线观看| 日欧操屄视频| 黑丝少妇麻豆| 久久是精品| 日韩97在线| 高清在线不卡一区二区 视频| 岛国毛片手机在线观看| 色婷婷丁香五月| 老师充足的奶水小说| 九九av| 日韩91网站| 四虎国产精品永久入口| 国产亚洲国产超碰| 嗯~啊~快点 死我视频| 9精品久久| 91 综合网| 级做a爱无码性色永久免费| 屁屁影院一区二区三区国产| 91爽啪| 内射中国少妇高清视频免费视频 | 91 亚洲情侣偷拍 久久| 中国特猛少妇色xxx| 国内偷自视频区视频综合 | 国产成人手机视频激情| 欧美色图天堂在线| 超碰午夜| 狠狠操狠狠操操| 在线性黄高清免费视频| 91骚妇| 久久精品店| 国产一区二区a毛片| 97天天爽| 蜜桃久久一区| 亚欧成人综合影院| 99久久这里只有精品| 99re综合伊人| 久操网址| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 高清不卡 中文 人妻| 国产午夜在线观看| 亚洲激情av| 97视频www| 91精品人妻偷情| 亚洲操逼网| 日本黄页视频在线观看| 国产精品久久妻无码网站| 99精品在线| 国产精品69久久久久孕妇欧美| 久久久国产av美女私房| 九久久九精品视频| 色五月AV| 日韩AV电影网站| 传媒在线观看一区二区三区| 在线观看av区| 国产又长又大又粗的视频| 大香蕉黄色一级片免费看| 夜夜操夜夜爽夜夜高潮| 97在线视频观看| 日韩AV一区二区三区四四| 99精品在线| 久久‘黄片视频| 免费99精品国产自在在线| 无码人妻精品一区二区中文| 欧美亚洲美少妇一区二区| 一区AV| 青青草吊丝| 婷婷av在线中文字幕| 9久久9综合| 黄色免费网| 欧美 传媒 麻豆 日韩 偷拍| 一区二区三区美女超清| 99操| 日本一级婬片试看三分钟| 中国小夫妻勾搭露脸淫荡对白 | 欧美激情在线观看视频| 五月天啪啪| 97精品免费视频网站| 激情综合97| 久久久新亚洲AV| 99999精品成人| 欧美一区二区三区四区综合| 97欧美色资源| 欧亚在线视频| 丰满人妻一区二区三区免费| 97人妻色| 精品少妇人妻av久久免费| 日韩中文字幕宗合在线| 2024人人操人人摸| 精品黄色电影| 超碰人妻中文在线| 美女一区二区国产精品| 欧美写真视频一区| 德国一二三不卡| 约操熟妇| 久久 精品| 白丝少妇一区二区| hd成人一区二区在线| 亚洲一区二区av| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 国产亚洲综合欧美一区| 久夜视频| 人妻无码久久一区二区三区免费| 免费A V在线播放| 日本幼女18+| 超碰 另类 欧美| 青草青草久热| 人人操欧美风骚| 成熟熟女国产精品一区二区| 亚洲图片欧美在线视频| 老司机午夜精品视频| 亚洲电影91| 激情自拍 校园春色| 老司机天天操| 日韩图色| 激情文学 亚洲图片| 六月婷婷激情| 黑人狂躁日本妞一区二区三区| …中文字幕亚洲乱,97人妻无码费视… | 中文字幕精品亚洲熟女| 黑丝内射一区二区三区| 操逼不卡中文字幕| www久久久| 国产精品午夜高潮呻吟久久av| 精品人妻丰满熟妇一区二区三| 日本 免费 一区二区三区 久久香蕉| 夜嗨影院| 亚洲电影中字一区二区| 91少妇高潮| 干B| 精品国产嫩穴视频| 视频分类 国内精品| 强奸乱伦AV一天堂网| AV色女综合| 日本中文字幕一区| 91+欧美| 久久天堂婷婷网| 亚洲国产高清福利视频| 久热精品在线国产| 天天综合网网欲色| 密臀在线视频| 亚洲人人夜夜澡人人爽| 1204金沙人妻懂旧版免费| 久草久热| 亚洲精品 大香蕉| 婷婷AV一区二区三区| 二男一女成人A片| 超碰在线人妻中文字幕| 偷拍盗拍亚洲色图图片| 国产午夜福利合集| 大但人体久久久久| 日本不卡一区二区三区| 国产青青美女玩逼视频| 好看的91视频| 久久一留热品黄| 日本天天人人狠狠在线日美女| 日韩人妻精品久久久久| 五月天综合在线| 婷婷AV一区二区三区| av无码精品久久久久| 浓厚中出中文字幕在线| 91美女在线观看| 天天综合网在线观看| 夫妻日逼| 性色A∨91| 日韩综合色图| 成人久久久| 亚洲天堂久久久久久粉红视频| 欧美色性情| 久久69| 91视频在线观看18| 热99这里有精品综合久久 | 青青操在线亚洲视频观看欧美在线 | 亚洲va有码在线天堂| 欧美真人抽搐一进一出gif| 国产1024在线播放| 欧美成年人性爱视频免费观看| 欧美成人一级麻豆| 成人av福利在线观看| www亚洲免费| 91成人久久| 九九黄色视频在线观看| 91久久久久久久| 久久国产精品一级二级三级| 天堂日本亚洲欧美| 欧美色图 人妻| 久久九操在线观看| 九九九九热只有精品| 天天色欧美| 丁香激情网| 99超碰色| 日日日骚女人精品| 天天日天天干天天摸天天操| 欧美激情在线观看视频| 一级性爱网| 色天使亚洲综合在线观看| 大色综合网| 蜜桃成人1区2区3区| 欧中日成人免费影视| 偷拍色图| 后入式免费视频| 伊人网青青| 国产九九九九九九九九| 6080yy午夜理论三级一区二区三区无码| 神马福利久草| 国内97干免费看| 成人一二三区| 精品久久久久久中文字幕三区| 亚洲日韩成人性爱视频| 天堂蜜桃无码视频一区二区| 91挑色欧美| 三级色影综合网| 日韩成人在线性爱视频| 色婷五月| 96国产污污污丝袜| 国产精品视频在线观看| 久久九九视频九九视频| 亚洲色图91欧美日韩| 99re在线视频国产| 亚洲国产精品无码AV久久| 久久精品高清AV| 韩国一区二区精品亚洲| 亚洲青青草| 天堂69亚洲精品中文字| 亚洲中文字幕精品久久久久久直播 | AV男人天堂网| 亚洲成a人v欧美综合天堂下载| 亚洲va有码在线天堂| www.狠狠干.coom| 欧美手机在线综合| 国产欧美日本亚洲精品| 午夜欧美精品久久久| 操逼视频色| 久久手机视直播| 黑人精品欧美一区二区蜜桃| 亚洲密乳AV| 天天综合网~69| 国产尤物在线三区| 亚洲成人一区二区精品| 9热9热综合网| 欧美天天综合网| 91久久久久久| 蜜桃臀一区二区三区久久| 国产精品视频自拍在线| 97干在线看| 啊啊啊好大好深| 中文字幕av乱伦| 熟女精品一区二区在线观看| 亚洲av无码成电影在线播放| 超碰久久性爱| 99re视频这里只有精品| 激情五月天视频| 91国产伊人大香蕉| 自拍视频一区在线观看| 99综合自拍| 人人操人人摸人人骑| 久久人妻视频网| 91国产丝袜白虎| 亚洲日韩精品在线播放| 久久久一区二区| 狠狠色噜噜狠狠狠狠狠色综合久久| 四虎视频在线观看| 日韩精品在线放| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 97天天插| 人人干人人搞人人摸| 日韩中文9| 久久亚洲欧美中文字幕国语| 亚洲永久永久永久永久一级一级一级精品 | 2026国产精品视频| 国产高清无码一区三区二区| 久久综合女优| 影音先锋每日最新资源在线观看| 中文字幕精品丝袜| 无码人妻精品一区二区三区99不卡| 日韩AV色图| 无码精品久久| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 伊人四虎综合| 久操精品网| 日本媚薬中文字幕在线| 变态综合色| 99操| 国产毛片片精品天天看视频| 91色综合激情| 97在线精品观看视频| 91男同| 国产欧美一区激情交| 麻豆av一区二区| 亚洲熟妇图片| 日本性爱欧美性爱| 欧美综合传媒| 精品久久視頻在线| 色欲久久久久综合网| 中文字幕78| 国模少妇一区二区三区| 欧美激情1区| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 1769成人国产精品视频| 中文字幕久久精视频久久大全| 91成人高清在线观看| 欧美综合色,www| 992这里有精品| 青娱乐休闲视频在线观看| 2019AV天堂| 成人午夜小视频手机在线看| 一二三区视频在线观看| 日韩伦理视频| 顶级丝袜熟女一区二区三区| 久久久久成人网| 嗯嗯啊啊用力视频免费| AAAAAAAAA黄片| 国产激情在线| 加勒比AV网| 婷婷深爱五月| 色吧5亚洲| 9.1小视频| 人人澡人人爽人人精品| 亚洲va有码在线天堂| 性91| 欧美中字不卡| www.四虎在线| 99久久精品国产高潮| 人人摸人人入| 九九热只有精品| 97天天操天天干| 首页亚洲国产高跟丝袜诱惑视频| 久久久久久亚洲Av无码| 亚洲少妇视频| 999 久久久| 偷拍欧美激情| 三级三久久线久久99久目本WW| 欧美操人视频| 麻豆AV一区二区天美传媒| 国产熟女精品区| 亚洲另类久操网| 亚洲精品三| 国产极品99热在线播放69| 九九九九国产| 加勒比99999| a片亚洲一本通视频| 少妇蜜汁| 五月婷婷激情综合| 人人做人人妻人人夜视频| 被窝影院午夜看片无码| 青草成人免费视频一COm| 激情情色五月天| 美女裸体无遮挡永久免费观看网站| 亚洲97网站| 少妇精品久久久| 久久婷婷在线观看视频| 色噜噜综合在线| 久久大香蕉| 欧美成人午夜免费福利785| 波多野42部无码喷潮在线观看| 天天日天天操天天射河南省| 亚洲国产日韩精品久久久| 亚欧操逼片在线观看 | 欧美一区二区三区蜜桃| AV麻豆免费一区| 秋霞色色影院| 欧美日韩在线小说| 激情欧美97| 久久免费9| 中国少妇啪啪视频| 久夜操| 久久亚洲日韩熟女精品| 亚洲 中文 欧美 日韩 在线| 综合激情一一91| 久久精品中文| 中文字幕视频免费| 日本九九久久99| 在线免费试看60秒| 人妻五十路在线| 夜色97| 后入式999| 51一区二区三区| 玖日综合网| 国语精品av| 性91| 精品一区二区三区国产| av一区二区三区不卡| 欧美亚洲国产91在线| 蜜臀AV秘一区翔田千里| 国产精品人人爽人人做可爱福利 | 国产免费小视频| 美女9118禁| 好属操| 国产成人超碰在线| 人人操人人插人人摸人人干| 91人妻做a观看视频| 97任你吞精| 五月丁香影视| 国产视频一区二区在线观看| 亚州成人A√| 97bbn| 四季av一区二区凹凸精品小说| 97久久超碰亚洲| 中文字幕在线观| 国产又色又粗又黄又爽| 亚洲成a人在线观看久| 97人人超| 嫩草 人人网精品| 蜜臀av网址| 亚洲Av诱惑| 国产成人拍国产亚洲精品| 色色香蕉| 色婷婷小说| 天天摸夜夜摸| 亚洲综合色在线| 欧美日韩第一页| 伊人久久亚洲色欲综合网站 | 道久久五香丁月婷婷激情综合| 久久人妻一区二区三区高清| 999热这里只有精品| 视频一区二区三区精品| 欧美性爱中文字幕无线码| 五月丁香六月婷| 少妇国产不卡| 日韩精品国模| 久久一区二区三区四区五区| 熟女乱伦A| 五月丁香啪啪啪| 天美传媒在线一区| 欧美性爱一区二区三区| 级做a爱无码性色永久免费| 亚洲成A∨人影院在线欢看| 美女尤物福利视频| 国产丝袜高跟美女av免费观看| 欧美天天干| 中文字幕人乱码中文字的预防方法 | 亚洲熟妇丝袜在线观看| 超碰免费欧美7| 1区2区3区视频| 亚洲最新a在线观看| 久久久久久久 九九九九九九九| 久久99999| 欧美日韩传媒| 大色综合网| 男人干美女| 久久αⅴ| 欧美专区日本专区| 粉嫩少妇自慰在线| 啊啊啊操死我| 人人透人人操| 精品九九淫乱男| 东北少妇高潮zzzz| 五月丁香网站| 日韩人人精品| 大学生口爆吞精| 强奸少妇AV导航网| yazhououmeizongya| 国产精品亚洲天堂网址| 性色avv| 一本久道久久综合狠狠爱一密臀精| 嫩草一区二区在线观看| 欧美美女在线高潮999| 亚洲无码一区成人免费午夜| 五月天玖玖资源站| 99热导航| 天天干天天舔| 国产精品久久久视频| 欧美九九九| 动漫爆乳3D奶水一区在线观看| 97操在线| 日日操免费视频| 亚洲中文字幕妇伦久久| 亚洲欧美伦综合| 久碰视频| 狠狠色五月亚洲91| 天天日天天干天天整| 男人的天堂日韩| 国产女人与拘做受视频免费| 射欧美综合| 中文字幕人妻资源在线| 亚洲色图激情小说| 欧美亚洲综合高清在线| 五月丁香综合激情| 欧美成人精品欧美一级乱黄一区二…| 色官网在线| 欧美一二级| 1769精品一区二区三区| 亚洲综合另类色图| 久草免费在线一区二区| 久久精品日韩专区免费观看| 国产白嫩漂亮KTV在线| 国内97干免费看| 欧美一级久久久久久久大片动画| 性生活无遮挡纯毛片在线看| 国产精品网址| 天天插天天操天天摸天天射天天看| 无码高清国产AV| 一级黄碟| 思思热免费视频观看| 91精品国产长腿丝袜美女| 欧美做爰无码A片视频| 亚洲色图欧美色18直播在线| 亚洲 日韩 欧美 国产综合体| 久操视频这里只有精品| 欧美.亚洲.另类.丝袜.制服.诱惑| 欧插网站| 91天天| 色狠人在线99| 尤物黄色在线观看网站| 91久久久老司机| 日韩性爱视频免费在线| 欧美色97| 东京太热久久久| 五十路六十路七十路熟婆| 97国产亚洲中文在线| 国产精品女aA片爽爽视频| 日本淫色网| 国产亚洲欧美每日在线| 97视频www| 妺妺跟我一起洗澡没忍住| 97综合激情| 9热9热综合网| 3d成人精品一区二区| 亚洲久久天堂| 天天摸夜夜摸| 韩国黄片aaaa| 久久αⅴ| 四虎免费看黄| 色小视频蜜乳| 免费a v| 69久久久久久久久久久久久| 国产精品亚洲免费| 国产午夜在线观看| 九九九九一级| 69超碰综合| 青青伊人这里只有精品| 欧美性爱一区二区三区| 熟女中出视频| 婷婷伊人网| 亚洲无码 国产无码| q2午夜理论片夜色av| 亚州操操穴网| 久久精品国产96精品亚洲拳交| 操人妻视频| 亚州精品人妻一二三区| 国产精品96| 九九热在线精品视频| 大香蕉伊人久久| 国内毛片国产欧美拍| 欧美三级偷拍| 东北老女人的激情视频| 国产精品电影| 大黄片做爱的大的| 97天堂| 亚洲午夜蜜臀| 60秒试看最爽10分钟网站| 国产大学生高潮在线播放| 内射小黄片| 91亚洲人| 亚洲中亚日激情视频| 麻豆国产原创AV色哟哟| 久久激情综合| 强奸乱伦亚洲第一页| 中文字幕熟女人妻丝袜| 日韩成人人妻网站| 天美传媒在线一区| 日韩女优在线| 九九热AV| 思思性爱| 色就色综合| 国产精品一区二区a| 久久精品28| 国产精品高朝久久久久久久| 黄网站黄视频网站进入口| 夜夜爽爽爽| 超碰91在线| 18禁超污无遮挡无码免费网| 日韩三A大片在线观看 | 人人色人人射人人妻| www.婷婷| 秋霞视频一区二区| 国产99久久99热这里只有精品15 | 日韩精品视频在线观看一卡二卡| 日本成人在线不卡一区二区三区 | 久久神马影院| 狠狠躁AV| 久久精品国产精品一区| 成人色女网| av强奸乱轮| 国产精品午夜成人福利| 亚洲 欧美 日本 国内 首页| 小情侣高清国产在线视频| 亚洲男人在线观看天堂| av草草在线电影| 欧美一区二区三区成人性生活| 青娱乐大香蕉| 欧美激情片一区二区| 闷骚老熟女15P| 国产性感在线观看| 啊好爽受不了无码| 神马麻豆福利院| 亚洲日韩成人性爱视频| 手机在线播放国产福利| 十八禁av无码免费网站APP| 亚洲国产成人精品999| 亚洲网站一区二区在线| 2023天天操夜夜操| 天天影视色香欲综合网小说| 97色97干| 日韩有码 一区二区三区| 91大神精品长腿在线观看网站| 乱性AV| 亚洲国产成人精品999| 中文色综合| 中文字幕丝袜国产第一页不卡| 亚洲一区二区三区中文字幕| 91碰超| 国产无码一二三区| 色狠狠色| 操少妇很爽av| 青青草吊丝| 亚洲爱爱视频一区二区| 黑人干亚洲| 加勒比99999| 九九九九精品九九九九| 日韩一级性爱无码| 黄色人人| 亚洲Av无码成人精品国产| 中文字幕一区日韩精| 蜜臀av在线播放一区二区三区| http://qxhbdz.com| 久久曰曰| 久久久精| 欧美97在线欧| 国产极品精品美女视频| 亚洲一区二区三区AV无码| 超碰免费在线| 97se综合网| 天天大干大香蕉| 色与欲影视| 无码外流操逼视频| 久久久久久精品免费看A级| 婷婷六月色| 骚逼一区二区| 噜噜瑟| 强被迫伦姧在线观看无码网站| 亚洲中文一区二区三区| 亚洲无码太久| 国产熟妇 码视频户外直播| 三级日本一区二区三区| 精品亚洲黄色片 国产精品导航一区二区 | 久久九九国产精品|