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

ARTICLE DETAIL

資訊詳情

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

Spring Boot + Vue健身房管理系統(tǒng)實(shí)戰(zhàn):從數(shù)據(jù)庫設(shè)計(jì)到部署上線

Spring Boot + Vue健身房管理系統(tǒng)實(shí)戰(zhàn):從數(shù)據(jù)庫設(shè)計(jì)到部署上線 開門見山說個(gè)事前段時(shí)間幫朋友健身房做的那套管理系統(tǒng)前后大概折騰了一個(gè)多月從數(shù)據(jù)庫設(shè)計(jì)到前后端聯(lián)調(diào)再到部署上線踩的坑比想象中多。這套系統(tǒng)的技術(shù)棧就是標(biāo)題里寫的Spring Boot Vue功能上覆蓋了會(huì)員管理、課程預(yù)約、教練排班、簽到統(tǒng)計(jì)這些健身房日常運(yùn)營的核心場景。寫這篇東西不是為了秀技術(shù)就是想把這個(gè)項(xiàng)目從設(shè)計(jì)到落地的完整思路和實(shí)操過程記錄下來給準(zhǔn)備做類似管理系統(tǒng)的朋友一個(gè)可以抄作業(yè)的參考。這篇文章適合正在做畢業(yè)設(shè)計(jì)、課程設(shè)計(jì)或者想自己搞一套前后端分離項(xiàng)目練手的人讀不管你是后端為主還是前端為主都能找到自己能復(fù)現(xiàn)的部分。1. 項(xiàng)目概述與需求拆解1.1 系統(tǒng)定位與核心功能健身管理系統(tǒng)這名字聽著大但落到實(shí)際業(yè)務(wù)上核心就是解決健身房日常運(yùn)營里這些事誰來上課、誰買了卡、卡什么時(shí)候到期、教練的時(shí)間怎么排、會(huì)員約了課沒來怎么處理。說白了這套系統(tǒng)的本質(zhì)是業(yè)務(wù)管理系統(tǒng)不是電商系統(tǒng)也不是社交平臺(tái)所有功能都圍繞人、卡、課、預(yù)約四個(gè)核心對(duì)象展開。我做的這套系統(tǒng)最終定了四個(gè)角色管理員、前臺(tái)、教練、會(huì)員。管理員負(fù)責(zé)全局配置和統(tǒng)計(jì)報(bào)表前臺(tái)負(fù)責(zé)會(huì)員辦卡和簽到操作教練管理自己的課程和學(xué)員會(huì)員則是通過前端頁面完成注冊、選課、預(yù)約、查看記錄這些自助操作。功能模塊上我把系統(tǒng)拆成了這樣幾塊會(huì)員管理會(huì)員信息的增刪改查、會(huì)員卡類型月卡、季卡、年卡管理、卡到期提醒。課程管理團(tuán)操課程的發(fā)布、課程時(shí)間表、每節(jié)課的可預(yù)約人數(shù)、課程狀態(tài)可預(yù)約/已滿/已結(jié)束。教練管理教練基本信息、教練負(fù)責(zé)的課程列表、教練排班。預(yù)約管理會(huì)員預(yù)約課程、取消預(yù)約、簽到記錄、爽約標(biāo)記。統(tǒng)計(jì)報(bào)表每日/每周的預(yù)約量、簽到率、熱門課程排行。公告通知運(yùn)營公告的發(fā)布與展示。這套系統(tǒng)做下來最核心的業(yè)務(wù)閉環(huán)是會(huì)員注冊 → 查看課程表 → 預(yù)約課程 → 到店簽到 → 教練核銷。把這條鏈路跑通系統(tǒng)的主干就算立住了。1.2 為什么選Spring Boot Vue這套組合技術(shù)選型這個(gè)話題每次都能吵半天。我直接說我的結(jié)論Spring Boot Vue是目前做前后端分離項(xiàng)目最穩(wěn)的組合沒有之一。這不是因?yàn)樗钕冗M(jìn)而是因?yàn)樗钸m合這類中小型業(yè)務(wù)系統(tǒng)的開發(fā)節(jié)奏。后端用Spring Boot理由很實(shí)在。第一生態(tài)成熟MyBatis Plus、Spring Security、Redis這些組件都有非常完善的中文文檔和社區(qū)解決方案踩了坑基本都能搜到答案。第二開發(fā)效率高Spring Boot的自動(dòng)配置和starter機(jī)制把大量繁瑣的配置工作省掉了一個(gè)main方法就能把服務(wù)跑起來對(duì)中小項(xiàng)目和單人開發(fā)尤其友好。第三Java本身的類型系統(tǒng)和Spring的依賴注入讓后期維護(hù)相對(duì)容易一個(gè)項(xiàng)目寫完之后半年再回來看代碼還是能讀懂的。前端用Vue理由同樣直接。Vue的學(xué)習(xí)曲線比React平緩模板語法直觀組件化開發(fā)模式適合這種以表單和表格為主的管理系統(tǒng)頁面。配合Element Plus組件庫后臺(tái)管理類頁面的開發(fā)速度非???。Vue Router負(fù)責(zé)路由跳轉(zhuǎn)Pinia管狀態(tài)Axios發(fā)請(qǐng)求這幾件套組合起來前端開發(fā)的工作量控制得很低。不過這里要提醒一點(diǎn)選Vue3還是Vue2這得想清楚。如果是從零開始的新項(xiàng)目直接上Vue3 Vite Element Plus。Vue2已經(jīng)停止維護(hù)了新項(xiàng)目沒必要再用組合式API都別扭的老版本。我這套系統(tǒng)就是用Vue3寫的后面所有代碼示例都是Vue3的寫法。2. 數(shù)據(jù)庫設(shè)計(jì)與后端核心實(shí)現(xiàn)2.1 數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì)思路數(shù)據(jù)庫是這個(gè)系統(tǒng)的地基表設(shè)計(jì)的好壞直接決定后面寫業(yè)務(wù)代碼的體驗(yàn)。我設(shè)計(jì)表的時(shí)候遵循了一個(gè)原則按業(yè)務(wù)對(duì)象拆表用業(yè)務(wù)ID關(guān)聯(lián)不做冗余字段。核心表一共有六張。會(huì)員表member的字段包括id主鍵、username、passwordBCrypt加密后存儲(chǔ)、real_name、phone、gender、card_type月卡/季卡/年卡、card_start_date、card_end_date、status正常/凍結(jié)、create_time。這里有個(gè)很重要的設(shè)計(jì)細(xì)節(jié)會(huì)員狀態(tài)和卡到期時(shí)間必須獨(dú)立存字段不要通過計(jì)算去判斷因?yàn)槎〞r(shí)任務(wù)和查詢條件都要用到這兩個(gè)字段冗余一點(diǎn)換來查詢方便是值得的。課程表course的字段包括id、course_name、coach_id關(guān)聯(lián)教練表、start_time、end_time、max_people最大預(yù)約人數(shù)、booked_count已預(yù)約人數(shù)、status可預(yù)約/已滿/已結(jié)束、intro課程簡介。預(yù)約人數(shù)的控制是這個(gè)表的關(guān)鍵邏輯我后面在預(yù)約模塊會(huì)詳細(xì)講到并發(fā)控制的問題。預(yù)約表booking的字段包括id、member_id、course_id、booking_time、status已預(yù)約/已簽到/已取消/爽約、check_in_time。這張表是業(yè)務(wù)發(fā)生最頻繁的表所以索引要建好member_id和course_id都要加索引。教練表coach、公告表announcement、簽到表check_in相對(duì)簡單不展開寫了。另外提醒一句如果你用的是MySQL所有表的引擎都用InnoDB字符集用utf8mb4這樣能避免很多中文亂碼和事務(wù)支持的坑。2.2 Spring Boot項(xiàng)目分層結(jié)構(gòu)項(xiàng)目結(jié)構(gòu)上我采用了最標(biāo)準(zhǔn)的四層架構(gòu)controller接口層→ service業(yè)務(wù)層→ mapper數(shù)據(jù)訪問層→ entity實(shí)體類。這是Spring Boot項(xiàng)目最經(jīng)典的分層方式每一層只做自己該做的事職責(zé)邊界清晰后面維護(hù)的時(shí)候找代碼非???。一個(gè)值得參考的包結(jié)構(gòu)是這樣的com.example.fitness ├── controller/ # 接口層 ├── service/ # 業(yè)務(wù)層 │ ├── impl/ ├── mapper/ # MyBatis數(shù)據(jù)訪問接口 ├── entity/ # 數(shù)據(jù)庫實(shí)體 ├── dto/ # 請(qǐng)求/響應(yīng)對(duì)象 ├── config/ # 配置類跨域、攔截器、WebMvc等 ├── common/ # 統(tǒng)一返回結(jié)果、異常處理、工具類 ├── security/ # JWT鑒權(quán)相關(guān) └── FitnessApplication.java分層設(shè)計(jì)有個(gè)很容易被忽略的坑很多人在service層直接返回entity實(shí)體這是不對(duì)的。實(shí)體類是數(shù)據(jù)庫的映射不該直接把數(shù)據(jù)庫字段暴露給前端。我習(xí)慣單獨(dú)建一個(gè)dto包接口的入?yún)⒑统鰠⒍加胐to對(duì)象比如返回會(huì)員列表的時(shí)候用MemberDTO把必要的字段拼裝好再返回。這樣做的最大好處是數(shù)據(jù)庫表結(jié)構(gòu)變化時(shí)接口的返回結(jié)構(gòu)可以保持穩(wěn)定前端不會(huì)因?yàn)楹蠖烁牧吮斫Y(jié)構(gòu)就崩。再說說統(tǒng)一返回結(jié)果。我建了一個(gè)Result類固定結(jié)構(gòu)是{code: 200, message: success, data: {}}所有接口都返回這個(gè)格式。這樣前端攔截器只需要判斷code就知道請(qǐng)求是否成功不用每個(gè)接口單獨(dú)去解析。這個(gè)習(xí)慣看著簡單但實(shí)際用起來非常爽尤其是前后端聯(lián)調(diào)的時(shí)候不會(huì)出現(xiàn)這個(gè)接口為什么返回的字段名不一樣這種問題。2.3 JWT登錄鑒權(quán)的實(shí)現(xiàn)方式管理系統(tǒng)里登錄鑒權(quán)必須做不做的話任何人都能調(diào)用接口把會(huì)員數(shù)據(jù)刪了。我用的方案是JWTJSON Web Token。這里說下整體設(shè)計(jì)流程。用戶登錄成功后后端生成一個(gè)有效期為2小時(shí)的token返回給前端。前端把token存在localStorage里每次請(qǐng)求Axios攔截器把它加到請(qǐng)求頭。后端寫了一個(gè)攔截器攔下所有非登錄接口的請(qǐng)求解析token并把用戶信息放到ThreadLocal里這樣后面每次業(yè)務(wù)操作都能拿到當(dāng)前登錄人的信息。生成token的核心代碼大概是這樣的String token Jwts.builder() .setSubject(userId.toString()) .claim(role, role) .setExpiration(new Date(System.currentTimeMillis() 7200000)) .signWith(SignatureAlgorithm.HS256, secretKey) .compact();攔截器里解析token的過程就不貼完整代碼了有一個(gè)經(jīng)驗(yàn)值得分享解析token異常要分類型處理。token過期和token被篡改返回的錯(cuò)誤信息不應(yīng)該一樣前者提示登錄已過期請(qǐng)重新登錄并跳轉(zhuǎn)登錄頁后者提示登錄狀態(tài)異常并清理本地存儲(chǔ)。這個(gè)細(xì)節(jié)直接影響用戶體驗(yàn)我見過很多項(xiàng)目在這塊做得比較粗糙用戶被卡在一個(gè)沒有明確提示的報(bào)錯(cuò)里。權(quán)限控制方面我用的是角色判斷。接口注解上加一個(gè)自定義的RequireRole(admin)攔截器里判斷當(dāng)前登錄人的角色是否有權(quán)限訪問。不需要引入Spring Security這種重框架因?yàn)橄到y(tǒng)角色只有四種簡單的角色判斷足夠用引入重框架反而增加學(xué)習(xí)和調(diào)試成本。3. 前端Vue頁面設(shè)計(jì)與API對(duì)接3.1 前端技術(shù)棧與目錄結(jié)構(gòu)前端這邊用的組合是Vue3 Vite Vue Router Pinia Axios Element Plus。沒有用TypeScript原因很實(shí)際團(tuán)隊(duì)和后續(xù)接手的人都更熟JavaScript而且這套系統(tǒng)的類型復(fù)雜度不高TS的收益有限。不過如果你打算長期維護(hù)并且團(tuán)隊(duì)水平可以上TS是加分項(xiàng)。目錄結(jié)構(gòu)按功能劃分推薦這樣組織src/ ├── api/ # 接口請(qǐng)求定義 ├── assets/ # 靜態(tài)資源 ├── components/ # 公共組件 ├── router/ # 路由配置 ├── store/ # 全局狀態(tài)Pinia ├── utils/ # 工具函數(shù)request封裝等 ├── views/ # 頁面組件 │ ├── member/ # 會(huì)員管理 │ ├── course/ # 課程管理 │ ├── booking/ # 預(yù)約管理 │ ├── dashboard/ # 統(tǒng)計(jì)報(bào)表 │ └── login.vue # 登錄頁 └── App.vueapi目錄下每個(gè)模塊一個(gè)文件比如member.js、course.js、booking.js每個(gè)文件導(dǎo)出對(duì)應(yīng)模塊的接口函數(shù)。這樣做的好處是頁面組件里不直接寫請(qǐng)求URL所有接口統(tǒng)一定義后端接口路徑變了只需要改一個(gè)文件。3.2 Axios封裝的關(guān)鍵點(diǎn)Axios封裝是前端項(xiàng)目的重中之重代碼量不大但設(shè)計(jì)得好不好直接決定開發(fā)效率和聯(lián)調(diào)體驗(yàn)。我的request工具類做了三件事。第一請(qǐng)求攔截器從localStorage里取token有就加到請(qǐng)求頭的Authorization字段沒有就放行。第二響應(yīng)攔截器解包統(tǒng)一返回結(jié)果里的codecode為200就返回data部分業(yè)務(wù)代碼里直接拿到業(yè)務(wù)數(shù)據(jù)不用每個(gè)頁面再解一層。code為401就清空本地存儲(chǔ)、跳轉(zhuǎn)登錄頁。第三錯(cuò)誤統(tǒng)一彈提示網(wǎng)絡(luò)錯(cuò)誤、服務(wù)器錯(cuò)誤統(tǒng)一用Element Plus的Message組件提示頁面里不做重復(fù)的錯(cuò)誤處理邏輯。// utils/request.js 核心結(jié)構(gòu) import axios from axios import { ElMessage } from element-plus const service axios.create({ baseURL: /api, timeout: 10000 }) service.interceptors.request.use(config { const token localStorage.getItem(token) if (token) { config.headers[Authorization] Bearer token } return config }) service.interceptors.response.use( response { const res response.data if (res.code 200) { return res.data } if (res.code 401) { localStorage.clear() window.location.href /login } ElMessage.error(res.message) return Promise.reject(new Error(res.message)) }, error { ElMessage.error(網(wǎng)絡(luò)請(qǐng)求失敗請(qǐng)稍后重試) return Promise.reject(error) } ) export default service這樣封裝完后頁面里調(diào)接口就是非常簡潔的寫法比如會(huì)員列表import { listMember } from /api/member const getList async () { const data await listMember({ page: currentPage.value, size: 10 }) tableData.value data.records total.value data.total }3.3 路由守衛(wèi)與權(quán)限控制路由層面我用Vue Router的全局前置守衛(wèi)做登錄攔截。邏輯很簡單訪問任何一個(gè)頁面之前檢查有沒有token沒有就重定向到登錄頁。登錄之后就放行。管理員和會(huì)員看到的頁面不同這件事我用了動(dòng)態(tài)路由的思路處理路由表分成兩部分公共路由直接注冊權(quán)限路由在登錄后根據(jù)角色動(dòng)態(tài)添加。動(dòng)態(tài)路由這個(gè)功能在管理系統(tǒng)里很實(shí)用但實(shí)現(xiàn)起來有個(gè)坑路由動(dòng)態(tài)添加后退出登錄再切換賬號(hào)之前添加的路由不會(huì)自動(dòng)清除。解決方法是退出登錄時(shí)調(diào)用router.options.routes重置路由或者直接用重定向刷新頁面讓路由表重建。我踩過這個(gè)坑用后者的方式解決了簡單可靠。Pinia在這里主要存兩類全局信息當(dāng)前登錄用戶的基本信息用戶名、角色、頭像和菜單的展開收起狀態(tài)。用戶信息在登錄接口返回后存入store退出登錄時(shí)清空。整個(gè)項(xiàng)目用到的全局狀態(tài)不多Pinia的模塊拆成user.js和app.js兩個(gè)就夠了。4. 核心模塊實(shí)操課程預(yù)約全流程實(shí)現(xiàn)4.1 業(yè)務(wù)規(guī)則與流程分析課程預(yù)約是這套系統(tǒng)里業(yè)務(wù)邏輯最復(fù)雜的模塊也是并發(fā)壓力最大的模塊。如果預(yù)約功能做不好整個(gè)系統(tǒng)在真實(shí)場景下是扛不住的。預(yù)約的業(yè)務(wù)規(guī)則我梳理出了四條會(huì)員必須登錄且會(huì)員卡未到期才能預(yù)約。同一節(jié)課一個(gè)會(huì)員只能預(yù)約一次。課程狀態(tài)為可預(yù)約才能被預(yù)約已滿或已結(jié)束不能預(yù)約。取消預(yù)約后該會(huì)員可以重新預(yù)約同一節(jié)課如果還有名額。整個(gè)流程文字描述是這樣會(huì)員進(jìn)入課程列表頁看到所有發(fā)布日期在當(dāng)天及之后的課程每門課程卡片上顯示剩余名額。點(diǎn)擊預(yù)約按鈕前端彈出確認(rèn)框確認(rèn)后請(qǐng)求后端預(yù)約接口。后端校驗(yàn)通過后寫入預(yù)約記錄同時(shí)課程表的已預(yù)約人數(shù)加一。頁面刷新后課程的剩余名額減少。4.2 后端接口實(shí)現(xiàn)與并發(fā)控制預(yù)約接口的URL是POST /api/booking請(qǐng)求體參數(shù)是{courseId: 1, memberId: 5}。Service層的bookCourse方法邏輯分五步查會(huì)員卡狀態(tài)、查課程當(dāng)前狀態(tài)、查是否已預(yù)約、判斷是否約滿、插入預(yù)約記錄并更新已約人數(shù)。這里最大的坑是并發(fā)問題兩個(gè)會(huì)員同時(shí)點(diǎn)預(yù)約恰好都查到了剩余名額1個(gè)然后都執(zhí)行插入最后一節(jié)課超員了。解決辦法我用了數(shù)據(jù)庫層面的事務(wù)加悲觀鎖。查詢課程記錄時(shí)加上SELECT ... FOR UPDATE行級(jí)鎖鎖住課程行這樣同一時(shí)間只有一個(gè)請(qǐng)求能執(zhí)行后面的預(yù)約邏輯。Transactional public void bookCourse(Long memberId, Long courseId) { Member member memberMapper.selectById(memberId); if (member null || member.getStatus() ! 1 || member.getCardEndDate().before(new Date())) { throw new BizException(會(huì)員卡狀態(tài)異常無法預(yù)約); } Course course courseMapper.selectByIdForUpdate(courseId); if (course null || course.getStatus() ! 0) { throw new BizException(該課程當(dāng)前不可預(yù)約); } int count bookingMapper.countByMemberAndCourse(memberId, courseId, 已預(yù)約); if (count 0) { throw new BizException(您已預(yù)約該課程請(qǐng)勿重復(fù)預(yù)約); } if (course.getBookedCount() course.getMaxPeople()) { throw new BizException(該課程名額已滿); } Booking booking new Booking(); booking.setMemberId(memberId); booking.setCourseId(courseId); booking.setStatus(已預(yù)約); booking.setBookingTime(new Date()); bookingMapper.insert(booking); course.setBookedCount(course.getBookedCount() 1); courseMapper.updateById(course); }這段代碼有三個(gè)要點(diǎn)。一是Transactional必須加事務(wù)保證插入預(yù)約記錄和更新課程人數(shù)是原子操作任何一個(gè)失敗都會(huì)回滾。二是selectByIdForUpdate這個(gè)方法是自己在Mapper里寫的加了FOR UPDATE關(guān)鍵字不是MyBatis Plus自動(dòng)生成的。三是業(yè)務(wù)異常要主動(dòng)拋出來讓全局異常處理器統(tǒng)一包裝成Result返回不要在Service里自己try-catch吞掉。4.3 前端頁面交互實(shí)現(xiàn)前端課程列表頁我用了Element Plus的Card組件展示課程卡片每張卡片顯示課程名、教練、時(shí)間、剩余名額底部是預(yù)約按鈕。剩余名額為0時(shí)按鈕禁用已經(jīng)預(yù)約過的課程按鈕文案變成已預(yù)約且不可再點(diǎn)。預(yù)約按鈕的點(diǎn)擊處理邏輯是const handleBook async (courseId) { try { await createBooking({ memberId: userStore.userInfo.id, courseId }) ElMessage.success(預(yù)約成功) await getCourseList() // 刷新列表 } catch (e) { // 錯(cuò)誤提示已經(jīng)在攔截器里統(tǒng)一處理了 } }這里有個(gè)易踩的坑預(yù)約成功后一定要刷新課程列表但不要整頁刷新調(diào)用getCourseList重新拉數(shù)據(jù)就好。因?yàn)檎n程卡片上的剩余名額是列表數(shù)據(jù)里的字段不重新拉數(shù)據(jù)的話前端顯示的剩余名額還是之前的用戶連續(xù)預(yù)約兩節(jié)不同的課會(huì)看到名額不對(duì)。曾經(jīng)為了省事直接用location.reload()結(jié)果彈窗消失、頁面閃爍體驗(yàn)非常差。4.4 聯(lián)調(diào)階段幾個(gè)容易踩的坑前后端聯(lián)調(diào)是整個(gè)過程里最容易出問題的時(shí)候我發(fā)現(xiàn)的問題多數(shù)集中在三個(gè)地方。第一是日期格式。后端LocalDateTime默認(rèn)序列化出來的格式是2024-11-20T14:30:00帶一個(gè)T前端如果想顯示成2024-11-20 14:30要么后端統(tǒng)一配置Jackson的日期格式要么前端做格式化處理。我建議后端直接配置全局生效省得前端每處都處理。第二是字段命名風(fēng)格。后端Java習(xí)慣用駝峰命名createTime數(shù)據(jù)庫習(xí)慣用下劃線create_timeMyBatis Plus開了駝峰映射之后沒問題。但前端聯(lián)調(diào)時(shí)看返回的JSON字段是駝峰還是下劃線必須前后端統(tǒng)一確認(rèn)好不然就會(huì)出現(xiàn)頁面拿到的是undefined這種經(jīng)典問題。第三是跨域。前后端分離開發(fā)模式下前端跑在5173端口后端跑在8080端口必然觸發(fā)跨域。我在后端寫了一個(gè)CorsConfig配置類允許指定的前端源地址跨域。上線部署后跨域配置還不能刪因?yàn)镹ginx反向代理的配置方式不同這步我在后面部署章節(jié)專門講。5. 部署上線與常見問題排查5.1 前后端打包與部署方案系統(tǒng)開發(fā)完成后部署上線這里分享一套我驗(yàn)證過很多次的方案。前端用Nginx做靜態(tài)文件服務(wù)器和反向代理后端的Spring Boot應(yīng)用打成jar包直接跑。前端打包執(zhí)行npm run build打包產(chǎn)物在dist目錄。把dist目錄上傳到服務(wù)器任意位置然后配置Nginx。后端打包執(zhí)行mvn clean package -DskipTests生成jar包后用nohup java -jar fitness-system.jar logs/fitness.log 21 啟動(dòng)。生產(chǎn)環(huán)境建議用systemd管理進(jìn)程這樣重啟方便還能開機(jī)自啟。Nginx配置有兩個(gè)關(guān)鍵點(diǎn)一是前端history路由模式必須配置try_files不然刷新頁面會(huì)404二是/api路徑要反向代理到后端端口。server { listen 80; server_name your-domain.com; root /www/fitness-front; index index.html; location / { try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }try_files $uri $uri/ /index.html這行是必須的。Vue Router默認(rèn)使用history模式URL是/member/list這種真實(shí)路徑刷新時(shí)瀏覽器會(huì)向Nginx發(fā)起這個(gè)路徑的請(qǐng)求Nginx找不到對(duì)應(yīng)的靜態(tài)文件就會(huì)404。try_files把所有未知路徑回退到index.html再由前端路由接管頁面就能正常顯示了。5.2 常見問題速查表做這套系統(tǒng)的過程中我整理了一張問題排查表都是實(shí)際遇到過的按照從高頻到低頻排列。問題現(xiàn)象可能原因解決方法前端請(qǐng)求接口報(bào)403/跨域Nginx沒配代理或后端跨域配置丟失檢查Nginx的location /api配置確認(rèn)proxy_pass指向后端刷新頁面404路由history模式缺少try_files配置在Nginx location / 里加try_files $uri $uri/ /index.html預(yù)約接口數(shù)據(jù)不一致并發(fā)場景下沒有用悲觀鎖或事務(wù)確認(rèn)查詢課程用了FOR UPDATE鎖方法加了Transactional中文亂碼數(shù)據(jù)庫字符集不是utf8mb4ALTER TABLE xxx CONVERT TO CHARACTER SET utf8mb4登錄后馬上失效token過期時(shí)間太短或時(shí)區(qū)問題檢查JWT的expiration時(shí)間和服務(wù)器時(shí)間是否一致打包后接口地址不對(duì)前端寫死了localhost用環(huán)境變量配置接口baseURL打包時(shí)注入正確的API地址上傳的圖片顯示不了靜態(tài)資源路徑配置問題把上傳目錄配置到Nginx靜態(tài)資源路徑或用OSS存儲(chǔ)排查問題的思路也很重要。我習(xí)慣先把問題分成三類前端問題、后端問題、部署環(huán)境問題。前端問題先看瀏覽器開發(fā)者工具的Network面板接口請(qǐng)求沒發(fā)出去就是前端問題發(fā)出去沒響應(yīng)就是后端或代理問題。后端問題看日志Spring Boot的日志會(huì)打印完整的異常棧和SQL語句95%的問題看日志就能定位。部署環(huán)境問題基本集中在端口沒開、路徑不對(duì)、Nginx配置錯(cuò)誤這三類。5.3 安全加固的幾個(gè)必做項(xiàng)剛部署上線時(shí)系統(tǒng)安全性是沒法用的暴露在外網(wǎng)必須做幾件事。密碼存儲(chǔ)必須用BCrypt就算數(shù)據(jù)庫被拖走明文密碼也不能泄露。接口層面要防SQL注入MyBatis Plus的#{}預(yù)編譯機(jī)制能擋住大部分注入攻擊但還是不要用拼接SQL的方式寫復(fù)雜動(dòng)態(tài)查詢。管理后臺(tái)登錄接口要加驗(yàn)證碼。最初做系統(tǒng)時(shí)沒加驗(yàn)證碼結(jié)果上線的第二天就被掃到登錄接口開始密碼暴力嘗試。后來我引入了Hutool的驗(yàn)證碼工具庫用后端生成驗(yàn)證碼圖片登錄時(shí)校驗(yàn)驗(yàn)證碼。這步雖然增加了一點(diǎn)用戶體驗(yàn)成本但在公網(wǎng)環(huán)境下是必須的。運(yùn)維層面也有經(jīng)驗(yàn)Spring Boot的actuator接口默認(rèn)暴露了健康檢查、環(huán)境信息等端點(diǎn)如果你引入了這個(gè)依賴卻沒配置權(quán)限等于把服務(wù)器的一部分信息免費(fèi)送給別人看。生產(chǎn)環(huán)境配置里要顯式關(guān)閉這些端點(diǎn)只保留health一個(gè)就夠了。6. 寫在最后的實(shí)操體會(huì)整個(gè)健身管理系統(tǒng)做下來我最深的體會(huì)是這類管理系統(tǒng)的核心難點(diǎn)不在技術(shù),而在業(yè)務(wù)邏輯的嚴(yán)謹(jǐn)性。預(yù)約模塊的并發(fā)控制、會(huì)員卡到期時(shí)間的比較、狀態(tài)流轉(zhuǎn)的邊界條件這些看似不起眼的地方才是真正考驗(yàn)工程師功力的地方。技術(shù)棧Spring Boot和Vue只是工具把業(yè)務(wù)想清楚才是根本。如果現(xiàn)在重新讓我做一遍我會(huì)先花更多時(shí)間畫清楚狀態(tài)流轉(zhuǎn)圖而不是急著寫代碼。另外想提一個(gè)后續(xù)可以擴(kuò)展的方向這套系統(tǒng)目前只做了Web端如果健身房需要完全可以把前端換成微信小程序后端接口只要稍微調(diào)整鑒權(quán)方式就能復(fù)用基本不需要重寫業(yè)務(wù)邏輯。這個(gè)項(xiàng)目本身的價(jià)值不在于代碼量有多大而在于把一套真實(shí)業(yè)務(wù)場景完整落地了從需求到上線整個(gè)鏈路都走通了這個(gè)經(jīng)驗(yàn)比代碼本身值錢。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
午夜偷拍久久熟女| 人人妻人人爽人人精品| 欧美日韩性爱无码| 淫荡网址| 日本五区不卡| 吉田爱美AV在线| 熟女人妻一区二区三区| 草草电影院| 精品九九九九九九九九九| 91干熟女| www.99中文字幕| 三四中文字幕| 欧美九九九| 91国产美女丝袜足交精品视频| 爱射综合| 91久久婷婷| 人人操,操人人| 翔田千里AⅤHD无码| 女人天堂av在线播放| 碰超人人在线一区二区三区| 亚州精品丝袜-不卡成人免费| 人妻aa| 国产无码精品无码| 91内射| 日本大香蕉综合网| 91亚洲欧美激情| 亚洲色图 91| 啊啊啊不要啊啊受不了了视频在线 | 91bbbbbb| 韩美日操逼| 午夜小电影在线插入淫高潮| 中文乱码字字幕在线第5页| 青久久| 97国产精品久久久久| 伊人玖玖网| 自拍二页| 超碰色美女| 男人天堂无码| 中文字幕第95页| 亚洲资源网| 天天色怡春院| 91日产桃蜜| 天堂亚洲精品| 97超碰欧美中文字幕| 人妻久久| 91天天综合网| 人人摸.人人色| 久久av无码| 亚洲情色 欧美| 熟妇激情| 国产成人自拍视频视频| 丰满美女一级毛片在线播放| 亚洲啪啪视频免费| 青青青国产手线观看视频2| 天天看天天日天天操| 亚洲色图 欧美| 97免费视频在线| BBBBB97COM| 偷拍盗拍亚洲色图图片 | 两女互慰AV高潮喷水在线观看| 亚洲国产成人精品久久久国产成人一区二区 | 欧美国产婷婷久久| 欧美人黑A片无码免视费| 亚洲成人ab| 国产黄色剧情影片麻豆免费播放| 2021国产成人精品久久| 亚洲无码偷拍| 日韩国产乱子伦App| 男人高清无码一区二区| 免费综合亚洲中文| 午夜天堂精品久久| 日本精品五区| 一个国产在线综合网站| 免费观看国产小粉嫩喷水精品午| 欧美 亚洲 偷拍自拍| 亚欧国产无码精品在线| 婷婷成人久久久精品| 怡红院怡春院| 屁股久久久久久久久| 欧美亚洲清纯| 亚洲图片在线| 樱花蜜乳av| 久久亚洲AV成人精品无码| 国产吞精a级片激情电影| 婷婷色色网| 一区中文字幕二区日韩| 欧美78P| 欧美v亚洲v综合v国产v妖精| 色香色欲天天综合网天天来吧 | 91网站18在线观看| 97鸡把在线视频| 色臀AV| 自拍偷拍亚洲熟女妇人精品| 高清无码国产亚洲| 97超碰中文| 天天拍夜夜| 人人看人人插| 日韩乱码Av| 欧美视频激情久久久久久| 蜜桃传媒视频第一区入口在线看| 网友自拍第一页| 亚洲无码太久| 久久精品国产精品亚洲艾通辽熟妇| 日本裸体久久色噜噜| 久久久久亚洲精品| 啊啊啊啊啊啊好多水| 99re69综合| 干美女人妻| 日韩性爱啪啪视频| 99爱在线视频| 久久久久久久综合,国产| 亚洲在线91| 日韩性爱毛片操骚逼| 日韩在线视频1234| 伦理第一页| 午夜偷拍久久熟女| 日日橹狠狠爱欧美超碰| 亚洲成a人v欧美综合天堂下载| 尤物一级在线免费观看| 亚洲日韩熟女人妻高清在线| 伊人网青青| 久久xx| 91在线丝袜| 亚洲日本激情| 日韩美女久久一区二区三区| 四虎午夜影院| 99久在线精品99re8| 国产深喉| 人人爱人人操人人性| 青春草A| 日本黄大片在线观看视频| 激情五月婷婷| 91操熟女| 亚州操操穴网| 囯产精品久久久久久久久久梁医生| 国产伦精品一区二区三区在线观| 精品女同一区| 激情综合网五月婷婷| 少妇高潮喷水无套久久久久久| 美国美女AV在线| 欧美激情 亚洲色图| 亚洲啪啪视频一区二区| 久久久久久免费电影| 黄色性爱网网| 51一区二区三区| 国产视频一区二区免费| 操熟女91| 亚洲成人一二三区| 秋霞网—男女啪啪亚洲免费体验区 | 97色论| 国产精品午夜福利亚洲综合网| 香蕉一区二区三区在线视频| 国产真实子伦对白| 九九自拍伦理| 老熟女91av| 成人精品无码| 欧美亚洲美少妇一区二区| 精品高清一区二区三区三州| 91亚洲丝袜熟女| 日韩人妻一区二区精品| 中文字幕视频在线观看| 宅男午夜在线视频| 人妻日日干| 夜夜精品视频一区二区| 久久久久久久少妇| 亚洲成人一区二区精品| 我要色综合网站| 97色伦欧美| 国产亚洲福利第一页丝袜| 性生活无遮挡纯毛片在线看| 日韩视频啪啪| 久久一二三四| 91九色丰满高潮| 五月婷婷激情网| 老司机福利青青草| 久久是精品| 五月天色综合| 亚洲国产成人精品999| 97欧美色| 嗯嗯嗯啊啊啊操的我好爽| 国产网红精品| 97手机日韩| 九九英色视频| www久久99| 精品国产三级av韩国在线| 超碰在97| 成人日本精品九区| 99热超碰| 超碰精品在线| 欧美性巨大╳╳╳╳╳高跟鞋| av影院十区| 91精品人妻一区二区三区蜜桃臀| 国产亚洲综合欧美一区| 熟女人妻一区二区三区| 级做a爱无码性色永久免费| 综合网97| 亚洲九九爱| 九一亚洲国产免费| 久久九九99| 精品久久久久av影院| 丰满的三级少妇欧美久久久| 欧美偷拍区| 欧美性性性| 91美女高潮| 亚洲码和欧洲精品激情系列| 久久一留热品黄| 婷婷五月色| 欧美劲爆视频一区二区| 亚洲色色探花| 丰满高潮18xxxx| 亚洲图片欧美| 人妻少妇久久中文字幕一区二区 麻豆| 超碰偷拍| 久久有码视频| 国产欧美另类久久久精品课程| 久久精品国产精品| 国产精品动态一区二区三区四四| 久草精品一区 | 青青国产在线拍揄自揄拍| 色综合久久久久| 欧美丝袜制服久久| 日本乱人伦片中文三区| 91美女视频在线观看| 青青草综合在线| 色淫网站优优视频| 一二三区视频在线观看| 欧美色蜜桃97| 蜜臀网 一区| 精品丰满熟妇人妻一区| 久久久精品久久| 亚洲限制级| 97露脸精品丝袜| 麻豆天美传媒在线视频天堂| 蜜屁Av| 日韩天天本| 色妇91| 精人妻无码一区二区三区伊人直播| 国产免费久久精品99re韩国| 日韩中文字幕宗合在线| 欧美中字不卡| 亚州性9| 一级一性爱免费视频| 激情五月天网站| 欧美性特| 九九九九免费视频| 婷婷爽人人婷婷爽视频| 日韩无码三级影院| 超碰av在线| 色色色色色色色色色色色色色色综合 | 口爆综合网| 天天影视网综合少妇| 国产自产91区13区| 4虎在线视频| 啊啊在线| 免费观看成人www精品视频| 美日韩男女操屄视频| 操www| 日韩欧美经典在线观看| 精品一区二区三区蜜桃臀赵总 | 久久99人妖视频国产| 伊人99热| 国产不卡中文字幕免费avi| 2026国产精品视频| 精品性爱| 去干网最新版| 欧中日成人免费影视| 老熟妇一区二区三区| 欧美激情 亚洲色图| 精品国产Av无码久久久伦古装| 日本一区二区三区午夜观看| 人妻久久久| 好看的91视频| 久热精品在线| 久草视频观看视频在线| 97精品国产97久久久久久| 岛国1区2区3区在线观看| 精品v日韩欧美国产| 色一射色一射| 91精品网站| 欧美色性爱| 久久人妻四季| 无码9区| 午夜国产成人福利视频| 色操逼网| 超碰免费在线| 伊人亚洲综合| 乱伦a片视频| 日韩在线视频1234| 亚洲成人AB| 蜜乳AV免费观看| 五月综合婷婷久久网站| 四虎国产成人精品免费一女五男| 男同专区一区二区三区在线| 日韩在线观看字幕精品| m欧洲一级午老| 国产99热| 国产成人手机视频激情| 97超碰精品成| 亚洲好看强奸乱伦| 青青色综合| 一级二级在线观看| 九九久久精品| 久久9免费视频| 性在久久久久久| 蜜臀亚洲中文| 九九九热| 久操B网| 性感美女91影视| 日本高清有码网址视频| 亚洲综合伊人| 探花精品视频| 久夜操| 超碰av在线| 九九亚洲色在线观看| av网站在线观看了| 中文字幕免费看| 精品性爱无码在线播放| 女生看匆91网站| 亚洲AV无码乱码在线观看性色| 神马久久69| 人人人摸人人| 蜜臀av网址| 色在线亚洲视频www| 青草香蕉网| 天天躁日日躁成人字幕aⅴ| 97爱爱影院| 狠狠操官网| 欧美白嫩女HD| 亚洲二区精品在线观看| 91女色| 大香蕉亚洲中文| 久操视频在线观看| 99青青草国产视频| 日本一级二级三级网站| 亚洲色婷婷久久久综合日本| 曰韩精品九九无码| 亚洲欧洲激情卡通另类文学四射小说网站| 日本在线一二 | 黄色av网站在线播放| 国产农村妇女精品一二区| 久久久精品91八戒| 亚洲成人AB| 色老牛| 亚洲五码一区二区三区| 亚洲色图欧洲| 蜜臀色乳| 丁香五月久久| 久久天天艹| 好爽要喷了| 久精品无码av一区二免费国产在线观看 | 97碰| 欧美人妻一区二区| 自拍盗摄一区| 色婷婷五月天| 国产av强奸美女| 97亚洲综合在线| 99精品热| 久久久婷婷| 亚洲天天做日日做天天谢日日| 大香蕉92| 91骚妇| 婷婷在线视频| 日本激情免费大片| 欧美不卡五十路| 女人18精品一区二区三区| 久久久久久久 九九九九九九九| 岛国视频一二三区| 久久伊人最新网址视频| 日本不卡一二区| 欧美亚洲AN| 亚州色交| 亚洲欧美国产日本一区二区三区| 免费公开人人操| 欧美日韩在线小说 | 精品人妻一区二区三区四区| 欧亚日韩三区| 久久精9| 夜夜操天| 亚洲色图大香| 夜夜操狠狠操| 5月婷婷6月六月丁香| 熟女这里只有精品6| 国产激情视频一区区三区| 久久噜噜噜精品国产亚洲综合| 无码欧美有限公司| 99re69| 无码91| 亚洲宅男天堂| 婷婷亚洲天堂| 25国产精品免费观看| 激情五月天社区| 青青在线视频日韩欧美| 亚洲成人贴图| 男人久久天堂| 久久一区二区三区四区五区| 亚洲色电影在线| 欧美综合亚洲| 疯操AV| 97欧美久久久久久久| 成人久久久精品| 大香蕉啪啪啪啪在线| 91九九九逼| 中文字幕三四区| 亚洲色交| AAAA级日本片免费视频| 日韩免费a级毛片无码a∨| 天天干18禁| 91bbbbbb| 五月丁香激情四射| 人人么人人操| 色官网色综合| 18禁中文字幕| 亚洲精品视频在线播放| 婷婷六月色| 久超碰在| 亚洲综合另类欧美久久久| 男人干美女| 97超碰亚洲| 青青青草伊人精品| 精品无码一区二区三区| 欧美熟妇精品黑人巨大91| 欧美综合色图网| 人妻少妇精品视频一区二区三区| 亚洲无992tv| 午夜小电影在线插入淫高潮| 国产av强奸美女| 日韩一级成人毛片免费观看| 人妻啊啊人妻啊啊| 久久久∴| 久久春色| 久久久久亚洲?V片无码V| A片 AV一级在线播放观看免费| 欧亚免费视频| 久久九七| 熟妇女伦乱视频| 日韩av免费一级电影| 日日噜噜夜夜狠狠视频无| 天天色综亚洲91污| 熟女人妻av在线资源,黄色的资源| 97露脸精品丝袜| 久久久性少妇| 日韩免费高清大片在线| 久久九九网| 欧美熟女激情| 91熟女视频网| 国产精品日韩在线一区| 伊人久久88国产女| 老女人碰碰在线碰碰视频| chaopen97久久| 亚洲 欧美 精品专区 极品| 久久亚洲AV成人精品无码| 水澄无码AV| 亚洲色人妻综合| 精品二999| 亚洲爽图| 中文字幕黄色片| 国产精品 午夜福利| 成人性交午夜免费片| 日本性爰一道本| 小少妇| 亚洲成人在线资源| 午夜120视频在线观看| 午夜免费视频1000| av橘色网站| 欧美午夜视频免费观看| 天天操天天射青青草| 国产一区二区精品久久久不卡蜜臀| 操B视频日韩无码| 天天爽爽爽爽| 9久久精品| 九九久久99| 啊啊啊啊啊好舒服视频| 厕所偷拍在线| 日本视频在线中文字幕| 久久婷综合| 天天操熟妇| 夜嗨影院| 亚洲黄a三级三级三级看三级| 懂色Av| AA丁香综合激情| 欧美,日韩,中文,另类| 天堂俺去俺来也www久久婷婷| 天天射网| 97视频在线免费观看| 天天爽天天爽| 偷拍视频青青草在线视频| 亚洲码专区| 少妇久久久免费| 翔田千里A片一区二区| 长长久久88视频| 91性感网站| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 国产剧情一区在线观看| 久久系列| 丝袜性亚洲| 国产成人91一区二区三区| 任我爽视频在线观看| 久久夜夜| 精品小视频在线| 精品无码一区二区三区| 青青操少妇| 国产精品国产自产高清AV| 国产乱码精品久久久久久| 国产一级高跟丝袜| 大干人妻| 另类图片五月天| 伊人操| 成人色女网| 国内偷自视频区视频综合 | 免费国产| 99色综合| 在线观看亚洲成人精品| A一级色女| 天天插天天操| 91精品国产91久久青草 | 亚洲日韩天堂| 久久綜合很很很| 亚洲一级特黄大片在线播放91| 欧美大色交| 欧美日韩第一页| 精品久| 久久草视频污视频| 久久久婷婷| 天天爽夜夜爽夜夜爽精| 在线小说视频一区| 黑丝91视频| 精品人妻av在线播放| 超碰九九| 久久少妇视频| 婷婷伊人綜合中文字幕小说| 一级二级在线观看| 大干人妻| 操人妻逼91| 91精品国产高清久久久久久,亚洲成人 | 久久久新亚洲AV| 青青草字幕AV| 四虎 精品 WWW| 欧美特大黄一级片片免费| 日本成a人v网站在线观看| 欧美综合网1| 久久草大香蕉| 黄页视频网站野外| 乱性AV| 欧美黑人与女人91| 婷婷久草| 欧美少妇性乱| 九九九九日本 | 亚洲人人夜夜澡人人爽| 国产精品小视频一区二区三区| 亚洲国产成人精品久久久国产成人一区二区三.| 抽插一区二区视频| B049AV在线播放| 综合日韩激情另类图片| 九九热九九热| 狠狠操狠狠爱| 91干熟女| 久久免费精品视频免一| 欧美性爱免费短视频| 天天92av| 人人妻人人爽一区二区三区| 97在线青| 91在线页| 久久9 9 9精品| 五月婷婷深深爱| 国产精品视频精品一二| 日本欧美亚洲高清在线看| 一级毛片久久久久久久女人18| 日本不卡二区| 熟女精品日韩一区二区三区| 中文字幕福利视频一区二区三区在线观看| 久久亚洲不卡一区二区三区| 欧美国产一区二区三区麻豆传媒| 欧洲综合视频| 九九视品黄色| 手机av天堂久久久久| 久久亚洲不卡| 97视频在线观看播放与子乱对白在线……| 青青草日韩无码| 大香交伊人网| 3571色综合一区二区二区| 日韩啪啪啪啪啪| 夜夜操狠狠操| 北条麻妃99精品青青久久| 中文字幕在线观看视频www| 色呦呦呦在线观看视频| 日本国产欧美高清在线| 国产 三级自拍| 凹凸视频特色日本特黄| 人人操,操人人| 五月天婷精品激情| 日本女人操逼| 屌逼麻豆| 无码一区二区三区四区五区六区七区八区九区十区视频 | 国产精品无码论坛| 五月天综合网| 九九综合久久| 欧美在线啊啊啊 | 无码高清操逼网址| 人人爱人人操人人性| 人妻人人操| 懂色AV一区二区三区| 2017大香蕉国产精品久久| 色呦色呦色精品| 丝袜加勒比| 国产成人久久精品蜜臀| 一区二区三区黄色片a| 伊欧美综合视频| 狠狠干,狠狠操| 天天日日本| 嫩草91| 色欧洲| 尤物黄色在线观看网站| 99热最新网址| 伊人青青草久久| 可乐操在线| 日韩中文字幕视频| 婷婷色中文字幕| 打av高清| 玖玖无码超碰| 亚欧毛片基地国产毛片基地| 中文字幕亚洲在线一区| 亚洲AV资源| 美女十八禁| 欧美成人性爱视频在线播放| 99热99色| 久操影视| 国产成人91一区二区三区| 99精品成人免费看| 97超碰色屌| 五月天婷婷社区| 高潮毛片无遮挡高清免费| 丁香六月婷婷| 啊啊啊啊啊啊啊啊啊在线观看| 啊啊啊操死我| 性色av婷婷久久一区二区点复制| 六月丁操逼| 啪啪啪综合网| 无码9区| 99热这里只有精品1| 亚川综合视频| 中文字幕av久久爽Av| 精品人妻15区| 韩国三级理论在线| 久久综合超碰| 成人自拍三级在线观看| 97九色人妻| 欧美加勒比| 日韩精品一区的| av线电影| 久操网无码在线| 另类av天堂| 日本不卡一区二区| 人妻激情另类| 射综合网| 欧美亚洲日韩人妻在线观看| 中文字幕丝袜| 久久激情视频| 久久内射| 人人人人人人少妇| 欧美日韩久久精品爱爱| 狠狠色婷婷7777久| 国产熟女一区二区| 日本 欧美 亚中文字幕| 免费视频观看60秒| 国产亚州日韩欧美看片| 午夜操一视频一区| 天天影视色香色欲| 夜夜嗨视频| 嗯啊不要在线| 加勒比伊人| 欧美无圣光在线| 日本国产亚洲一区在线观看| 久久综合久久综合人久久夜精品| 91在线视频国产网站| 国产乱伦性爱AV| 久久久久久久久9| 丁香五月激情综合| 中文字幕蜜乳av| 综合激情97| 日韩av不卡在线看| 伊人久久亚洲色欲综合网站| 国产精品自产拍在线观看社区| 日本不卡免费二区| 深爱五月天| 日韩免费在线观看不卡| 物尤视频一区二区| 亚洲一区二区中文字幕| 先锋女优在线观看视频| 中文字幕日韩国产传媒欧美精品| 日本成熟少妇A∨网站| 青青国产在线拍揄自揄拍| 成人免费福利在线观看| 欧美图片校园春色| 欧美很很操视频| 97色操| 五月天婷婷综合网| 四虎在线观看视频| 亚洲美乱| 久久亚洲欧美中文字幕国语| 色娱乐色呦呦夜夜夜夜av| 久草视频观看视频在线| 在线 欧美 亚洲| 自偷自拍的亚洲视频| 欧美亚洲中文| 久久伦理视频久久大香蕉视频| 丰满的三级少妇欧美久久久| 搡老熟女免费视频| ...日韩成人一区二区三区字幕| 久久性爱免费送| 男女一进一出视频久久| 亚洲在钱| 欧美性战999| 99久久精品无码一区二区| v91av| 色阁阁AV综合网| 色综合加勒比四四季| 91干熟女| 久久中文字幕一区不卡| 国产日本顶级一区二区三区| 久久香蕉超碰97国产精品| 开心五月深爱五月| 日韩A优精品在线观看| 亚洲国产97| 成人青青草原伊人| 熟女高潮合集-永久久久-成人AV| 婷婷五月天基地| 国产www色在线观看| 欧美性暴力| 亚洲天天自拍| 麻豆人妻偷人精品无码视频| 亚洲色图在线视频| 少妇滛荡视频| 人成午夜免费大片| 天天日天天搞天天干| 97欧美精品| 新怡红院| 综合自拍| 人妻少妇久久中文| 天天操人人操骚逼网站| www.婷婷六月天| 久久精彩视频| 99re国产中文字幕| 操B在线观看| 91精品女厕偷拍视频| 久9re热视频这里只有精品| 97在线观| 999精品乱码| 99久在线精品99re8热视频在线| 久操在97| 欧美日动态视频| 久久久久亚洲精品| 久久精品72| 欧美精品91| 97se综合网| 日本不卡高清免v欧美日韩在线观看| 亚洲一区二区中文字幕| 黄片aaaaa一区| 国产亚洲色婷婷久久99精品91葵花宝典 | 美女91在线| 婷婷五月天基地| 亚洲网站一区二区在线| 欧美97在线欧| 欧美性夜| 国产 日韩,欧美 自拍| 日本天天干天天操一区| 亚洲九九视频在线观看| 亚洲高潮影院| 精品97久久| 91n欧美| 男人天堂电影院| 黄色免费一级在线毛片| 一区AV| 精品人妻中文字幕4399| 亚洲国产欧美一区二区潘金莲| 国产AV色黄看到爽| 美女午夜福利免费视频| 日本午夜操逼| 亚洲AV永久无码一区仙野| 亚洲国产欧美中日韩成人综合视频| 柠檬AV导航| 亚洲天天艹| 97视频www| 国产中文字幕在线观看| 青草精品视频一日本久久久久网站| 精品人妻一区二区蜜桃视频 | 91在线/欧洲| 亚州国产成人精品女人久久| 限制级中的三级片中的黑粗大屌屌日人妻熟女 | 亚州九九九精品视频| 中文字幕精品专区搜索结果91| 四虎免费视频| 伊人久久AV诱惑悠悠| 日语五十路和六十路亚洲国产精品 | 人人妻人人爱人人玩| 久久久久亚洲熟妇熟女| 日韩欧美tv一区二区在线观看| 成人福利视频网| 国产欧美日韩女同性恋ww喷水精品| 偷拍 精品 另类 四区| 久久夜夜夜| 欧美另类丝袜熟女| 无码一区二区精品视频久久久春药| 精品人妻一区| 久久久精品国产亚洲伊人| 一区二区三区蜜桃成人撸久久东京热| 啊灬啊灬啊灬啊灬高潮奶出了免费视| 91亚洲图片| 加勒比在线观看一区二区| 欧美东京热精品A∨| 九九九午夜| 欧美第五页| 天天干天天舔| 熟女乱伦二区| 国产美女激情| 白丝一区| av在线一区二区三区| 野狼激情网| 欧美色道啊| 国产女人高潮嗷嗷嗷叫小说| 91狠狠综合久久久久久| 麻豆伊人网| 欧美色偷偷| WWW黄片COM| 日日碰视频网| 在线中文字幕| 狠狠中文字幕| 91精品久久久久久| 五月婷婷六月丁香网址| 国产一区96在线| 欧美激情久久久久| 欧美性爱免费短视频| 日韩97超碰中文字幕| 色综九九九一区| 芊芊操逼视频无码| 亚洲国产一级中文综合久久天堂在线免费观看| 日本2020一区二区| 日韩成人性爱电影在线播放| 蜜臀一二三| 天天看天天在线精品| 刺激性视频黄页| 好吊色综合| 97操碰| 天天影视综合色| 亚洲精品aa久久伊人| 97热视频在线观看| 在线观看成人性爱免费小视频| 美女啊啊啊啊pc| 亚洲国产综合视频| 欧洲天天在线| 国产精品久久久久婷婷二区次| 韩日性爱av| 性欧美精| 97人人操人人摸| 日韩欧美水蜜桃人妻| 青草草免费网站av| 蜜桃精品视频一区| av天堂天堂av日韩| 裸体美女久久久| 国产精品久久久久亚洲av| 天美传媒Av在线| 性影在线视频| 伊人久久亚洲色欲综合网站 | 精品无码产区一区二| 近亲乱伦一区二区| 大香蕉在线SuP| 亚洲好看强奸乱伦| 久久久九| 亚洲黑丝在线| 国产精品人妻无码久久久互動交流| 天天影视网综合少妇| 97精品视频| 爱欲AV| 91久久久久久久久18| 91天美传媒精品| 亚洲国产婷婷在线播放| 97爱碰| 色婷婷亚洲婷婷| 色悠久| 激情欧美日韩女同久久| 殴美在线AⅤ| 婷婷久月| 天天天乱色综合全| 人人操人人叉人人插人人| 九七超碰人人乐| 青青爽| 性爱免费视频成人| 国产91专区| 五月丁香综合| 国产丝袜欧美在线视频| 夜夜青青无码影院| 久久人妻视频| 欧美性爱18观看| 天天看高清麻豆| 色婷婷综合网| 在线αⅴ| 精品大全99999| 久久久久久夜夜夜夜夜| 久操凹凸视频| 成人资源中文字幕在线观看| 啊啊啊好湿久久| 亚洲精品亚洲人成在线麻豆| 97免费视频在线| 97久久免费| 色噜噜婷婷| 豆花视频操逼网址| 国模不卡一本二本三电影| 日本天天操| 搡老女人老熟女91老熟女综合网| 日韩一级二级在线| 久综合网| 亚洲激情综合另类男同| 老女人综合| 韩日精品福利视频一区不卡在线免| 亚洲欧美一区二区三区在钱蜜桃| 2018天天干在线视频| 日本综合色图| 97精品网站| 精品国产99| 长长久久曰曰夜夜成人网| 欧美一级黄色18片免费看| 亚洲无码超碰免费| 欧美日韩中文字幕不卡| 久久久免费懂色| 中文字幕55555| 长长久久免费视频| 超碰免费人人| 无码乱人伦中文视频| 蜜臀无码视频在线观看| 少妇色欲综合网2| 亚洲鸥美色图| 男人天堂婷婷五月天校园春色| 乱老女人一区二区视频| 国产精品国产自产高清AV | 亚洲欧美精品一区天堂久久| 精品久久久久久无码| 91综合色噜噜| 久久伊人影院| 四虎精品永久在线观看| 99re在线视频国产| 欧美激情片一区二区| 五月综合色| 久热九九| 留下AⅤ黄色片| 国产三级多多影院2022国产AA一级毛片无码 | 99这里只有精品国产| 探花精品 一区二区| 日韩中文字幕宗合在线| 中文字幕神马久久| 欧美 日韩 另类 亚洲| 亚洲欧美色综合| 久9久| 岛国小电影| 青青草在线视频人人想人人上 | 91美女在线看| 欧美伦乱爱| 2000亚洲男人天堂| 色制服丝袜夫妻av一区| 91成人国产综合久久精品蜜月| 99.色网| 亚洲天堂,男人| 日韩情色视频| 精品无码久久久| 亚洲精品蜜桃久久久一区二区三区| 成人精品在线观看| 一区二区 韩日AV| 免费精品99| 天天综合亚在线| 日欧美色| 国产精品白虎| 美女毛片999| 亚洲诱惑天堂 | 蜜臀Av一区二区三区| 亚洲激情视频| 91久久久亚洲| 高潮的A片激情扒开一区| 久久久久久久国产视频| 日本操大逼| 日本三级日本三级99| 蜜臀国产AV中文字幕| 碰碰在线视频| 97免费视频网| 2019亚洲男人天堂| 久久久久96| 91 丝袜在线播放| 十八禁视频一区二区| 97人人操人人摸人人爱| 丁香六月激情综合| 国模限制级电影| 99 国产丝袜在线| 天天操天天7| 无套后入双马尾| 人妻色偷色噜| 国产一区二区三区导航| 亚洲久热| 天天α片| 人妻少妇精品久久久久久| 天天综合91| WWW黄片COM| 欧美日日夜夜| 久久久国产精品亚洲精品| 极品人妻少妇综合| 天天视频网站黄| 五月丁香综合网| 中文字日本乱码| 久久亚州大香蕉| 日韩激情电影中文字幕| 91动漫操逼视频| 超碰天天久久79| 99久久久| 亚洲精品三区在线观看| 九九热AV| 偷窥自拍亚洲色图| 加勒比色99999| 日韩av免费一级电影| 亚洲熟女av日韩熟女| 日日夜夜青青草母狗| 伊人网在线视频| 熟女激情综合网| 国产精品久久伊人| 青女在线| 91亚洲欧美| 人人操人人摸人人看人人干| 精品妇女一区二区三区| 精品一区二区三区蜜桃臀www| 日本不卡一区二区| 一区二区三区机械有限公司| 久久色AV线| 试看60秒 爽| 天天综合影院91| 日本成人A片网站| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 久久有码视频| 成人性爱视频在线看| 亚洲中文字幕妇伦久久| 4tube欧美女厕所| 特级特黄一级毛片免费| 97人肏| 国产又粗又长又大的视频| 天天做日日做| 啪啪综合网| 久久九九97| 99日精品欧美国产| AV色五月天| 亚洲人妻在线一区| 校园春色综合香蕉| 亚洲日韩视频二区| 婷婷伊人一区| 蜜臀久久99精品久久久久| 95精品在线| 亚洲精品欧洲色| 中文字幕成人| 99精品无码| 伊人五月天激情| 欧美亚洲高清不卡| 蜜乳av一区二区| 伊人精品视频| 岛国爱情动作片在国产AV无码专区亚洲AV漫画| 狠狠中文字幕| 日韩色| 日韩pv中文| 久久伊人最新网址视频| 国产人伦精品一区二区三区| 日韩在线观看三级电影| 久久国产精品91| 午夜性刺激视频免费观看| 色第一页| 少妇人妻好深太紧了vr91| 男人把坤坤插入女人的下体| 婷婷去俺也去六月色| 91网站视频在线观看| 日韩中文字幕精品一区在线| 久色99999| 亚欧Av| 九九九九九精品十六| 国产呦精品一区二区三区下载| 亚洲脚交| 久热无码| 国产精品农村妇女精品| 亚洲男人的天堂一区二区| 18禁无码永久免费无限制| 亚洲大胆人体av| 欧美传媒| 91天天美女| 色色五月丁香| 成人精品在线免费视频| 99热97| 一级黄色性爱A级片| 2020天天色综合| 天天射影院| 九热中文字幕| 人妻内射一区二区在线视频| 亚洲欧洲国产综合av| 色噜噜国产精品视频一区二区| 六月激情网| 欧美日日操| 2020中文字幕在线| 日韩素人无码一区二区三区三州| 欧美性爱超碰97| 超碰97最新人妻| 久操热线| 亚洲麻豆av一区二区| 懂色AV中文| 国产成人无码网站在线视频| 美女久久久久久久久久久| 中文字幕制服欧美久久一区| 国产美女mm131爽爽爽爽| 好爽视频在线观看视频| 人妻少妇三级| 婷婷五月天伊人| 国产精品一级特黄aaa大片在线观看| 九九热只有精品| 中文字日本乱码| 亚洲图片偷拍视频区| 樱花蜜乳av| 揉揉日日日日| 亚洲自拍欧美色综合| 久久久影院| hd成人一区二区在线| 色综合加勒比| 91网站18+| 情色五月天网| 久操九九九九| www成人啪啪18秘 免费| 国产精品免费1区2区视频| 国产搭汕a级片| 欧美日韩天堂| 在线女人91| 2011国产精品| 性爱乱伦一区| wwwxxx日本爽| 欧美激情内射| 国产精品久久久久久9999| 97精品一二区| 4399成人黄A片| 欧美疯狂做爰xxxx| 中文字幕日韩电影人妻| 欧美性第一页| 尤物AV免费网站| 黄色十八禁| 香港日本韩国人妇99www.wccm20| 极品色www影院| 欧美日本一区二区a人| 亚洲啪AⅤ永久无码| 久操精品| 亚洲国产综合图区中文字幕| 日日骚网站| 亚洲蜜臀精品视频久久| 一本色道久久综合狠狠操| 97精品久久久久中文字幕| 青青草伊人久久| 国产18精品亚洲精品| 在线性黄高清免费视频| 色乱二区| 99热99在线播放激情| 国产综合永久精品日韩鬼片| 国产精品黄色三级av| 性爱视频无打码在线观看| 操日韩第| 黄色一区二区秘书性感| 久操网视频|