亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

T3 Stack全棧實(shí)戰(zhàn):從零構(gòu)建代碼片段協(xié)作平臺(tái)的關(guān)鍵決策與踩坑記錄

T3 Stack全棧實(shí)戰(zhàn):從零構(gòu)建代碼片段協(xié)作平臺(tái)的關(guān)鍵決策與踩坑記錄 這個(gè)標(biāo)題t3code乍一看有點(diǎn)抽象但如果你最近常在技術(shù)社區(qū)晃悠應(yīng)該能嗅到一絲熟悉的味道——T3那個(gè)被Theo帶火的全棧技術(shù)??s寫(xiě)再加上code基本就能猜到這項(xiàng)目是干嘛的了。先說(shuō)清楚t3code是我最近一個(gè)月從零肝完的一個(gè)代碼片段管理與協(xié)作平臺(tái)。名字聽(tīng)起來(lái)敷衍實(shí)際上是我拿T3 Stack這套技術(shù)組合Next.js、TypeScript、tRPC、Tailwind CSS、Prisma、NextAuth做的全棧實(shí)戰(zhàn)項(xiàng)目定位是給開(kāi)發(fā)者團(tuán)隊(duì)用的內(nèi)部代碼片段庫(kù)支持片段上傳、按團(tuán)隊(duì)分組、多人評(píng)論、帶權(quán)限的收藏與分享。整個(gè)項(xiàng)目從前端頁(yè)面到數(shù)據(jù)庫(kù)約束全部走TypeScript類(lèi)型打通算是我近年做得最通透的一次全棧開(kāi)發(fā)。這篇東西不是教程是我做完之后想把關(guān)鍵決策、踩坑鏈路、以及那些文檔里不會(huì)寫(xiě)的細(xì)節(jié)整理出來(lái)給正準(zhǔn)備上T3這套組合的人當(dāng)參考。如果你也在糾結(jié)要不要用tRPC替代REST、Prisma和NextAuth到底怎么協(xié)作、權(quán)限到底在層控制才不出事那這篇應(yīng)該能幫你省掉不少試錯(cuò)時(shí)間。1. 選型階段T3 Stack到底解決了什么問(wèn)題1.1 項(xiàng)目需求一個(gè)開(kāi)發(fā)者的代碼片段協(xié)作工具先說(shuō)需求來(lái)源。我們團(tuán)隊(duì)之前用的是一個(gè)很古老的Wiki代碼片段靠頁(yè)面歸檔找代碼靠CtrlF權(quán)限基本等于擺設(shè)有人誤刪了片段只能翻備份。我當(dāng)時(shí)的想法很簡(jiǎn)單搞一個(gè)內(nèi)部工具讓團(tuán)隊(duì)能結(jié)構(gòu)化地存代碼片段并且能控制誰(shuí)能看、誰(shuí)能改、誰(shuí)能刪。核心需求拆下來(lái)大概這么幾條片段要支持多語(yǔ)言標(biāo)簽、多標(biāo)簽分類(lèi)能按團(tuán)隊(duì)篩選每個(gè)片段要有獨(dú)立詳情頁(yè)支持評(píng)論和收藏權(quán)限分三級(jí)公開(kāi)全團(tuán)隊(duì)可看、受保護(hù)僅指定團(tuán)隊(duì)可看、私有僅創(chuàng)建者可看操作要留痕刪除了不能徹底消失得能恢復(fù)整個(gè)東西要部署簡(jiǎn)單不能搞一堆微服務(wù)出來(lái)給自己找事說(shuō)來(lái)慚愧這個(gè)需求如果放三五年前我大概率會(huì)選VueDjangoMySQL寫(xiě)一堆REST接口再手動(dòng)維護(hù)一份前端類(lèi)型定義。但這幾年TypeScript用久了真的受不了后端改了字段、前端跑崩了才知道的狀態(tài)。所以一開(kāi)始我就鎖定了全棧TypeScript的路線(xiàn)然后很自然就看到了T3 Stack。1.2 T3 Stack的組成與取舍邏輯T3 Stack不是一個(gè)新的框架而是一套被社區(qū)驗(yàn)證過(guò)的技術(shù)組合核心哲學(xué)是大膽假設(shè)、小心求證、按需引入。它默認(rèn)推薦Next.js作為應(yīng)用框架、tRPC做API層、Prisma做ORM、NextAuth做認(rèn)證、Tailwind CSS做樣式然后在這基礎(chǔ)上把TypeScript的類(lèi)型安全貫穿始終。我實(shí)際落地時(shí)這幾個(gè)選型的理由是這樣的組件選了它理由Next.jsApp Router版路由即文件、Server Component天然適配服務(wù)端渲染團(tuán)隊(duì)熟悉ReacttRPC最新版不寫(xiě)REST、不寫(xiě)GraphQL直接調(diào)用函數(shù)級(jí)別的API類(lèi)型自動(dòng)推斷Prisma最新版Schema即文檔遷移工具完善多對(duì)多關(guān)系寫(xiě)起來(lái)舒服NextAuthv4和Next.js生態(tài)深度綁定支持CredentialsGitHub雙登錄Tailwindv4寫(xiě)完不用再寫(xiě)CSS文件迭代快團(tuán)隊(duì)已經(jīng)在用需要說(shuō)明的是tRPC這套方案在國(guó)內(nèi)團(tuán)隊(duì)里普及率還不算高很多人聽(tīng)都沒(méi)聽(tīng)過(guò)。它最核心的底氣是只要你的前端和后端都跑在TypeScript世界里讓編譯器幫你把API契約管好就不需要像OpenAPI那樣額外維護(hù)一份接口文檔。你可以理解成前后端共享一份類(lèi)型定義調(diào)用API的時(shí)候像調(diào)用本地函數(shù)一樣這種體驗(yàn)我用了之后是回不去的。2. t3code的架構(gòu)落地頁(yè)層與數(shù)據(jù)層如何切分2.1 工程初始化與目錄規(guī)范初始化T3項(xiàng)目很簡(jiǎn)單裝好Node環(huán)境后一行命令npx create-t3-applatest t3code腳手架會(huì)問(wèn)你選哪些模塊我勾了Next.js、tRPC、Prisma、NextAuth、Tailwind。有一點(diǎn)提醒一下它默認(rèn)會(huì)把ESLint、Prettier一起配好別手賤刪掉后面寫(xiě)代碼真的會(huì)省心很多。初始化完之后的目錄是腳手架替你做好的核心結(jié)構(gòu)長(zhǎng)這樣src/ app/ # Next.js App Router的頁(yè)面目錄 pages/ # 舊版Pages Router腳手架默認(rèn)保留 server/ # tRPC路由、Prisma實(shí)例、認(rèn)證配置 styles/ # 全局樣式我在這個(gè)基礎(chǔ)上做了兩處調(diào)整。第一刪掉了src/pages因?yàn)槲胰坑肁pp Router不需要Pages Router混著來(lái)。第二在src/server下面按模塊切了文件夾而不是一個(gè)router.ts寫(xiě)到底src/server/ api/ # tRPC的rootRouter與子路由 db/ # Prisma Client單例 auth/ # NextAuth配置 middlewares/ # 權(quán)限中間件說(shuō)實(shí)話(huà)這種目錄劃分沒(méi)什么玄學(xué)純粹是后面代碼量大了好找人。tRPC的router文件如果只有一兩個(gè)幾百行還能忍到我這種有片段、評(píng)論、收藏、團(tuán)隊(duì)、用戶(hù)五六個(gè)維度的項(xiàng)目不拆就是事故現(xiàn)場(chǎng)。2.2 tRPC路由設(shè)計(jì)聚合還是拆分這里是我整個(gè)項(xiàng)目里思考最久的部分。tRPC有兩種組織方式聚合式所有邏輯寫(xiě)進(jìn)一個(gè)rootRouter用嵌套命名區(qū)分模塊拆分式每個(gè)業(yè)務(wù)域一個(gè)子路由procudure分類(lèi)掛在對(duì)應(yīng)子路由下我選了第二種原因很實(shí)際聚合式在項(xiàng)目初期寫(xiě)起來(lái)飛快但一旦多個(gè)模塊要共享中間件或者互相調(diào)用文件會(huì)膨脹得極其恐怖。拆分式每個(gè)子路由獨(dú)立維護(hù)中間件可以在子路由級(jí)別單獨(dú)掛載避免全員都要過(guò)登錄校驗(yàn)這種粗粒度權(quán)限。實(shí)際的rootRouter長(zhǎng)這樣簡(jiǎn)化版export const appRouter router({ snippet: snippetRouter, comment: commentRouter, collection: collectionRouter, team: teamRouter, user: userRouter, health: healthRouter, }); export type AppRouter typeof appRouter;前端調(diào)用的時(shí)候自動(dòng)有一個(gè)類(lèi)型完備的trpc對(duì)象幫你做代理比如創(chuàng)建片段const mutation trpc.snippet.create.useMutation(); await mutation.mutateAsync({ title: 防抖函數(shù), language: typescript, code: export function debounce(fn, delay) {...}, visibility: TEAM, });注意這里language、visibility這些字段都是字面量聯(lián)合類(lèi)型寫(xiě)錯(cuò)了編譯器直接紅。我在開(kāi)發(fā)中期加了一個(gè)字段的時(shí)候改完schema之后TS立刻把所有用到的地方全標(biāo)紅這種全鏈路可控感是REST方案給不了的。2.3 類(lèi)型安全的鏈接方式從頁(yè)面到數(shù)據(jù)流的閉環(huán)T3這套組合最爽的一環(huán)是不用再手寫(xiě)請(qǐng)求層。傳統(tǒng)REST開(kāi)發(fā)里前端拿數(shù)據(jù)要寫(xiě)一個(gè)fetch封裝、定義返回類(lèi)型、再寫(xiě)一個(gè)loading狀態(tài)。在Next.js App Router時(shí)代更麻煩因?yàn)轫?yè)面既是客戶(hù)端又是服務(wù)端你得反復(fù)斟酌這個(gè)數(shù)據(jù)在Server Component里拿還是掛在tRPC的procedure里。我用下來(lái)的結(jié)論是能走Server Component的查詢(xún)就不要走tRPC客戶(hù)端查詢(xún)tRPC專(zhuān)注在頁(yè)面需要?jiǎng)討B(tài)交互的場(chǎng)景。比如片段列表頁(yè)首屏數(shù)據(jù)我直接放到Server Component里用Prisma查// app/snippets/page.tsx import { db } from /server/db; export default async function SnippetsPage() { const snippets await db.snippet.findMany({ where: { visibility: { not: PRIVATE } }, include: { tags: true, author: true }, orderBy: { createdAt: desc }, }); return SnippetList initialData{snippets} /; }而搜索、篩選、收藏這些用戶(hù)點(diǎn)了才發(fā)生的操作才掛在tRPC的query/mutation上。好處很明顯首屏沒(méi)有先loading再請(qǐng)求的等待SEO友好同時(shí)動(dòng)態(tài)交互那塊又保持著全類(lèi)型安全。這套搭配我強(qiáng)烈推薦比全部走客戶(hù)端請(qǐng)求的體驗(yàn)好一個(gè)檔次。3. Prisma與NextAuth最容易翻車(chē)的兩個(gè)模塊3.1 Prisma schema與多表關(guān)聯(lián)設(shè)計(jì)Prisma最舒服的是Schema即數(shù)據(jù)庫(kù)設(shè)計(jì)寫(xiě)起來(lái)像寫(xiě)配置文件但遷移能力是真實(shí)生產(chǎn)級(jí)的。t3code的核心Schema大概是這個(gè)畫(huà)風(fēng)model User { id String id default(cuid()) name String? email String? unique emailVerified DateTime? image String? accounts Account[] snippets Snippet[] comments Comment[] collections Collection[] teams TeamMember[] } model Team { id String id default(cuid()) name String unique members TeamMember[] snippets Snippet[] } model TeamMember { teamId String userId String role Role default(MEMBER) user User relation(fields: [userId], references: [id]) team Team relation(fields: [teamId], references: [id]) id([teamId, userId]) } model Snippet { id String id default(cuid()) title String code String language String visibility Visibility default(PUBLIC) authorId String author User relation(fields: [authorId], references: [id]) teamId String? team Team? relation(fields: [teamId], references: [id]) tags Tag[] comments Comment[] collections CollectionSnippet[] deletedAt DateTime? createdAt DateTime default(now()) updatedAt DateTime updatedAt }有幾個(gè)設(shè)計(jì)決策想細(xì)說(shuō)為什么User只有email沒(méi)有password字段因?yàn)槲业卿浻玫腃redentials方案密碼存在Account表里由NextAuth負(fù)責(zé)。這個(gè)責(zé)任邊界很清楚Prisma只管用戶(hù)資料認(rèn)證本身的會(huì)話(huà)歸NextAuth管。為什么軟刪除用deletedAt而不是直接刪記錄需求里有誤刪要能恢復(fù)直接物理刪除后面想救人就得從備份里撈太痛苦。Prisma支持updatedAt自動(dòng)更新配合查詢(xún)時(shí)過(guò)濾deletedAt: null恢復(fù)邏輯就是把deletedAt設(shè)為null成本極低。多對(duì)多關(guān)系注意點(diǎn)Tag和Snippet是隱式多對(duì)多即只要兩邊都定義了數(shù)組字段Prisma會(huì)自動(dòng)生成中間表不用手動(dòng)建model。但我建議如果中間表要存額外字段比如收藏時(shí)間就得顯式建模像CollectionSnippet那樣。否則后面想記錄收藏時(shí)間就得改表麻煩得很。3.2 NextAuth會(huì)話(huà)集成session策略與JWTNextAuth是T3棧里文檔看著簡(jiǎn)單、用起來(lái)滿(mǎn)地坑的典型。一個(gè)最經(jīng)典的坑就是默認(rèn)的session策略是JWT還是database建議直接用JWT別碰數(shù)據(jù)庫(kù)session。原因很簡(jiǎn)單database session需要在數(shù)據(jù)庫(kù)建Session表每次查詢(xún)都多一次IOJWT則把用戶(hù)信息塞進(jìn)簽名的token里無(wú)狀態(tài)、輕量。代價(jià)是登出后token在有效期內(nèi)依然能用但對(duì)于內(nèi)部協(xié)作工具這完全不是問(wèn)題。我在集成時(shí)遇到過(guò)一個(gè)特別隱晦的坑NextAuth的session回調(diào)里拿不到j(luò)wt回調(diào)里塞進(jìn)去的自定義字段。比如我想把用戶(hù)的是否管理員塞進(jìn)session在jwt回調(diào)里改了token前端Session卻依然是舊結(jié)構(gòu)。根因是回調(diào)執(zhí)行順序jwt回調(diào)先執(zhí)行然后session回調(diào)才能從token里取數(shù)據(jù)。你需要同時(shí)改兩個(gè)地方// src/server/auth.ts callbacks: { async jwt({ token, user }) { if (user) token.role (user as any).role; return token; }, async session({ session, token }) { session.user.role token.role; return session; }, }另外別忘了在src/types/next-auth.d.ts里擴(kuò)展Session和JWT的類(lèi)型不然TS又給你一路標(biāo)紅。3.3 種子數(shù)據(jù)權(quán)限初始化的坑開(kāi)發(fā)環(huán)境需要種子數(shù)據(jù)我寫(xiě)了一個(gè)prisma/seed.ts創(chuàng)建測(cè)試用戶(hù)、團(tuán)隊(duì)、片段。這里有一個(gè)非常容易被忽略的混亂源頭NextAuth的Credentials Provider在創(chuàng)建用戶(hù)時(shí)和種子腳本必須走同一套賬號(hào)密碼hash方案。我們先看Credentials Provider的校驗(yàn)它需要你自己比對(duì)明文CredentialsProvider({ name: credentials, credentials: { email: { label: 郵箱, type: email }, password: { label: 密碼, type: password }, }, async authorize(credentials) { const user await db.user.findUnique({ where: { email: credentials.email }, }); if (!user) return null; // 因?yàn)檠菔卷?xiàng)目我直接明文比較生產(chǎn)環(huán)境必須 hash const isValid credentials.password user.password; return isValid ? user : null; }, })但Prisma的User model我上面說(shuō)了沒(méi)有password字段種子腳本怎么為用戶(hù)設(shè)置密碼我的做法是專(zhuān)門(mén)加了一個(gè)passwordHash字段放在User表種子腳本生成時(shí)用bcryptjs加密authorize校驗(yàn)時(shí)用bcrypt.compare比對(duì)。這樣兩邊邏輯統(tǒng)一。千萬(wàn)不要圖省事在數(shù)據(jù)庫(kù)里存明文密碼后面接入真實(shí)用戶(hù)時(shí)隱患極大。哪怕是一個(gè)內(nèi)部工具也得按生產(chǎn)標(biāo)準(zhǔn)做這是職業(yè)習(xí)慣。4. 權(quán)限鏈路從數(shù)據(jù)庫(kù)約束到UI控制的層層設(shè)防4.1 tRPC中間件體系權(quán)限是我這項(xiàng)目里最上心的部分。因?yàn)樾枨罄镉腥?jí)可見(jiàn)性一旦控制不好輕則越權(quán)查看重則數(shù)據(jù)泄露。我是這樣層層設(shè)防的。tRPC的中間件和Express類(lèi)似可以在每個(gè)procedure執(zhí)行前插入邏輯。我定義了一個(gè)基礎(chǔ)中間件必須登錄const isAuthed t.middleware(({ ctx, next }) { if (!ctx.session?.user) { throw new TRPCError({ code: UNAUTHORIZED }); } return next({ ctx: { ...ctx, userId: ctx.session.user.id }, }); }); export const protectedProcedure t.procedure.use(isAuthed);這是第一層。第二層是針對(duì)團(tuán)隊(duì)資源的團(tuán)隊(duì)成員校驗(yàn)const isTeamMember (teamId: () string) t.middleware(async ({ ctx, next }) { const user ctx.session?.user; const membership await db.teamMember.findUnique({ where: { teamId_userId: { teamId: teamId(), userId: user?.id as string, }, }, }); if (!membership) { throw new TRPCError({ code: FORBIDDEN }); } return next({ ctx: { ...ctx, membership } }); });這套組合拳下來(lái)所有受保護(hù)片段的讀寫(xiě)都必須先過(guò)兩道關(guān)卡。順序很重要先鑒權(quán)再鑒權(quán)到具體資源。4.2 服務(wù)端校驗(yàn) vs 客戶(hù)端提示很多教程里會(huì)寫(xiě)前端根據(jù)用戶(hù)角色顯示按鈕但那只解決了用戶(hù)看不看得到?jīng)]解決用戶(hù)能不能調(diào)接口。我始終堅(jiān)持服務(wù)端校驗(yàn)才是真校驗(yàn)前端只是體驗(yàn)優(yōu)化。實(shí)現(xiàn)方式是在tRPC的router里把權(quán)限判斷和業(yè)務(wù)邏輯分兩段。例如編輯片段update: protectedProcedure .input(z.object({ id: z.string(), title: z.string().min(1), code: z.string().min(1), })) .mutation(async ({ ctx, input }) { const snippet await db.snippet.findUnique({ where: { id: input.id } }); if (!snippet) { throw new TRPCError({ code: NOT_FOUND }); } // 核心權(quán)限校驗(yàn)要么是作者要么是團(tuán)隊(duì)管理員 if (snippet.authorId ! ctx.userId !ctx.membership?.isAdmin) { throw new TRPCError({ code: FORBIDDEN }); } return db.snippet.update({ where: { id: input.id }, data: ... }); })而前端的體驗(yàn)就是能拿到數(shù)據(jù)但按鈕置灰或者調(diào)用時(shí)報(bào)錯(cuò)后彈提示。最怕的就是前端很自信地以為沒(méi)顯示按鈕就是沒(méi)權(quán)限后面測(cè)試時(shí)用Postman一捅就漏了。4.3 審計(jì)日志與軟刪除設(shè)計(jì)上面提到軟刪除這里展開(kāi)聊。軟刪除最大的坑是所有查詢(xún)都要記得過(guò)濾deletedAt稍不注意就會(huì)把已刪除數(shù)據(jù)查出來(lái)。我這里的做法是封裝了一個(gè)Prisma擴(kuò)展const extendedDb prisma.$extends({ query: { snippet: { async findMany({ args, query }) { return query({ ...args, where: { deletedAt: null, ...args.where }, }); }, }, }, });這樣所有對(duì)外查詢(xún)默認(rèn)帶上未刪除條件只有審計(jì)和管理員還原時(shí)才顯式查詢(xún)deletedAt。這類(lèi)約束如果只靠開(kāi)發(fā)人員自覺(jué)遲早出幺蛾子建議在數(shù)據(jù)訪(fǎng)問(wèn)層統(tǒng)一處理。審計(jì)日志方面我建了一張AuditLog表在tRPC的mutation成功后寫(xiě)入誰(shuí)在什么時(shí)間干了什么。不搞復(fù)雜的消息隊(duì)列就是同步寫(xiě)一條日志。對(duì)于內(nèi)部工具來(lái)說(shuō)這才是真正能拿來(lái)追溯的東西。5. 部署前夜性能優(yōu)化與那些被忽視的配置5.1 打包體積分析與字體本地化項(xiàng)目功能都跑通后部署前最關(guān)心的就是體積和速度。我用next/bundle-analyzer看了一眼bundle發(fā)現(xiàn)問(wèn)題最大的不是業(yè)務(wù)代碼而是第三方庫(kù)中的日期處理包和圖標(biāo)庫(kù)被整包引入了。Next.js 13默認(rèn)會(huì)做tree-shaking但有些CJS庫(kù)就是改造不動(dòng)。解決辦法要么切換成按需加載要么換庫(kù)我最后把幾個(gè)大的純工具庫(kù)合并成了一個(gè)自己寫(xiě)的工具集體積直接砍掉30%。另外一個(gè)容易被忽視的點(diǎn)開(kāi)發(fā)時(shí)用了Google Fonts構(gòu)建時(shí)Next.js默認(rèn)會(huì)在運(yùn)行時(shí)去拉字體導(dǎo)致首屏涉及的接口請(qǐng)求多了一層外部依賴(lài)。部署到內(nèi)網(wǎng)環(huán)境沒(méi)有外網(wǎng)權(quán)限直接白屏拉不上來(lái)字體。解決方式是構(gòu)建時(shí)把字體文件下載到本地用next/font/local引用徹底斷了運(yùn)行時(shí)外部請(qǐng)求。5.2 tRPC批量查詢(xún)的N1問(wèn)題tRPC用起來(lái)爽但遠(yuǎn)程函數(shù)調(diào)用就像遠(yuǎn)程銀行轉(zhuǎn)賬——單筆沒(méi)感覺(jué)循環(huán)100筆就慢到懷疑人生。我踩的一個(gè)典型坑是在片段列表頁(yè)查評(píng)論數(shù)前端對(duì)每個(gè)片段發(fā)一次comment.count的query列表15個(gè)片段就是15個(gè)請(qǐng)求白白多了15個(gè)RTT。排查鏈路是這樣的打開(kāi)Network面板發(fā)現(xiàn)首頁(yè)有16個(gè)tRPC請(qǐng)求第一反應(yīng)是怎么這么多組件里看代碼發(fā)現(xiàn)每個(gè)SnippetCard都獨(dú)立調(diào)用了trpc.comment.getCount改成在列表頁(yè)的查詢(xún)里用Prisma的_count直接把評(píng)論數(shù)帶出來(lái)const snippets await db.snippet.findMany({ include: { _count: { select: { comments: true } }, author: true, }, });請(qǐng)求數(shù)從16降成1。寫(xiě)tRPC的同學(xué)務(wù)必養(yǎng)成的習(xí)慣凡是可以聚合的查詢(xún)?cè)诜?wù)端一次性查出結(jié)構(gòu)話(huà)數(shù)據(jù)再拋給前端。別把tRPC當(dāng)成端到端直連數(shù)據(jù)庫(kù)的魔法它只是幫你少寫(xiě)類(lèi)型定義沒(méi)有免掉網(wǎng)絡(luò)開(kāi)銷(xiāo)。5.3 環(huán)境變量與CI的一次配置部署前我還處理了一個(gè)看似不起眼但折騰了一晚上的問(wèn)題CI環(huán)境里跑prisma migrate deploy失敗原因是CI環(huán)境沒(méi)有數(shù)據(jù)庫(kù)連接權(quán)限。工程配置里.env文件默認(rèn)沒(méi)有提交到git而CI機(jī)器上沒(méi)有這個(gè)文件Prisma CLI就找不到DATABASE_URL。解決辦法是在CI的yml里顯式傳遞環(huán)境變量并在prisma generate之前先跑prisma migrate deploy。如果你用的是GitHub Actions在Settings - Secrets里配置好DATABASE_URL然后yml里這樣寫(xiě)- name: Apply migrations run: npx prisma migrate deploy env: DATABASE_URL: ${{ secrets.DATABASE_URL }}順手再給Prisma Client加一個(gè)generator配置里的previewFeatures這取決于你用的版本。反正CI這塊大多數(shù)莫名其妙失敗都是環(huán)境變量沒(méi)傳干凈先查這步。6. 上線(xiàn)一個(gè)月后的復(fù)盤(pán)哪些設(shè)計(jì)扛住了哪些還要改說(shuō)實(shí)話(huà)項(xiàng)目上線(xiàn)后并沒(méi)有一勞永逸。一個(gè)月下來(lái)有幾個(gè)觀察挺有意思??缸〉牟糠诸?lèi)型安全是真的香。改了一次Snippet表加字段前端所有用到的地方標(biāo)紅逐個(gè)修完一次通過(guò)。軟刪除方案沒(méi)有拖垮查詢(xún)性能配合默認(rèn)過(guò)濾規(guī)則也沒(méi)出現(xiàn)過(guò)已刪除內(nèi)容復(fù)活的異常。tRPC的中間件體系讓我加團(tuán)隊(duì)管理權(quán)限時(shí)幾乎沒(méi)動(dòng)業(yè)務(wù)代碼很輕松地插入了一層校驗(yàn)。沒(méi)扛住的部分全文檢索。當(dāng)時(shí)圖省事用了LIKE %keyword%數(shù)據(jù)量過(guò)萬(wàn)之后查一次能感知到慢。后面得換Postgres的全文索引或者接一個(gè)搜索服務(wù)。團(tuán)隊(duì)權(quán)限模型還是太簡(jiǎn)單了。上線(xiàn)后用戶(hù)反饋我需要讓某個(gè)成員只能看不能改、看能不能按標(biāo)簽限制可見(jiàn)性這是當(dāng)時(shí)沒(méi)細(xì)想的部分。NextAuth的Credentials方案對(duì)于內(nèi)部工具夠用但如果以后要接企業(yè)微信或飛書(shū)登錄可能得換一套認(rèn)證中間層。如果讓我重來(lái)一遍我會(huì)在權(quán)限模型上多花一倍時(shí)間。代碼片段管理工具看起來(lái)是CRUD 搜索真正做起來(lái)你會(huì)發(fā)現(xiàn)權(quán)限才是它的靈魂。最后分享一個(gè)小技巧上線(xiàn)之后我保留了調(diào)試用的health router每次排查部署問(wèn)題時(shí)訪(fǎng)問(wèn)一下就能極快地確認(rèn)服務(wù)在線(xiàn)、數(shù)據(jù)庫(kù)連接正常、認(rèn)證模塊可用比看日志大海撈針舒服多了。t3code這個(gè)項(xiàng)目做到這里算告一段落但T3這套組合的探索還在繼續(xù)后面有新的體會(huì)再來(lái)分享。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
97免费在线视频在线观看| 翔田千里A片一区二区| 欧美精品三区| 国内91熟女人妻丝袜天天精品视频在线| 成人网欧美风情| 69精品| 日本护士高潮| 久9爱精品| 凸凹视频在线观看| 精品成人久久久人人亚洲| 亚洲欧综合另类无码一区| 亚洲熟女一区| 温婉少妇玩3p| 亚洲。天堂。日本在线观看| 国产精品一级特黄aaa大片在线观看| 人人喜人人妻| 国产精品日韩在线一区| 亚洲www91| 日韩有码 一区二区三区| 97久精品| 99精品成人免费看| 96一区二区三区| 久久综合激情| 色淫网站优优视频| 四虎影视在线| 在线观看av区| 大香久久| 丝袜喷水在线| 欧美一级久久久丰满| 啊啊啊久久久视频| 日韩无码专区| 欧美gv在线观看| AV丝袜少妇| 欧洲成人性爱视频| 四虎精品亚洲| 国产精品乱人伊人网| 成全动漫视频观看免费下载| 久久精品无码不卡| 精产国品一区二三产品| WWW黄片COM| 久久日韩肥臀| 天天操美美| 日本理论在线| 国产第25页在线观看| 九九免费影片| 美女淫穴| 精品久久久久,69国产成人精| 免费AV中文网在线观看| 少妇熟女视频一二三区| 91在线视频免费中出| 岛国免费黄色网址| 91无遮挡| 精品无码一区二区人妻久久蜜桃| 丁香五月综合| 欧美日韩 强奸乱伦| 日本欧美不卡| 97欧美资源| 亚洲欧洲精品成人| 五月综合色| 人人操人人操人人操人人操人人操人人人11.CM | 天美传媒Av在线| 我爱大香蕉| 91人精品妻入口| 91女优在线观看| 9九九九九视频在线观看| 午夜精品久久久久久久久久蜜桃| 精品免费囯产一区二区三区 | 9色在线| 日韩免费福利在线观看| 久久少妇| 亚洲色图 91| 色女99一级片在线观看| 精品超碰中文在线| 日韩亚洲Av人人夜夜澡人人爽| 亚洲天天操| #NAME?| 精品一国2| 91夜色chaopeng| 色欲天天综合网| 综合欧美激情网| 激情黄色片在线观看| 狠狠色五月亚洲91| 亚洲做性| 久热网| 小明看看网址| 欧美性,色九九| 99久在线精品99re8热| www.91逼逼.com| 成年无码动漫av片无尽在线| 蜜臀网 一区| 青青草国产一区二区三区| 性欧美体内射精| 人人操人人狠狠操| 婷婷丁香成人| 久久男女激情视频网站 | 亚洲色图91| 噜噜噜噜天天狠狠| 国产精品美女视频诱惑| 久久精品国产亚洲av水密被窝| 国内一区二区三区| 97国产精品久久久久 | 少妇同性| 久久蜜桃综合网| 夜夜嗨AV一区天天| 日本有码久久| 久操综合在线| 精品国产乱码久久久久久影片| 天天色播亚洲综合网站| 99国产精品人妻人伦| 99热婷婷| 日本三级韩三级99久久| 久久精品一区二区三区不卡| 蜜臀精品1区2区| 国产91美女高潮| 亚州精人品大香蕉| 99国产精品在线观看| 在线观看一卡二卡| 伊人久久大香蕉线AV五月天| 欧美综合网1| 97日韩欧美亚洲| 干B网| 亚洲色婷婷久久久综合日本| 国产黄色视频久久| 黄色片一区二区三区四区五区 | 97人人夜| 久久97超碰| 日本影视久久免费| 精品欧美А∨无码黑人大荫蒂| 日小BB小视频| 日韩精品在线观看网站| 五月婷婷色| 国产性感骚丝袜在线| 九九九久千久久激情蜜桃在线看 | 精品人妻一区二区三区视频| 日韩特一级久久| 怡红院成人视频| 97欧美视频| 沈阳熟女高潮对白视频| 久久久久幕乱码| 国产午夜精品理论片a大结局| 在现视频女上位好爽| 大香蕉色十月| 天天情欲宗合网| 欧美在线第五页| 亚洲精品九九九九九九| 天天综合网网欲色| 日日操免费视频| 综合在线导航一区| 九九av| 欧美后进式| 久久9 9 9精品| 中文字幕乱码人妻一区二区三区,99精品| 色综合中文字幕不卡| 亚洲熟女综合| 中文字幕第95页| 国产又粗又长又大的视频| 欧美日韩狠狠爱| 97久久久| 久久riav中文精品| 黄污污污污| 91成人在线| 97超碰精品成| 丝袜AV一区二区三区| 97精品| 亚洲色图日韩精品| 色呦呦、国产精品| 超碰到97情色| 亚洲国产综合视频| 久久久久久国产无码精品| 99热久| 中美日韩毛片| 欧美色91| 国产成人亚洲精品无码最新在线| 睡产熟女乱伦| 人妻在线大香蕉| 加勒比海人人操超碰在线| 91福利网在线观看| 久久性视频| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 中国一区二区亚洲人妻| 嗯嗯啊啊啊好舒服| 亚洲精品九九九| 夜夜操青青草| 日韩中文字幕av在线播放| 成人情色综合网| AⅤ片水多多| 婷婷五月天色色| 国产熟妇一区二区| 一起草在线视频| 日逼国产| 综合网欧| 日本操逼无码| 亚洲91少妇| asc国产精品| 国产精品久久久久无码Av网曝门| 欧美亚洲日韩人妻在线观看| 999熟女精品| 天天色黄色影院天天操| 刺激性视频黄页| 中文字幕av片| 精品视频免费在线一区| 伊人五月天青青草婷婷| 蜜臀99久久国产| 亚洲日韩美国人妻| 搞中出视频在线观看| 日本精品999| 91九九| 亚洲做性| 免费在线观看国内色片网站网址| 97色色国产视频| 日日爱99| 人人色97| 99婷婷一区二区| 人妻嗯啊啊在线播放| 精品女同一区| 91精品国产日韩欧美综合| 久久天天躁日日躁狠狠躁| 97超碰精品| 99免费在线视频| 欧美春色| 999狠狠综合| 国产午夜精品一区二区三区牛牛| 在线性黄高清免费视频| 亚洲欧美综合网站| 日韩欧美俄罗斯A片| 久久日本熟妇熟色高清| 特级丰满少妇一级AAAA爱毛片| 超碰中文字幕人妻草一区| 少妇一级无码精品| 精品人妻一区二区三区-国产精品| 亚洲色交| 欧美日韩国第一区| 在线综合 亚洲 欧美中文字幕| 夜夜操av亚洲一区二区| 免费久久一级毛片大黄| 亚洲色资源| 日本精品无码三级网站| 亚洲欧美激情小说| 91色艳| 在线观看中文字幕| www.操| ji熟女.com| 1二区9| 成人亚欧免费视频| 亚洲风情综合网| 国产超碰在线| 97爱| se,,,亚洲欧美| 99精品欧美一区二区三区桃色| 亚洲凸凹超碰成人| 亚洲国产欧美中日韩成人综合视频| 五月天AV资源| AV色天香在线| 艹比视频国产精品| 97中文字幕九区| 男人的天堂在线有码| 亚洲欧美999| 裸体女人草逼视频播放一区,二区,三区,四区,五区| 一区不卡在线观看av| 中文一区在线日| 色牛牛AV| 日本成a人v网站在线观看| 青青草五月天| 色色亚洲| 91强热人妻| 无码粉嫩白虎一线天b区| 亚洲精品丝袜-不卡成人免费…… 久久久久成人蜜桃精品 | 欧美日韩激情无码专区| 亚州性色| 亚洲凸凹超碰成人| 激情文学网伊人| 国产日韩精品suv| 夜夜 中文视频rt| 日本岛国黄色网址| 日韩性爱毛片操骚逼| 神马久久久久久久久| 精精夜夜| 国产亲戚伦亲在线| 蜜臀中文字幕| 精品乱码在线观看| 亚州精品丝袜-不卡成人免费| 国产强奸超碰AV| 蜜臀久久99精品久久久久久婷婷| www.AV有限公司一区| 97人人草| 在线一道啪| 久久天堂| 深夜激情| 97av,com| 自拍二页| 毛片视频白嫩| 五月婷婷色| 国产亚洲女v在线观看| 欧美日韩中文字幕人妻| 久热精品在线| 黑人精品久久97| 久久精精区一区二区一蜜桃一区二区| 久久美女国产| 麻豆国产97在线| 夜夜夜夜久久久久| 久久妇| 99爱久久视频频| 婷婷五月天成人| 天天操夜夜嗨| 免费A片三p视频| 一本久久久精品| 秋霞一区二区三区四区五区六区七区| 久久久精品日本一道| 玖玖资源综合在线视频| 韩日性爱av| 国产精品美女久久久久久网站| 色噜噜人妻av中文字幕| 天堂亚洲精品久久老牛| 欧美性生活内射| 天天看片天天爽| 丁香五月影院| 欧美综合区| 精品人体无圣光凹凸| 麻豆久久精品亚洲精品88| 蜜桃久久一区| 欧美综色欧| 欧美日韩系列| 青青草久草AV| 亚洲伊人久久精品影院| 国产精品电影推荐| 丝袜无码a片| 伊人久久国产免费观看视频| 色香阁在线| 婷婷中文字幕| 精品人妻1237| 91暧暧| 欧美不卡在线美女| 后入 亚洲 美女 射| 男人的天堂2018东京热啪啪啪| 色九九九九久| 夜夜嗨一区二区| 啊啊啊啊嗯嗯嗯用力好爽 | 久久久久婷婷精品av电影| 伊人伊人LD| 国产精品suv一区| 久久伊人网视频一区二区三区| 中文字幕在线观看AV| 极品白嫩福利在线| 亚洲丝袜B诱惑| 殴美综合色88| 欧美日本天堂| 久久久熟女一区| 亚洲欧洲激情| 玖玖爱视频网站| 国产精品农村妇女| 加勒比综合网| 欧美精品久久久久久久丰满| 鸡巴插逼视频| 亚洲aV无码成人在线观看| 中文字幕亚洲在线一区| 色婷婷久久| 天美av在线观看| 看黑人AV不卡| 久草在| 另类专区加勒比| 日韩欧美麻豆| 日本欧美中文字幕| 久久五十路熟女人妻| 中文字幕亚洲热播人妻| 日本岛国黄色网址| 超碰日本97美女人妻人人玩人人爱 | 清清草影| 亚州综| 尤物av网站免费在线播放| 黑人精品XXX一区一二区| 超碰无码加勒比| 久久久久国产一区二| 久热超碰| 中文字幕88av在线| 亚洲久草AV色图| 九九九九久久久久| 秋霞成人做爱| 激情专区综合| 射丝袜高跟鞋99| 欧美日韩国产人人| 97超碰色色| 91精品久久久久五月天精品| 99爱精品| 蜜桃视频一区二区三区| 四虎AV在线播放| 麻豆三极片| 日韩在线观看字幕精品| 欧美亚洲玖玖玖| 九九九九九精品十六| 久久精品无码一区二区三区| 国产成年女人免费视频播放a| 国产激情av女片自拍| 欧美日韩情色一区二区| 久久精品99| 天天插网| 成人av动漫在线观看| 国产嫩草精品A88AV在线| 久久 久久国内精品亚洲| 超碰78| 日亚韩精品视频二区三| 嗯嗯嗯啊啊啊操的我好爽| 欧亚韩国999| 亚洲国产美女久久久久| 中文字幕 码 自拍 视频 区| 啊啊啊啊啊啊啊网址在线观看| 亚洲97超碰| 熟女色综合久久| 日韩AV色图| 天天综合网~91| 欧美激情性爱视频网站| 亚洲春色激情小说| 97操97干| 丰满人妻大屁一区二区| 欧美一区二区成人一卡| 日韩欧洲操屄视频| 欧美制服网站美腿丝袜| 国产91丝袜 在线播放| 国产精品成人福利在线| 亚洲日韩青青草色月| 99999亚洲| 免费在线观看国内色片网站网址 | 亚洲欧美日韩激情不卡| 色色五月婷| 人妻天天爽| 无码精品久久| 91人妻视频在线| 久久免费9| 色丁香五月婷婷| 97超级色碰碰| 岛国黄色短视频| 男人干美女| 国产熟女精品一区二区| 日韩三级一区| 欧美日韩久久精品爱爱| 久草视频分类在线| 欧美桃色网| 亚洲色图日韩精品| 操91| 亚洲免费人妻在| 丝袜天堂网| 操逼操网| 亚洲在线观看| 婷婷丁香六月| 91久久婷婷| 99操逼| 欧美伊人电影| 95人妻爽爽人人做人人澡| 999国产精品999久久久久久| 99热在线播放| 啊啊啊爽爽| 深夜操逼网| 青青在线视频日韩欧美| 欧美大香蕉卡久久| 亚洲国产丝袜熟女av| 久久久久久久九九九九九九| 无码高清操逼| 亚洲吊色| 操比国产| 久久久久久九九九九九| 97色插| 国产精品久久aV| 91久久久视| 色天使亚洲综合在线观看| 亚熟hd视频在线| 嫩草影院在线观看精品| 亚洲天堂久久| 一区二区偷拍拍视频| 大香蕉欧美| 韩国三级三级BD在线| 日韩欧美成人性爱在线| 国产suv精品一区| 婷婷爱五月| 日韩精品中文字幕人妻| 亚洲综合一| 大香蕉丝袜一级片| 亚洲成a人v欧美综合天堂下载| 嗯阿好爽好紧| 午夜影美女日鸡鸡天天视频国产| 91热| 另类av天堂| 亚洲精品一区二区三区在线播放| 日韩欧视频| 97爱欧美| 图片区小说区| 91综合在线| 老女人老91妇女老热女| 亚洲黄色影视| 亚洲天堂五月天国产| 色哟哟av网址| 在线观看AV不卡| www.99中文字幕| 91精品导航| 大香伊人在线一区| 丁香婷婷啪啪| 亚洲性爱电影| 国产免费内射视频| 日日夜夜草草草| 在线不卡视频| 在线观看无码三级少妇| 亚洲色交| 婷婷久草| 美女淫穴| 91美女中出| 国产精品久久久久久照片| 蜜汁欧美| 欧美天堂第二区| 久久色人体| 亚洲日韩美女中文字幕乱| 婷婷五月天激情四射| 韩日巨乳美女免费视频在线观看| 婷婷香蕉欧美在线一区二区三区| 丝袜熟女一区二区三区| 妇女性内射冈站HDWWWCOM| 久久有码视频| 少妇色综合| 极品粉嫩一区二区| 狠狠综合网| 日韩三级天堂在线观看| 精品久久久久久无码| 超碰碰97资源站| 亚洲麻豆18发?| 青青草亚洲一区| 柠檬AV导航| 国产亚洲中文不卡二区| 国产精品美女久久久久久网站| 天天综合网视频91| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 高跟伊人julia ann| 96AV精品| 亚洲国产精品久久久久久久久久| 大伊香蕉在线视频免费| 搞中出久久| 婷婷色综合欧美日韩| 四虎精品亚洲| 国产精品97超碰| 高清肉丝中文无码| 情色五月天久久久| 人妻日日夜夜精品| 一二三四免费视频| 国产 码在线成人网站| 一起草精品人妻| 日韩 欧美 视频 在线 一区| 天天做日日做| 又粗又长又爽在线观看| 91精品久久久久五月天精品 | 福利操逼| 国产精品 久久久精品一牛| 亚洲精品自拍| 桃花色综合影院| 亚洲无码精品AV久久久| 九九九免费视频| 操人妻视频| 玖玖久久久| 欧美一级二级三级| 屁股久久久久久| 亚洲情欲| 国产精品精品系列在线观看| 婷婷久久五月综合激情| 日韩欧无码一区二区三区免费不卡| 天啪| 色综合一本| 国产精品久久aV| 免费成人在线观看91| 日本爽爽爽爽爽爽免费视频| 伊人专区一区二区三区| 国产精品福利视频播放| 久久美女国产| 国产成人自拍视频在线| 五月婷在线| 69精品少妇一区二区三区蜜桃| 国产少妇肉丝在线观看| 日本淫色网| 欧美97在线观看| 亚洲综合骚逼| 91男人综合| 后入国产| 翔田千里无码中出中文字幕| 日本免费专区| 日本福利二区视频| 亚洲 欧美 91| 丁香五月天久久精品视频一区二区三区| 亚洲美女色图| 欧美爱国产综合、| 亚洲精品人体| 99久久精品无码一区二区毛片免费| 黄色激情电影在线观看| 免费看久久久性性| 欧美日韩超碰在线| 东北女人| 精品熟妇视频一区二区| 白丝AV| 久久无码成人| 丁香五月性| 国产专区路线| 久久久久久裸体| 国产精品一区二区三区免费视频| 沈阳熟女高潮对白视频| 国产精品呦一区二区三区| 一区二区娱乐网站| 一本正道久久熟女| 在线色资源| 久久精品人妻一区| 在线观看色视频| 亚欧精品久久久久久久久久久| 亚洲成人精品久久久| 99最新日韩偷拍视频| 欧美综合天天| 国产中文字幕曰本毛片| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 97视频新免费| 久久久久九九九九| 91精品无码人妻系列| 欧美亚洲性爱一区二区| 午夜久久久| 亚洲国产美女久久久久| 欧美日韩岛国大片在线观看| 国产精品制服丝袜中文字幕日韩一区二区三区| 97视频在线免费播放| 天天噜| α√在线| 97看操| 97超碰欧美手机| 丰满人妻无码一区二区三区| 日韩美一区| 蜜桃午夜视频一区二区| 国产又黄又爽又刺激久久久久久| 伊人久久艹| 久草精品一区 | 四季AV一区二区凹凸精品小说| 青青青青青手机视频| 亚洲最新中文字幕免费| 97硬碰| 久草资源在线| 欧美v亚洲v日韩v最新在线二区| 性欧美体内射精| 亚洲天堂加勒比| 天天视频黄网站| 97色诱| 国产女大学生AV| www激情| 天天躁夜夜躁狠狠躁AV| 欧美日产国产在线成人第一区| 爱爱动态120秒| 91欧美www| 亚洲欧美一区二区三区一猛片| 9久久美女首页| 日本人妻最新在线中| 天天综合色| 精品无人区麻豆乱码1区2区图片| 操逼不卡中文字幕| 欧美中文狠| 亚洲成aⅴ人片不卡无码| 久久久久13| 9丨久久九九九| 在线99热| 婷婷8月天青娱乐| 欧美极度丰满熟妇hd| 91男人天堂网| 特级毛片特黄久久免费看| 97日视频| 国产日逼视频| 人人澡人人弄| 日本成人A片免费看| 玖玖资源中文字幕制服丝袜| 亚洲人妻中文在线视频| 熟妇人妻一区二区| 日韩免费一级性爱视频| 伊人国产av| 日韩性爱啪啪视频| 日韩天堂av电影在线观看| 2023天天操夜夜操| 99999精品成人| 男女日B国产| 精品十三区| 91人妻精华帖| 日本好吊色视频| 欧美日韩香蕉| 人妻少妇无码| 五月天激情综合网| 少妇久久久久久久久| 欧美少妇大量自拍视频在线观看| 国产成人在线观看网址| 无码人妻丰满熟妇奶水区毛片| 婷婷av在线中文字幕| 99国产精品免费| 久久毛卡| 91天天综合在线| 人妻久久久久久久久久久久久久久| 国产路线专区| 中文字幕 一区二区 亚洲无码| 韩日色费| 超碰97首页| 强奸a片网| 女人综合网| 欧美午夜色妇色鬼| av网页一区二区三区| 91久热| 色综合91| 国产精品亚洲一级av第二区| 国产后入清纯| 亚洲第一色页夜| 吻戏激情性巴克| 在线观看不卡一区二区三区| 91oumei| 三级特黄60分钟播放| 欧美九九九| 色天堂综合| 亚洲熟妇自偷自拍另欧美| 色综合天天| 欧美狠狠干| 超碰 欧美| 成人一区二区三区四区| 免費人妻夜夜爽天天爽爽一区| 国产99 中文字幕日韩小视频| 亚洲无线码欧洲精品区别| 酒色综合网| 日韩AV噜噜噜一区二区三区四区| 97精品综合久久网| 精品无吗久久| 久久色激情一区二区三区| 色色五月婷| 国产女生在线| 人人妻人射| 国产精品一区二区久久精品| 97超碰中文在线| 日本欧美不卡| 男人天堂2019| 欧美高清91| 日本不卡中文| 色原狠狠天天天| 中文字幕精品亚洲熟女| 国产女人9999| 九九av| 风月影院男女十八禁| 香港日本韩国人妇99www.wccm20| 亚洲人在线成线成人| 熟妇高潮一区二区免费视频| 欧美极品女人的天堂| 人妻啊啊人妻啊| 日韩AV电影网站| 亚洲日韩AV视色| av天天在线观看| 熟女精品一区二区三区| 中文字幕日韩综合| 欧美在线官网| 久久亚洲天天做| 久久久久9999妇女| 美女诱惑在线一区| 韩日自拍| 欧美综合综合| 9久精品| 26uuu成人影片| 高潮的A片激情扒开一区| 99国产在线 精品 视频| 日韩丰满熟妇| 9+1视频网址| 大鸡巴久久久| 天天干天天日天天射黄色片| 91 综合 色| 在线观看啊啊啊啊啊| 欧美色网络| 午夜男女爽爽爽影院视频| 另类小说综合网| 国产第25页在线观看| 五月丁香激情综合网| 九色97| 亚洲综合99999| 麻豆区久久久久亚| 天天综合官网| 中文字幕一区二区免费在线| 久久精品国产亚洲AV成人直播| 99综合网| 亚洲色图美腿丝袜| 精品一区二区2| 欧美精品成人一区二区在线观看 | JULIA一区二区三区在线播放| 床上啊啊啊一区二区三区| 91天美传媒精品| 亚洲日韩资源| 国产精品麻豆成人av| 国产精品自在线发布| 殴美牲| 九九综合网| 大学生美女口爆| 国产亚洲中文不卡二区| 亚州少妇| 麻豆区久久久久亚| 91看黄片| 日本福利社| 国产视频小说| 草草草视频在线免费看| 岛国成人av在线播放网址| 欧美天天谢综合网| 欧美综合色图片| 日本性爱欧美性爱| 操狠狠| 色网亚洲人| 亚洲h片在线免费观看| 天美传媒一二三区永久网站| 亚洲性综合| 男插女青青影院| 九九热精品| 日本天天干天天日一区| 老熟女乱伦一区| 五月花婷婷| 欧美性视频二区三区| 日韩在线欧美精品一区二区| 人妻啊啊人妻啊啊| 久久精品国产97欧美精品亚洲| 丰满美女一级毛片在线播放| 97久久精品亚洲| 日韩综合第八区国产精品| 香蕉久久AⅤ...| 欧美天天综| 日本操逼视频免费| 天天爽夜夜操| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 俺也射| www.99中文字幕| 台湾肥佬网一区二区三区| 蜜桃久久一区二区| 婷婷丁香六月| 97超级久久| 亚洲一区二区性爱电影| 色踪合AV| 亚洲黄色a级片| 是还免费视频1727我| 午夜一级免费毛片| 久操在97| 日韩精品一区二区日韩| 国产美女口爆吞精| 天天色黄色影院天天操| 中国黑人三级片网站上区| 五十路六十路素人熟女| 五十路熟女工口| 亚洲啪啪视频免费| 青娱乐大香蕉| 97精品熟女少妇一区| 色超碰综合| 国产www色在线观看| 99热日| 国产剧情AV不卡在线观看| 啊啊啊啊在线播放| 少妇滛荡视频| 粉嫩av一区二区三区天美传媒 | 精品一区二区2| 欧美性爱另类综合| 最新制服中文第一页| 欧美夜夜狠| 乱伦熟女论坛| 九一精品牛牛一区二区| 国产操逼逼网| 国产黑白丝在线| 长长久久曰曰夜夜成人网| 好属操| 色女综合| 日韩精品中文字幕一| 日本亚欧爱爱| av天天在线观看| 久久这里只精品免费福利| 福利一级版子| 操人91| 伊人天天久久动态图| 日韩欧美丝袜诱惑| 操逼网站地址| 秋霞色色影院| 亚洲色图综合网| 中文字幕日本久久| 天天综合91| 色哟哟1区2区| 大香蕉免费乱伦视频| 99热销国产这里有精品| 欧美大香蕉97| 亚洲成?V人片在线观看福利| 玖草在线视频| 99re在线视频国产| 蜜臀国产AV中文字幕| 在线播放免费av福利片| 日韩欧美~中文字| 午夜呻吟欧美| 被体育老师抱着c到高潮| 欧美狠狠干| 亚州国产成人精品女人久久 | 高清孕妇孕交 交| 天堂在线一区二区| 激情六月天| 欧美极品性爱天天射| 亚洲情色视频| 日本黄色天堂| 欧美熟女激情| 婷婷色综合| 欧美成人一级免费电影| 国产精品高潮久久久无码| 欧亚日本情色| 欧美色日本| 亚洲色人妻综合| 欧美麻豆成人同性GⅤ在线| 美女裸体无遮挡永久免费观看网站 | 八戒午夜福利理论片| 亚洲人妻色图| 青草影院内射高潮| 超碰在线人妻不卡| 91欧美高清| 操逼日韩无码 | 国产综合久| 亚洲偷拍欧美激情| 熟女欧美日韩综合婷婷| 亚洲人成色9999精品久久 | 欧洲色综合| 一级黄碟| 青女在线| 青草香蕉网| 欧美日本久久精品一区 | 色综合av综合久久| 伊人麻豆传媒| 成人青青草原伊人| 麻豆天美AV传媒第一页| 国产妇女精品视频青青草| 96AV久久久| 美女啊啊啊啊pc| 男人的天堂2010| 婷婷激情啪啪| 日本久久99| 一级黄色影片| 开心五月激情网| 国产成人精品日本亚洲语言| 精品v日韩欧美国产| 亚洲成人无码影院| 亚洲色色探花| 成人精品一区二区91毛片不卡| 一个色导综合| 另类小说综合网| 国产精品久久久无码aV去| 国产精品国产亚洲区艳妇糸列| 中文字幕97| 亚洲图片欧美色| 日本一区不卡| 欧美日韩国产成人高清| 国产毛片毛片4p懂色| 天天看天天日天天操| 日韩肏逼视频| 18禁在线视频| 亚洲国产一区二区日韩专区| 日韩熟女乱伦中出| 国产91乱伦| 精品伊人久久久大香线蕉小说| 91精品啪在线观看国产城中村| 亚洲午夜福利在线影院| 日韩性爱播放| 日韩高潮一区| 久久的网站啊啊啊啊啊| 欧美中文狠| 色悠久久久av| 国产后入式在线观看| 亚洲资源站| 国产午夜精品理论片a大结局| 欧美在线永久天堂| 嗯啊抽插大香蕉网页| 在线观看精品国产免费| 婷婷五月天基地| 一区=区三区视频| 日韩丝袜高跟制服在线观看| 91狠狠狠| 一级性爱网| 日本操大逼| 狠狠色丁香| 亚州再线| 久久精品国产97欧美精品亚洲 | 色爱欲亚洲| 欧美综合狠| 日韩一级二级三级免费看完整版| 天天操人人操狠狠插| 99热这里只有精品地址| 97色冈| 亚洲人码13| 亚洲在线91| 日本免费一级AAA大片器| 性一交一乱一交A片久久四色| 国产精品小视频一区二区三区| 国产视频第2页| 欧美激情高清性猛交| 超清福利精品视频在线| 无码自拍SM| 91嫩草欧美| 国产精品日日摸天天碰| 黄片免费视频2019| 三级三久久线久久99久目本WW| 久久国产视频专区一二三 | 全球成人中文在线| 97人人中文网| 91白虎| 午夜一区二区三区国产| 校园春色 男人天堂| 色九九综合AV| 国产偷拍网站| www.99在线| 97精品国产精品免费观看| 国产精品播放| 人人看人人摸人人色| 超碰97资源大奶| 91综合网在线| 1024人妻熟女一区二区三区| 性欧美天天| 亚洲天堂2020| 亚洲图片偷拍视频区| 91美女在线视频| 99re免费| 另类图片五月天| 欧美性Fer办公室秘书| 亚川综合视频| 色婷婷aV一区二区三区麻豆综合| 999热日韩精品| 国产福利小视频高清在线观看| 亚州精品丝袜-不卡成人免费| 日夜精品| 色人久久| 91青青| 亚洲熟女中文字幕在线| 四虎在线观看网站| 日韩av不卡在线看| 久久国产精品,久久国产| 亚洲精品九九九| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 麻豆九九九| 亚洲 暴爽 AV人人爽日日碰| 人妻嗯啊啊在线播放| 久久黄黄黄| aaa一级黄片| 蜜臀va69| 我爱大香蕉| 91欧| 婷婷丁香五月综合| 青青青在线高清视频在线一二三四区| 日本一级二级三级网站| 色天使AV天堂| 日本肉体xxxx裸交| 亚州五月| 激情五月综合| 亚洲国产熟妇综合色专区| 男人夜色天堂ss| 91性片| 亚洲……91| 无码不卡亚洲成?人片| 欧美色图亚洲色图成人在在线| 精品人妻一二三| 青苹果影院男人的天堂| 操操逼视频| 国产第二页| 性做久久久久久免费观看软件| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 极品内射| 国产无马视频| 抽插一区二区视频| 欧日韩不卡视.频| 精品人妻免费观看| 久草在| 国产超碰| 九九九热| 噜噜噜久久亚洲精品色情| 26uuu国产成人综合| 亚洲国产97在线精品一区| 九九热在线视频| 国产一区二区三区高清视频| 亚州中文字幕超碰97| 亚洲色图殴美色图激情乱伦| 啊啊啊啊免费视频| 久久不卡一区二区 | 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 激情五月综合网| 亚洲欧美日韩免费观看| 乱老熟女一区二区三区| 成人日本视频人妻在线| 亚洲开心网| av一区二区三区四区五区久草臀| 5月婷婷6月六月丁香| 天天日天天干天天操| 欧美成人一区二区| 99爱精品| 狠狠中文字幕| 久久中文字幕在线观看| 丰满少妇高潮无码| 婷婷五月综合在线| 免费久久一级毛片大黄| 夜夜嗨一区| 久久99手机免费视频| 看一级黄色视频| 亚洲精品国产无码高清| 国产91 丝袜在线播放| 美女主播色欲91抠b在线播放| 国内三级自拍小视频在线观看| 欧美精品二区视频在线| 中文字幕一品色图| 99国产在线绯色一区| 三级三久久线久久99久目本WW| 久草尤物| 91美| 欧美大色交| 天堂资源欧美| 婷婷激情四射| 亚洲中文国际强奸字幕| 97视频网站| 欧美 日韩第一性色| 蜜屁Av| 精品国产网站| 99在线精品观看99| 久草视频在线视频在线视频在线观看 | 国内毛片热久久思思热| 最新制服中文第一页| 夜夜 中文视频rt| 宅男91视频在线播放| 久/久精品99看9| 国产精品无套内谢| 亚洲啪啪视频免费| 人妻欧美| 无马一区二区| 国产AV线| 99在线啪| julia中文字幕在线观看| 4141514逼喷水三级片| 精品超碰中文在线| 一区二区三区机械有限公司| 国产精品极品美女视频| 亚欧毛片基地国产毛片基地 | 在线观看A啊啊啊| 久久9亚洲| 青青草日本无码| 嗯啊不要在线观看嗯啊| 色吧五月| 五月丁香综合啪啪| 日本护士高潮| HEYZO高无码国产精品227| 青娱乐国产盛宴视频| 少妇一区二区三区高速| 欧洲亚洲国产综合在线| 国产精品不卡一区二区三区av| 国产精品久久久| 夫妻天天操岛国视频| 啊啊啊啊啊啊好多水| 丰满人妻一区二区三区免费| 91性网| 亚洲黑人在线| 亚洲一二三四区| 亚洲色图综合| 欧美成人一级麻豆| 黄色AV免费| A一区片| 制度丝袜99| 亚洲一级特黄大片在线播放91| 中文字幕日韩人妻视频一区二区三区| 免费一级精品啪啪视频| 手机在线中文字幕国产| 浪人综合网| 中文字幕 国产区| 超碰99在线观看| 青青国产精品在线| 中文字幕日产av人| 五十路熟女工口 | 欧美激情另类一区二区| 中国女人内射6XXXXX| 韩国一级做A片免费的|