欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

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

SpringBoot+Vue前后端分離旅游平臺(tái)實(shí)戰(zhàn):從開(kāi)發(fā)到部署上線

SpringBoot+Vue前后端分離旅游平臺(tái)實(shí)戰(zhàn):從開(kāi)發(fā)到部署上線 花兩周時(shí)間把一個(gè)前后端分離的旅游平臺(tái)從零跑到部署上線是什么體驗(yàn)說(shuō)實(shí)話這和網(wǎng)上那些只教你某個(gè)局部功能的教程完全不同——你面對(duì)的是數(shù)據(jù)庫(kù)建模、接口設(shè)計(jì)、Vue頁(yè)面開(kāi)發(fā)、前后端聯(lián)調(diào)、服務(wù)器部署一整條鏈路任何一個(gè)環(huán)節(jié)出問(wèn)題整個(gè)項(xiàng)目就卡住。我做的這個(gè)桂林旅游景點(diǎn)導(dǎo)游平臺(tái)用的是SpringBootVueMyBatisMySQL這套經(jīng)典組合前后端完全分離源碼和部署流程都整理好了。如果你正在找畢業(yè)設(shè)計(jì)題目或者想通過(guò)一個(gè)完整項(xiàng)目把前后端分離開(kāi)發(fā)整個(gè)流程徹底打通這篇可以當(dāng)你的參考路線圖里面包含了我實(shí)際踩過(guò)的坑和調(diào)通的細(xì)節(jié)不是那種只貼代碼不解釋的筆記。1. 為什么拿桂林旅游景點(diǎn)導(dǎo)游平臺(tái)做實(shí)戰(zhàn)項(xiàng)目——選題邏輯與需求拆解1.1 旅游類業(yè)務(wù)為什么適合練前后端分離做項(xiàng)目練手或畢業(yè)設(shè)計(jì)最怕兩件事一是業(yè)務(wù)太抽象邊界不清楚做著做著不知道該寫(xiě)什么功能二是業(yè)務(wù)太復(fù)雜比如電商下單加庫(kù)存加支付物流一個(gè)人根本扛不住。旅游景點(diǎn)導(dǎo)游平臺(tái)恰好處在一個(gè)非常合適的區(qū)間。它的核心業(yè)務(wù)就是展示景點(diǎn)、規(guī)劃線路、下單預(yù)訂、用戶互動(dòng)天然分成游客端和管理端兩塊。游客端需要的是景點(diǎn)瀏覽、搜索篩選、查看詳情、預(yù)訂門(mén)票、收藏和評(píng)論管理端需要的是維護(hù)景點(diǎn)數(shù)據(jù)、管理訂單、審核內(nèi)容。這種雙端結(jié)構(gòu)就是前后端分離開(kāi)發(fā)最常見(jiàn)的業(yè)務(wù)形態(tài)前端界面偏展示型后端接口偏數(shù)據(jù)管理型兩邊各自的復(fù)雜度都不算高但加在一起能把整套開(kāi)發(fā)流程完整覆蓋。從技術(shù)角度講它涵蓋的知識(shí)點(diǎn)非常典型列表查詢、條件檢索、分頁(yè)、詳情展示、表單提交、登錄狀態(tài)管理、文件上傳景點(diǎn)圖片、關(guān)聯(lián)表查詢、一對(duì)多數(shù)據(jù)組裝。這些技能幾乎是所有后端開(kāi)發(fā)崗位的日常做完這個(gè)項(xiàng)目再去接觸電商、外賣(mài)、預(yù)約類系統(tǒng)你會(huì)發(fā)現(xiàn)業(yè)務(wù)變了但套路完全一樣基本可以平移。另外桂林景區(qū)的數(shù)據(jù)模型有天然的可擴(kuò)展性比如漓江、陽(yáng)朔、龍脊梯田這些景點(diǎn)可以掛多個(gè)分類、多條線路、若干圖片這為設(shè)計(jì)多對(duì)多關(guān)系和復(fù)雜的查詢條件提供了真實(shí)場(chǎng)景不用為了演示而硬造需求。1.2 功能模塊與頁(yè)面流轉(zhuǎn)先畫(huà)清楚再寫(xiě)代碼我動(dòng)手之前先把功能邊界列了一張表避免開(kāi)發(fā)中途加需求導(dǎo)致返工。這里分享我當(dāng)時(shí)整理的核心模塊清單游客端景點(diǎn)列表按分類篩選、關(guān)鍵詞搜索、景點(diǎn)詳情圖片輪播、介紹、評(píng)論、線路推薦一日游/兩日游、門(mén)票預(yù)訂下單、個(gè)人中心我的訂單、我的收藏管理端登錄校驗(yàn)、景點(diǎn)管理增刪改查圖片上傳、分類管理、線路管理、訂單管理查看和狀態(tài)更新、評(píng)論管理頁(yè)面流轉(zhuǎn)是這樣的用戶進(jìn)入首頁(yè)看到輪播圖和推薦景點(diǎn)點(diǎn)擊景點(diǎn)進(jìn)入詳情頁(yè)可以收藏、評(píng)論、選擇線路進(jìn)行預(yù)訂下單后進(jìn)入個(gè)人中心查看訂單狀態(tài)管理員通過(guò)獨(dú)立端口登錄進(jìn)入后臺(tái)操作維護(hù)數(shù)據(jù)前端把操作結(jié)果通過(guò)API同步到數(shù)據(jù)庫(kù)。整個(gè)流程走下來(lái)前后端能覆蓋到的交互模式基本都有了。1.3 技術(shù)選型的實(shí)際取舍沒(méi)有微服務(wù)也沒(méi)有盲目上全家桶技術(shù)選型上我堅(jiān)持一個(gè)原則能用簡(jiǎn)單方案解決的問(wèn)題不引入額外復(fù)雜度。后端用SpringBoot做基礎(chǔ)框架MyBatis做持久層MySQL存數(shù)據(jù)前端用Vue寫(xiě)頁(yè)面配合Vue Router做路由、Axios做請(qǐng)求管理端和游客端放在同一個(gè)前端工程里用路由和權(quán)限去區(qū)分而不是拆成兩個(gè)獨(dú)立應(yīng)用。沒(méi)有引入微服務(wù)的原因很直接這個(gè)體量的業(yè)務(wù)單體應(yīng)用完全夠用拆微服務(wù)只會(huì)增加服務(wù)注冊(cè)、配置中心、網(wǎng)關(guān)這些和學(xué)習(xí)目標(biāo)無(wú)關(guān)的負(fù)擔(dān)。沒(méi)用MyBatis-Plus而用原生的MyBatis是我刻意的選擇——原生MyBatis能讓你理解Mapper接口、XML映射、動(dòng)態(tài)SQL、結(jié)果映射這些底層機(jī)制一旦換成MyBatis-Plus這些細(xì)節(jié)會(huì)被封裝掉大半寫(xiě)起來(lái)爽了但底層理解容易留下盲區(qū)。當(dāng)然項(xiàng)目后期我也嘗試過(guò)換MyBatis-Plus來(lái)做對(duì)比確實(shí)省事不少這個(gè)放到后面擴(kuò)展部分細(xì)說(shuō)。如果你參考過(guò)若依框架會(huì)發(fā)現(xiàn)它的前后端分離版也是SpringBootVue但若依更像是一個(gè)快速開(kāi)發(fā)腳手架帶了一整套代碼生成器和管理系統(tǒng)模板對(duì)于學(xué)習(xí)來(lái)說(shuō)容易迷失在框架自帶的功能里自己從零搭一遍反而對(duì)每個(gè)環(huán)節(jié)的理解更扎實(shí)。2. 后端落地SpringBootMyBatisMySQL的數(shù)據(jù)模型與接口設(shè)計(jì)2.1 數(shù)據(jù)庫(kù)表設(shè)計(jì)九張表如何撐起整個(gè)業(yè)務(wù)后端開(kāi)發(fā)的第一步永遠(yuǎn)是數(shù)據(jù)庫(kù)設(shè)計(jì)。表結(jié)構(gòu)沒(méi)想清楚后面寫(xiě)接口會(huì)處處別扭。我最終設(shè)計(jì)了九張表這里把核心表的結(jié)構(gòu)和設(shè)計(jì)考慮講一下。表名用途關(guān)鍵字段設(shè)計(jì)說(shuō)明t_user用戶信息id, username, password, nickname, phone, avatar, role, create_time角色字段區(qū)分普通用戶和管理員密碼存的是BCrypt加密后的密文不能明文存儲(chǔ)t_category景點(diǎn)分類id, name, sort, statusstatus控制分類是否在前端展示方便下架不刪除t_scenic景點(diǎn)信息id, category_id, name, summary, detail, cover_image, images, price, address, status, create_timeimages字段用逗號(hào)分隔存多張圖片簡(jiǎn)單場(chǎng)景下比建子表更實(shí)用t_route旅游線路id, name, days, description, cover_image, price, statusdays表示游玩天數(shù)用于前端展示一日游/兩日游t_route_scenic線路景點(diǎn)關(guān)聯(lián)id, route_id, scenic_id, sort多對(duì)多關(guān)系表給線路里的景點(diǎn)排順序t_order訂單表id, order_no, user_id, scenic_id, route_id, quantity, total_price, status, create_time訂單號(hào)用時(shí)間戳加隨機(jī)數(shù)生成狀態(tài)字段用數(shù)字表示待支付/已支付/已完成/已取消t_comment評(píng)論表id, scenic_id, user_id, content, score, create_time冗余了nickname字段避免聯(lián)查用戶表這是常見(jiàn)的空間換時(shí)間優(yōu)化t_favorite收藏表id, user_id, scenic_id, create_time加唯一索引(user_id, scenic_id)防止重復(fù)收藏t_banner首頁(yè)輪播圖id, image, url, sort, status首頁(yè)運(yùn)營(yíng)位后臺(tái)可維護(hù)這里說(shuō)幾個(gè)設(shè)計(jì)要點(diǎn)。第一所有表都帶create_time字段而且由數(shù)據(jù)庫(kù)默認(rèn)值填充這樣插入數(shù)據(jù)時(shí)不用手動(dòng)傳第二景點(diǎn)表的status字段很重要景點(diǎn)下架用的是狀態(tài)而不是物理刪除避免訂單、收藏等關(guān)聯(lián)數(shù)據(jù)失效第三線路景點(diǎn)關(guān)聯(lián)表里的sort字段很多人會(huì)省略但實(shí)際線路中先到哪個(gè)景點(diǎn)、后到哪個(gè)景點(diǎn)是需要排序的沒(méi)有這個(gè)字段后期補(bǔ)數(shù)據(jù)會(huì)非常痛苦。我當(dāng)時(shí)花了一天時(shí)間建模和調(diào)整實(shí)際開(kāi)發(fā)中發(fā)現(xiàn)前期表設(shè)計(jì)多花的時(shí)間完全值得后面寫(xiě)Mapper幾乎沒(méi)出現(xiàn)字段不夠用、要改表結(jié)構(gòu)的情況。2.2 MyBatis的Mapper層設(shè)計(jì)動(dòng)態(tài)SQL才是效率關(guān)鍵MyBatis的配置我用了最標(biāo)準(zhǔn)的XML方式這也是面試?yán)锍1蛔穯?wèn)的寫(xiě)法。SpringBoot中需要兩步在application.yml配置數(shù)據(jù)源和MyBatis掃描路徑然后在啟動(dòng)類上加上MapperScan注解讓MyBatis掃描到Mapper接口。application.yml里的關(guān)鍵配置大概長(zhǎng)這樣spring: datasource: url: jdbc:mysql://localhost:3306/guilin_travel?useUnicodetruecharacterEncodingutf-8useSSLfalseserverTimezoneAsia/Shanghai username: root password: yourpassword driver-class-name: com.mysql.cj.jdbc.Driver mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.guilin.travel.entity configuration: map-underscore-to-camel-case: true這里兩個(gè)比較容易踩的細(xì)節(jié)。第一個(gè)是數(shù)據(jù)庫(kù)連接串里的serverTimezone參數(shù)MySQL 8默認(rèn)時(shí)區(qū)不是中國(guó)時(shí)區(qū)不配會(huì)報(bào)時(shí)間相關(guān)的錯(cuò)誤第二個(gè)是map-underscore-to-camel-case一定要開(kāi)啟這樣數(shù)據(jù)庫(kù)的create_time才能自動(dòng)映射到Java實(shí)體里的createTime不用手寫(xiě)一堆ResultMap。景點(diǎn)列表查詢是典型的動(dòng)態(tài)SQL場(chǎng)景用戶可能按分類過(guò)濾、按關(guān)鍵詞搜索、按價(jià)格排序、還要分頁(yè)。如果用MyBatis-Plus直接QueryWrapper搞定但原生MyBatis需要自己寫(xiě)動(dòng)態(tài)標(biāo)簽我實(shí)際寫(xiě)出來(lái)的Mapper XML片段如下select idfindByCondition resultTypecom.guilin.travel.entity.Scenic SELECT * FROM t_scenic where if testcategoryId ! null AND category_id #{categoryId} /if if testkeyword ! null and keyword ! AND (name LIKE CONCAT(%, #{keyword}, %) OR summary LIKE CONCAT(%, #{keyword}, %)) /if if teststatus ! null AND status #{status} /if /where if testsort ! null and sort ! ORDER BY ${sort} /if /select這里where標(biāo)簽會(huì)自動(dòng)處理第一個(gè)條件前面的AND問(wèn)題這個(gè)細(xì)節(jié)是原生態(tài)MyBatis最常用的技巧。注意ORDER BY后面用的是${sort}而不是#{sort}因?yàn)榕判蜃侄问菙?shù)據(jù)庫(kù)列名不能參數(shù)化但這里有SQL注入風(fēng)險(xiǎn)我在前端傳參時(shí)做了白名單校驗(yàn)只允許傳price_asc、price_desc等固定值而不是直接把前端傳的字符串拼進(jìn)去。分頁(yè)我用的是PageHelper分頁(yè)插件引入依賴后在查詢前調(diào)用PageHelper.startPage(pageNum, pageSize)查詢后拿到PageInfo里面已經(jīng)封裝好了總記錄數(shù)、總頁(yè)數(shù)這些分頁(yè)數(shù)據(jù)。返回給前端的數(shù)據(jù)結(jié)構(gòu)我已經(jīng)把列表和總數(shù)都包好前端表格組件直接用total字段渲染分頁(yè)器即可。2.3 Controller統(tǒng)一返回結(jié)構(gòu)和全局異常處理少走半天彎路寫(xiě)接口第二天我就發(fā)現(xiàn)一個(gè)問(wèn)題如果不統(tǒng)一返回結(jié)構(gòu)每個(gè)接口返回的JSON格式都不一樣前端Axios攔截器根本沒(méi)辦法做通用處理。于是我定義了一個(gè)Result類作為所有接口的統(tǒng)一返回體。public class ResultT { private Integer code; private String message; private T data; public static T ResultT success(T data) { ResultT result new Result(); result.code 200; result.message 操作成功; result.data data; return result; } public static T ResultT error(String message) { ResultT result new Result(); result.code 500; result.message message; return result; } }與之配套的是一個(gè)RestControllerAdvice全局異常處理器把業(yè)務(wù)異常、參數(shù)校驗(yàn)異常、系統(tǒng)異常分別處理統(tǒng)一包裝成Result返回。這樣做的好處是前端只需要判斷code是不是200其余情況直接彈出message即可不會(huì)因?yàn)槟硞€(gè)接口的返回格式不一致導(dǎo)致前端解析崩潰。實(shí)際開(kāi)發(fā)中我發(fā)現(xiàn)很多新手項(xiàng)目里Controller直接返回實(shí)體類或者M(jìn)ap表面上省了封裝代碼但一旦前端需要區(qū)分成功但數(shù)據(jù)為空和請(qǐng)求異常這兩種情況就會(huì)非常被動(dòng)。再配合Valid注解做參數(shù)校驗(yàn)后端在入口處就攔截掉空參數(shù)、非法參數(shù)不用在每個(gè)Service里寫(xiě)一堆if判斷。2.4 圖片上傳與存儲(chǔ)先本地后對(duì)象存儲(chǔ)景點(diǎn)圖片的上傳管理我第一版用的是最簡(jiǎn)單的本地存儲(chǔ)方案后端接收MultipartFile文件重命名為時(shí)間戳加隨機(jī)數(shù)保存到服務(wù)器指定的upload目錄再把訪問(wèn)路徑存到數(shù)據(jù)庫(kù)。SpringBoot里需要配置靜態(tài)資源映射讓上傳的圖片可以通過(guò)URL直接訪問(wèn)Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler(/upload/**) .addResourceHandler(file: uploadPath /); }這樣前端只需要用/upload/xxx.jpg就能拿到圖片。這個(gè)方案在本地開(kāi)發(fā)和單機(jī)部署完全夠用代碼量少理解也直觀。如果將來(lái)要上云可以把上傳邏輯替換為MinIO或OSS前端訪問(wèn)路徑完全不用變因?yàn)楹蠖朔祷亟o前端的始終是一個(gè)URL字符串。3. Vue前端從零搭建路由、API封裝與頁(yè)面編碼3.1 前端工程化用Vite還是Vue CLI前端這部分我糾結(jié)了一下是用Vue CLI還是Vite。考慮到Vite在開(kāi)發(fā)環(huán)境下的啟動(dòng)速度明顯更快而且Vue官方已經(jīng)將Vite作為默認(rèn)推薦我直接用Vite初始化了一個(gè)Vue 3項(xiàng)目搭配Element Plus組件庫(kù)做后臺(tái)管理界面游客端頁(yè)面則用了手寫(xiě)的樣式保持個(gè)性化。如果你更習(xí)慣Vue 2的寫(xiě)法用Vue CLI腳手架也是一樣的思路核心技術(shù)點(diǎn)不沖突。安裝依賴和啟動(dòng)開(kāi)發(fā)服務(wù)器這步我在環(huán)境配置那篇筆記里踩過(guò)一次坑Vite需要Node.js 16以上版本版本太老會(huì)直接報(bào)錯(cuò)。建議先用node -v確認(rèn)一下當(dāng)前版本再?zèng)Q定是否升級(jí)。3.2 路由設(shè)計(jì)游客端和管理端如何共存一個(gè)工程里同時(shí)容納游客端和管理端最核心的是路由規(guī)劃。游客端是公開(kāi)訪問(wèn)的管理端需要登錄后才有權(quán)限所以我拆了兩套路由一套是基礎(chǔ)路由包括首頁(yè)、景點(diǎn)列表、景點(diǎn)詳情、登錄頁(yè)另一套是管理端路由統(tǒng)一掛在/layout組件下用路由守衛(wèi)校驗(yàn)登錄狀態(tài)。核心路由表長(zhǎng)這樣const routes [ { path: /, component: Home }, { path: /scenic, component: ScenicList }, { path: /scenic/:id, component: ScenicDetail }, { path: /login, component: Login }, { path: /admin, component: AdminLayout, meta: { requiresAuth: true }, children: [ { path: scenic, component: AdminScenic }, { path: order, component: AdminOrder }, { path: comment, component: AdminComment } ] } ]; router.beforeEach((to, from, next) { const token localStorage.getItem(token); if (to.meta.requiresAuth !token) { next(/login); } else { next(); } });這里的關(guān)鍵點(diǎn)是meta里的requiresAuth標(biāo)記。我一開(kāi)始把權(quán)限判斷寫(xiě)死在每個(gè)頁(yè)面的created里結(jié)果發(fā)現(xiàn)每個(gè)頁(yè)面都要粘貼一遍判斷代碼后來(lái)統(tǒng)一收斂到路由守衛(wèi)里代碼干凈很多。3.3 Axios封裝請(qǐng)求攔截器和響應(yīng)攔截器的分工幾乎所有前端請(qǐng)求都要做兩件事自動(dòng)攜帶token、統(tǒng)一處理錯(cuò)誤提示。我封裝了一個(gè)request.js核心邏輯如下const request axios.create({ baseURL: /api, timeout: 10000 }); request.interceptors.request.use(config { const token localStorage.getItem(token); if (token) { config.headers.Authorization Bearer token; } return config; }); request.interceptors.response.use( response { const result response.data; if (result.code 200) { return result.data; } if (result.code 401) { localStorage.removeItem(token); router.push(/login); return Promise.reject(new Error(登錄已過(guò)期)); } ElMessage.error(result.message); return Promise.reject(new Error(result.message)); }, error { ElMessage.error(網(wǎng)絡(luò)請(qǐng)求異常); return Promise.reject(error); } );baseURL用的是/api配合前端開(kāi)發(fā)環(huán)境的代理配置把請(qǐng)求轉(zhuǎn)發(fā)到后端的localhost:8080。響應(yīng)攔截器先判斷Result.code只有200才把data返回給頁(yè)面其他情況直接彈出錯(cuò)誤提示頁(yè)面里的業(yè)務(wù)代碼就不用再重復(fù)寫(xiě)錯(cuò)誤處理了。這種方式讓頁(yè)面的請(qǐng)求代碼從十幾行縮減到幾行而且審查得很清楚。3.4 核心頁(yè)面實(shí)現(xiàn)列表頁(yè)、詳情頁(yè)和下單流程景點(diǎn)列表頁(yè)是典型的查詢條件表格/卡片布局。頁(yè)面加載時(shí)調(diào)用getScenicList方法傳入分類篩選條件和搜索關(guān)鍵詞const getList async () { loading.value true; try { const result await getScenicList({ categoryId: categoryId.value || null, keyword: keyword.value, pageNum: pageNum.value, pageSize: 10 }); scenicList.value result.list; total.value result.total; } finally { loading.value false; } };景點(diǎn)詳情頁(yè)要展示的是基本信息圖片輪播評(píng)論列表收藏按鈕預(yù)訂入口。數(shù)據(jù)來(lái)源分別是景點(diǎn)詳情接口、評(píng)論接口和收藏接口。詳情接口一次返回景點(diǎn)基本信息評(píng)論和收藏分別在頁(yè)面掛載時(shí)并行請(qǐng)求用Promise.all控制并發(fā)請(qǐng)求結(jié)束狀態(tài)避免一個(gè)接口阻塞整個(gè)頁(yè)面渲染。下單流程我簡(jiǎn)化成了訂單創(chuàng)建邏輯前端先拉取景點(diǎn)和線路信息用戶選擇游玩日期和數(shù)量點(diǎn)擊提交后調(diào)用createOrder接口后端生成訂單對(duì)象并寫(xiě)入數(shù)據(jù)庫(kù)前端帶著返回的訂單編號(hào)跳轉(zhuǎn)到我的訂單頁(yè)面展示支付狀態(tài)占位。整個(gè)流程雖然簡(jiǎn)化了但訂單表的狀態(tài)機(jī)設(shè)計(jì)保留了完整邏輯以后接支付網(wǎng)關(guān)可以平滑擴(kuò)展。3.5 后臺(tái)管理頁(yè)面表格加彈窗是標(biāo)配管理端頁(yè)面沒(méi)有做太多創(chuàng)新設(shè)計(jì)就是扎實(shí)的表格加彈窗表單左側(cè)導(dǎo)航固定右側(cè)內(nèi)容區(qū)用Element Plus的el-table展示數(shù)據(jù)頂部的工具欄放新增和條件搜索行內(nèi)放編輯和刪除按鈕。新增和編輯共用一個(gè)彈窗表單通過(guò)判斷row參數(shù)是否存在來(lái)區(qū)分模式。景點(diǎn)管理頁(yè)是管理端里最復(fù)雜的因?yàn)樯婕皥D片上傳。上傳邏輯是先調(diào)upload接口把圖片存到后端拿到返回的URL后再把這個(gè)URL作為表單字段提交。如果先提交表單再上傳圖片會(huì)出現(xiàn)圖片還沒(méi)傳完表單已經(jīng)提交的情況處理起來(lái)很別扭。調(diào)整順序之后整個(gè)流程穩(wěn)定多了。4. 聯(lián)調(diào)階段值得記錄的四個(gè)問(wèn)題——CORS、JWT、日期格式與空值前后端分離開(kāi)發(fā)必然要面對(duì)聯(lián)調(diào)這一階段我實(shí)際遇到的問(wèn)題比開(kāi)發(fā)階段多得多挑了四個(gè)典型記錄在這都是常規(guī)文檔不太會(huì)細(xì)講的內(nèi)容。4.1 跨域問(wèn)題的完整排查鏈路開(kāi)發(fā)模式下前端跑在5173端口后端跑在8080端口瀏覽器直接發(fā)請(qǐng)求必然觸發(fā)跨域。我在后端項(xiàng)目里加了一個(gè)CorsConfig的Bean用WebMvcConfigurer配置允許跨域指定允許的路徑、域名和方法。但如果你的前端請(qǐng)求帶Authorization頭還需要單獨(dú)考慮Header暴露否則前端Axios拿不到響應(yīng)頭里的狀態(tài)信息。我實(shí)際排查時(shí)發(fā)現(xiàn)了一個(gè)隱蔽問(wèn)題后端雖然配置了CORS但Spring Security如果存在它的攔截器優(yōu)先級(jí)更高跨域配置可能被Security的過(guò)濾器提前攔截掉。好在我的項(xiàng)目沒(méi)有引入Spring Security用自定義攔截器做鑒權(quán)跨域配置直接生效。如果你的項(xiàng)目同時(shí)有Spring Security需要額外配置Security的CorsConfigurationSource。4.2 JWT登錄鑒權(quán)的實(shí)現(xiàn)細(xì)節(jié)和放行規(guī)則登錄態(tài)管理我選了JWT原因很簡(jiǎn)單服務(wù)端不需要存session適合前后端分離的分布式場(chǎng)景。后端在用戶登錄時(shí)生成token返回給前端前端存儲(chǔ)到localStorage請(qǐng)求時(shí)通過(guò)Authorization頭攜帶后端寫(xiě)一個(gè)攔截器統(tǒng)一校驗(yàn)。JWT的關(guān)鍵實(shí)現(xiàn)邏輯不算復(fù)雜用jjwt依賴生成tokensub放用戶IDexp設(shè)置過(guò)期時(shí)間為24小時(shí)。真正容易出問(wèn)題的是攔截器里哪些路徑要放行。如果攔截器配置成所有接口都要驗(yàn)證那么登錄接口自身也被攔截了因?yàn)榈卿洉r(shí)根本沒(méi)有token。我的配置方式是登錄接口、景點(diǎn)列表接口、景點(diǎn)詳情接口這些公開(kāi)接口放行管理端接口全部要求登錄個(gè)人中心和訂單相關(guān)接口必須登錄。用攔截器的時(shí)候注意放行規(guī)則應(yīng)該寫(xiě)成白名單形式而不是黑名單——只明確列出不需要登錄的路徑其余全部攔截這樣更安全。4.3 日期格式和null值的隱形坑排查過(guò)兩個(gè)坑。第一個(gè)是前端傳2025-06-01給后端后端用LocalDateTime接收直接報(bào)格式錯(cuò)誤。原因是Jackson默認(rèn)只認(rèn)識(shí)ISO格式需要全局配置日期格式我在application.yml里加了spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT8第二個(gè)坑是數(shù)據(jù)庫(kù)的date字段傳到前端后顯示成2025-06-01T00:00:00.00000:00這樣的UTC格式前端要再轉(zhuǎn)換一次。后來(lái)我在實(shí)體類的日期字段上加了JsonFormat注解指定輸出格式前端直接拿到2025-06-01 00:00:00就省事了。null值的問(wèn)題體現(xiàn)在分頁(yè)接口上當(dāng)列表為空時(shí)后端返回的list是null還是空數(shù)組直接影響前端v-for渲染。我統(tǒng)一處理為只要數(shù)據(jù)庫(kù)沒(méi)查到數(shù)據(jù)返回空數(shù)組而不是null前端不用寫(xiě)一堆空值防御代碼。4.4 MyBatis動(dòng)態(tài)SQL里if判斷等于0的問(wèn)題這是我在寫(xiě)篩選功能時(shí)真正踩過(guò)的坑。定義用戶的角色字段時(shí)我一開(kāi)始判斷條件寫(xiě)了if testrole ! null and role ! 結(jié)果前端傳role0管理員時(shí)條件不生效因?yàn)镸yBatis的OGNL表達(dá)式把數(shù)字0當(dāng)成了false空值處理。排查半天才定位到問(wèn)題不是SQL邏輯而是MyBatis對(duì)整數(shù)類型的if判斷有個(gè)特殊規(guī)則數(shù)值為0時(shí)非空判斷不成立。解決方式有兩種一是改用String類型傳參傳0而不是0二是判斷條件寫(xiě)全if testrole ! null and role ! 并在Service層把0轉(zhuǎn)換成字符串。我最后選擇在后端把篩選參數(shù)的類型統(tǒng)一調(diào)整避免這類隱蔽問(wèn)題再次出現(xiàn)。5. 從開(kāi)發(fā)機(jī)到云服務(wù)器完整部署流程與配置清單項(xiàng)目在本地跑通只是第一步部署到服務(wù)器才是完整閉環(huán)。我用的是一臺(tái)Linux云服務(wù)器配置是2核4G對(duì)這套系統(tǒng)來(lái)說(shuō)完全夠用。5.1 服務(wù)器基礎(chǔ)環(huán)境準(zhǔn)備JDK、MySQL8、Nginx部署環(huán)境三件套JDK、MySQL、Nginx。我的服務(wù)器是CentOS系統(tǒng)JDK用tar包解壓安裝MySQL用官方rpm源安裝Nginx用yum直接裝。具體步驟不贅述但有幾個(gè)關(guān)鍵點(diǎn)必須提醒。MySQL裝完一定要執(zhí)行mysql_secure_installation做基礎(chǔ)安全配置否則root空密碼裸露在公網(wǎng)上很快會(huì)被掃描爆破。另外MySQL 8的密碼策略比5.7嚴(yán)格設(shè)置密碼時(shí)要滿足長(zhǎng)度和復(fù)雜度要求否則會(huì)報(bào)錯(cuò)。數(shù)據(jù)庫(kù)導(dǎo)入就是把本地導(dǎo)出的SQL文件用source命令執(zhí)行一遍注意在導(dǎo)入前先創(chuàng)建好數(shù)據(jù)庫(kù)并指定默認(rèn)字符集utf8mb4否則中文會(huì)亂碼。5.2 后端打包發(fā)布Maven打包與Systemd守護(hù)進(jìn)程后端工程是標(biāo)準(zhǔn)的Maven項(xiàng)目打包命令非常簡(jiǎn)單mvn clean package -DskipTests打包后在target目錄生成一個(gè)jar包。上傳到服務(wù)器后我一開(kāi)始用java -jar前臺(tái)啟動(dòng)但關(guān)掉SSH窗口進(jìn)程就死了。后來(lái)寫(xiě)了一個(gè)Systemd服務(wù)文件讓后端作為守護(hù)進(jìn)程運(yùn)行[Unit] DescriptionGuilin Travel Backend Afternetwork.target [Service] Userroot WorkingDirectory/opt/guilin ExecStart/usr/bin/java -Xms512m -Xmx512m -jar /opt/guilin/guilin-backend.jar SuccessExitStatus143 Restartalways RestartSec10 [Install] WantedBymulti-user.target配置好之后執(zhí)行systemctl enable設(shè)為開(kāi)機(jī)自啟用systemctl start啟動(dòng)用journalctl -u guilin-backend查看日志。啟動(dòng)參數(shù)里Xms和Xmx設(shè)置一樣大避免了JVM動(dòng)態(tài)擴(kuò)展內(nèi)存帶來(lái)的性能抖動(dòng)2G內(nèi)存的服務(wù)器運(yùn)行很平穩(wěn)。5.3 前端構(gòu)建與Nginx反向代理配置前端構(gòu)建相對(duì)簡(jiǎn)單npm run build會(huì)生成dist目錄里面是純靜態(tài)文件。把這個(gè)目錄上傳到服務(wù)器配置Nginx指向它同時(shí)把/api路徑反向代理到后端8080端口這是前后端分離項(xiàng)目部署最核心的一步。server { listen 80; server_name your_domain_or_ip; root /opt/guilin/dist; 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; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /upload/ { proxy_pass http://127.0.0.1:8080; } }location /里的try_files配置很關(guān)鍵它把前端路由的刷新請(qǐng)求都指向index.html否則在頁(yè)面里點(diǎn)路由刷新會(huì)出現(xiàn)404。如果不加這個(gè)Vue Router的history模式部署后刷新就白屏這是前后端分離部署最常見(jiàn)的坑之一。5.4 部署上線后必須檢查的性能隱患上線后我做了幾項(xiàng)檢查。第一是MySQL連接串里的useSSL參數(shù)部署環(huán)境如果MySQL配了SSL但連接串是useSSLfalse會(huì)一直報(bào)SSL連接錯(cuò)誤排查方式是看后端日志里at com.mysql.cj.jdbc的報(bào)錯(cuò)堆棧非常典型。第二是MySQL最大連接數(shù)默認(rèn)151如果前端并發(fā)不高還好但測(cè)試階段用壓測(cè)工具一跑就會(huì)把連接池打滿建議配置到300以上。第三是JVM的GC日志觀察Full GC頻率如果太高說(shuō)明堆內(nèi)存設(shè)置不合理。我把這些檢查項(xiàng)整理成了一個(gè)部署檢查清單每次部署新項(xiàng)目都按這個(gè)順序過(guò)一遍防火墻端口是否放行、數(shù)據(jù)庫(kù)是否可遠(yuǎn)程訪問(wèn)、后端進(jìn)程是否守護(hù)運(yùn)行、Nginx是否配置反向代理、靜態(tài)資源能否訪問(wèn)、接口能否通過(guò)域名請(qǐng)求。6. 項(xiàng)目復(fù)盤(pán)這套系統(tǒng)還能怎么擴(kuò)展6.1 換用MyBatis-Plus到底能省多少事項(xiàng)目完成之后我把Mapper層整體換成了MyBatis-Plus做了一個(gè)對(duì)比實(shí)驗(yàn)。同樣的分頁(yè)查詢用MyBatis-Plus的Page對(duì)象加LambdaQueryWrapper代碼量確實(shí)減少了大概四成不再需要手寫(xiě)XML里的動(dòng)態(tài)SQL標(biāo)簽簡(jiǎn)單查詢一句lambda表達(dá)式搞定。如果你追求開(kāi)發(fā)效率MyBatis-Plus確實(shí)值得用。但如果你還在學(xué)習(xí)階段我強(qiáng)烈建議先用原生MyBatis把動(dòng)態(tài)SQL、ResultMap、多表查詢這些底子打好再切換效率方案否則出了問(wèn)題都不知道從哪排查。6.2 進(jìn)階方向地圖、Redis和對(duì)象存儲(chǔ)這套系統(tǒng)繼續(xù)擴(kuò)展的方向很清晰。第一是接地圖SDK在景點(diǎn)詳情頁(yè)展示景點(diǎn)位置在旅游線路頁(yè)展示線路軌跡這個(gè)只要申請(qǐng)地圖開(kāi)放平臺(tái)的密鑰前端引入對(duì)應(yīng)的JavaScript庫(kù)就能實(shí)現(xiàn)數(shù)據(jù)模型已經(jīng)預(yù)留了經(jīng)緯度字段。第二是引入Redis做緩存和熱點(diǎn)數(shù)據(jù)加速比如首頁(yè)輪播圖、景點(diǎn)列表熱門(mén)數(shù)據(jù)緩存起來(lái)后數(shù)據(jù)庫(kù)壓力會(huì)明顯下降。第三是把本地圖片存儲(chǔ)替換為MinIO或云對(duì)象存儲(chǔ)解決單機(jī)磁盤(pán)容量和訪問(wèn)帶寬的問(wèn)題。如果要做視頻類內(nèi)容也可以參考Vue播放m3u8這類視頻流方案的集成方式把景區(qū)宣傳視頻嵌進(jìn)詳情頁(yè)。6.3 給準(zhǔn)備復(fù)用源碼的朋友的建議如果你打算在這個(gè)項(xiàng)目源碼基礎(chǔ)上做二次開(kāi)發(fā)或改造我有幾條實(shí)際建議。第一數(shù)據(jù)庫(kù)SQL文件和Redis的配置項(xiàng)都在源碼目錄里有導(dǎo)入后記得修改application.yml里的數(shù)據(jù)庫(kù)密碼和IP地址。第二前端管理端的賬號(hào)是初始化時(shí)手動(dòng)寫(xiě)入數(shù)據(jù)庫(kù)的登錄時(shí)密碼經(jīng)過(guò)BCrypt加密不要直接用明文SQL插入否則登錄會(huì)失敗。第三運(yùn)行項(xiàng)目前最好先按照我前面說(shuō)的流程把環(huán)境確認(rèn)一遍JDK版本、Maven版本、Node版本、MySQL版本每一步都用命令行驗(yàn)證避免浪費(fèi)一下午在環(huán)境配置上。我在實(shí)際運(yùn)行中發(fā)現(xiàn)前后端分離項(xiàng)目真正花時(shí)間的不是寫(xiě)代碼而是調(diào)通鏈路從瀏覽器發(fā)請(qǐng)求到Nginx到SpringBoot到MyBatis到MySQL數(shù)據(jù)再原路返回渲染整個(gè)過(guò)程每個(gè)環(huán)節(jié)都可能出問(wèn)題而多數(shù)問(wèn)題不在你自己的代碼里而在配置和環(huán)境的默認(rèn)設(shè)置中。所以調(diào)試時(shí)一定要習(xí)慣看完整報(bào)錯(cuò)堆棧一層層往下追而不是只看最上面那段異常描述。多踩幾次坑把每一個(gè)問(wèn)題的排查路徑記下來(lái)你的排錯(cuò)速度會(huì)隨著項(xiàng)目數(shù)量增長(zhǎng)得越來(lái)越快。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91ncm视频| 天天插天天很| 天天干,夜夜爽| 伊人久久婷婷| 色欧美一级| 亚洲激情色色| 碰碰操91| 激情六月婷婷| 亚洲色vA| 中文无码婷婷| 开心色色五月天综合| 天天操夜夜肏| 精品网站:999WWW| 狠狠爱婷婷爱| 爱草视频在线| 天天综合91入口| 丁香 久久| 五月婷婷中文字幕| 一二线视频 另类| 五月激情婷婷女| 成人在线视频一区| 97人妻碰碰中文无码久热丝袜| 丁香五月色播中文在线播放| 五月开心啪啪| 玖玖色综合| 婷婷色五月久久| 丝雨一区二区| 丁香色婷婷| av在线超清中文| 亚洲乱码日产精品BD| 亚洲精品午夜国产va久久成人| 色婷婷丁香社综合| 五月婷丁香| 色五月首页| 99热线观看9| 思思热在线| 丁香五月第四色88| 欧洲毛片基地c区| 开心五月天激情网| 丁香五婷婷| 99久久国产成人精品| 日韩三十六页| 丰满人妻一区二区三区| 99热思思| 五月久久亚洲| 色婷婷狠狠爱| 99久久精彩视频| 爱射综合| 五月丁香六月婷婷色日| 欧爱综合视频| 色色五月丁香| 九月色婷婷综合| 人妻久久久久久| 99热6这里只有精品| 人妻丰满精品一区二区A片| 免费试看小视频 99| 婷婷五月激情综合啪啪| 国产69精品久久久久999小说| 婷婷五月天堂| 国产成人va在线| 五月丁香久久呀| 少妇人妻人伦A片| 亚洲无码yw| 天天上天天爽| 亚洲免费看片| 99日精品视频| 超碰69天堂| 97热这里只有精品| 婷婷久久五月天丁香| 亚洲五月综合色播| 亚洲夜五月| 久久 中文 日本| 青青久在线视频免费观看| 99在线资源| 丁香五月激情视频在线| 色五月涩涩婷婷蜜桃| 69精品无码一区二区三区| 亚洲亚洲人成综合网络| 二色av| 天天透天天爱| 开心激情播播五月天| 丁香六月婷婷一区| 99久在线精品99re8热| 色五月激情婷婷| 亚洲性爱99| 久Se视频在线观看| 九九人人看| 久久精品夜色噜噜亚洲a∨| 色都都狠狠色都都色综合色| 91人人人人人| 麻豆WWWCOM内射软件| 色综合久久88色综合天天99| 99热天堂| 在线观看亚洲AV| 五月丁香六月婷综合成人综合| 丁香五月天激情婷婷丁香六月| 91打屁股视频网站| www.久久综合| 婷婷色五月丁香六月欧美啪| 97人人干人人操| 色色色色色五月| 99A片| 少妇熟女视频一区二区三区| 亚洲精品又粗又大又爽A片| 婷婷久久五月天| 丁香五月欧美色综合| 99性视频| 婷婷丁香五月天激情| 99视频只有这里精品| 成人欧美一区二区三区在线观看| 丁香五月激情婷婷激情| 开心五月婷婷激情网| 99区视频| 婷婷五月综合在线视频| 五月中旬婷婷丁香六| 噜噜噜噜噜日本视频| 日本精品在线噜噜噜| 久久精品4| 91网站黄| 久久婷婷五月综合97色一本| 色五月丁香五月五月婷婷| 久久婷婷五月天懂色| 97热精品| wWwCom夜操wwW| 丁香五月婷婷亚洲综合精品| 天天日天天做天天舔| 色综合九九| www.超碰在线| 丁香香五月激情免费视频| 激情网站五月| 亚洲综合丁香婷婷六月天| 久热这里只有精品在线观看| 涩涩婷婷五月| 五月天婷婷综合免费| 欧美黄色AA片哗啦啦啦| 五月色婷婷影院| 色色吧综合| 超碰99在线观看| 如何安全看伊人婷婷| 亚洲婷婷丁香五月在线| 激情宗合网激情五月天| 天天综合色| 婷婷色在线视频| 久久久久亚洲AV成人无码电影| www.五月婷婷| 国产精品99久久久久久久女警| 欧美成人AAA片一区国产精品| 久久人妻熟女一区二区| 色婷综合| 大香蕉五月天| 五月色精品| www,av好吊操| 99热日韩| 丁香六月婷婷色XXXX| 激情综合九| 午夜福利8055| Av狠狠色丁香婷| 色综合久久天天综合网 | 懂色AⅤ| 五月婷婷自拍| 色5月婷婷| 激情网五月天| WWW.久久久久久久久久久久久| 日韩欧美成人片| 激情五月综合网| 婷婷五月天在线观看av| 久久五月天网| 大陆极品少妇内射AAAAAA| 东京热五月婷婷| 五月亭大香蕉| 99久久99热| 99热777| 99热只有| 日韩av变天就操逼不卡区| 91精品久| 99在线观看这里都是精品| 伊人玖玖综合| 人妻性爱| 五月99久久| 婷婷在线视频| 五月婷激情影院| 色天天综合天天综合频道。| 天天狠天天叉| 伊人五月天| 国产三级在线播放| 综合综合色色| 久操福利| 在线色婷婷| 伊人久久婷| 天天cha成人综合网| 97性视频| 亚洲激情Av| 日韩啪啪视频| 亚洲久久激情| 春色激情| 少妇丁香婷婷 | 亚洲在线资源| 午夜av网| 高清无码中文字幕aVDV| 六月丁香五月天| 婷婷黄色网| 极品人妻VIDEOSSS人妻| 婷婷99狠狠躁天天| 色五月av| 1769在线观看欧美国产| 丁香五月天殴美激情| 亚洲婷婷基地| 日本操B片| 噜综合| 涩涩五月天| 色情终和网| 五月丁香婷婷色色| 日韩淑女人妻luan伦激情精品一区二| 激情5月婷婷| 亚洲综合在线视频| 激情丁香六月| 天堂成人久久| 六月份天丁香婷婷| 色婷综合| 女人天堂 AV| 99热综合| 99国产小视频免费观看| 久热伊人| 色婷丁香| 97碰碰在线看视频免费| 99精品超在线播放| 五月激情综合网| aaa久久久| 色久播播| 天天做天天爽| 亚洲综合网区| 人妻中文在线| 99热欧美在线观看| 五月丁香色综合| 91视频五月丁香| 婷婷五月色情天| 婷婷99综合| 亚洲无码影音| 日本激情五月| 丁香激情综合| 色综合天天天天做夜夜| 大香焦A∨| 五月综合777| 亚洲中文字幕av| 97视频91| 五月丁香香蕉| 99热 免费| 天天插天天射| 色国产五月| 色情成人五月天| 婷婷伊人中文字幕| 亚洲五月婷婷| 狠狠干总合| 色播丁香| 五月婷深深爱激情网| 丰满少妇猛烈A片免费看观看| 开心 五月 综合| 久久婷婷综合五月天| 精品成人在线观看| 精品色色| 视频这里只有精品16| 色色色热| 婷婷六月天亚州| 色色色色色色综合网| 天天天天天操| 人人综合色| 99在线精品视频免费观看20| 久久图色4| 激情五月天激情五月天| 99毛片| 99九九在线精品热动漫| 开心婷婷中文字慕| 搡BBBB搡BBB搡18 | 欧美色爱五月天| 九九热青青草| 久久婷婷五月丁香网| 亚洲99综合| 丁香色色色| 国产真实乱对白精彩| 色婷婷视频| 亚洲妇女熟BBW| 丁香五月婷婷亚洲另类| 月色色综合婷婷网| 亚洲中文av| 大香蕉久操| 丁香五月欧美| 五月色丁香激情| 免费观看高清无码| 色呦呦美女| 91久久婷婷| 国产成人网| 天天干夜夜b| 欧美色必爱| 激情五月天婷婷在线网址发给我| 六月丁香婷婷视频综合在线观看| 色综合久久之分久久| 五月婷婷综合在线观看| 美女黄频aⅴ视频| 久久99热这里只有精品| 色五月色综合| 久青操| 天天干天天拍| 终合激情网| 97碰碰在线观看视频| 91欧美| 丁香婷婷射| 一本狠婷婷综合| www久久久久久久97| 婷婷激情五月天网站| 五月天开心色色网| 97久久久久| 狠狠狠狠狠狠草| 天堂网亚洲色图| 超碰人人操人人干| 丁香五月亚洲| 婷婷色女| 深爱综合网| 色色aⅤ網| AVV黄| 五月天伊人| 色婷婷精品| 国产免费一区二区在线A片视频| 色无婷婷| 久久性爱视频网站| 天天艹夜夜艹| 五月婷婷m| 96精品久久久久久久久| 五月天丁香婷婷视频网址| 在线中文亚洲| 精久久色| 亚洲激情综合色站| 干一干xxxx| 少妇被躁爽到高潮无码文| 日韩aaa| 五月丁香综合网色欲| 九九热在线视频观看免费10| 狠狠精品干练久久久无码中文字幕| 五月婷婷五月| 日逼免费视频| 天天天久久久| 精品亚洲国产成AV人片传媒| 亚州男人天堂婷婷五月| 超碰狠狠操| 久久综合五月天| 天堂五月婷婷| 婷婷综合| 婷婷射图五月天| 五婷婷综合网| 婷婷五月六月激情| 亚洲精品乱码久久久久99| 69综合在线| 91男人操女人视频| 亚洲色五月| 99资源在线视频| 亚洲中文乱字字幕线在永久| 五月丁香综合网色欲| 精品99在线看| www久久久久久| 五月婷婷爽爽爽| 99热这里只| 色综合久久88色综合天天99| 婷婷五月骚厕所| 青青草a在线| 五月丁香琪琪| 色色综合激情| WWW.久久久久久久久久久久久| 青草视频在线观看视频| 成人丁香五月| 99久久激情视频| www.天天干| 色五月婷婷五月丁香五月| 全网最新网黄大秀直播高清,主播国产录屏在线 | 啪啪色激情五月天| 九久9精品| 天天射天天干天插色综合| 九一九九黄色| 99国产97在线,| 成人在线二区| 色99综合色88| 五月丁香色停停啪啪啪| 国产成人精品一区二区三区视频 | 色五月丁香婷婷| 六月丁香婷婷色狠狠久久| 色五月超碰| 成人在线日韩欧美| 97五月久久丁香婷婷| 婷婷激情五月天激情小说| 97超碰,人人舔,人人操,人人摸| 操碰97| 99久久网站| 亚洲综合久| 色综合久久88色综合天天看| 九月婷婷激情| 五月丁香婷婷基地| 婷婷五月天视频| 99热精品中文字幕| 色玖玖| 天天综合网站| 97亚洲视频在线| 欧美日本韩国亚洲| 五月天色软件| 婷婷影院欧美| 久久最新色| 大香av| 狼人婷婷综合| 综合啪啪| 五月婷婷综合网在线播放| 无码一区二区日韩| 色亚洲婷婷| 偷拍视频五月天| 五月婷婷精品视频| 久久激情五月天| 99热免| 天天摸天天舔| 亚洲精品成人| 黑人糟蹋人妻HD中文字幕| 欧类av怡春院| 久久爱综合| 99热9| 久久一热| 亚洲国产精品VA在线看黑人| 久久久久久9热不雅视频| 免费成片在线观看| 国产在线中文字幕| 天天做天天爱天天爽在| 久久婷婷五月天亚洲欧美| 久久这里都是精品| 久月婷婷| 国自产拍偷拍精品啪啪一区二区| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | www.9色色色| 五月丁香综合中文| 丁香五月网站| 天天天摸夜夜夜玩| 激情综合网激情五月天| 嫩BBB槡BBBB搡BBBB| 欧美日韩成卜| 夜夜爱伊人| 丁香五月婷婷无码AV| 五月天综合区| 免费观看大片视频 丁香婷婷 六月欧美| 欧美大香蕉视频| 五月天色区| 夜夜嗨一区二区三区直播内容 | 91久久久久久久久久| 久九色| 五月丁香综合久久| 五月婷婷免费在线| 激情综合另类| 99精品久久久| 5月丁香美女影院| 91大屁股精品| 这里只有精品99www| 婷婷婷婷婷婷婷五月丁香| 99自拍视频在线观看| 国产精品99久久久久久久女警| 草久私拍| 综合在线网| 99久久综合| 99re8这里只有精品99re8热视频| 国内久久婷婷| 五月天天天操天天爽夜夜操| 婷婷五月天网| 少妇性BBB搡BBB爽爽爽视頻| 天天肏高清在线| 五月婷婷这里都是精品| 91人人网| 色99xx| 开心五月婷婷五月| 丁香五月天激情免费在线观看AV777 | 91久久电影| 丁香久久AV| 国产精品色色| 亚洲AV成人无码精品| 亚洲中文字幕AV| 婷婷射图五月天| 99热自拍| 日韩无码性爱| 五月天婷婷色小说| 99热在线播放| 婷婷色色丁香五月天| 激情性爱婷婷| 婷婷五月天com| 欧美熟女99| 超碰免费电影| 色婷婷五月网| 婷婷五月天av| www色色com| 激情五月天com| 亚洲亚洲人成综合网络| 伊人干综合| www.com五月天| 思思久久99热只有频精品66| aⅤ79成人片| 丁香婷婷色五月激情综合| 亚洲精品一区中文字幕乱码| 综合亚洲色色| 久久狼人天堂| 久婷婷五月天影院| 五月婷婷,六月丁香| 日本精品人妻无码77777| 婷婷五月天激情网| 99精品视频偷拍| 日韩欧美婷婷丁| 婷婷激情五月天亚洲综合| 极品人妻VideOssS人妻| 色V狠狠的干| 精品人妻伦一二三区久久| 丁香九月激情在线视频| 丁香五月在线视频黑人| 久久视频在线视频| 五月天激情在线视频| 99啪啪视频| 99久久久久久www| 五月天激情无码| 免费碰碰视频久| 五月丁香激情婷婷综合字幕| 婷婷伊人| 亚洲综合新99视频| 丁香五月激情综合| 九九热这里精品| 五月丁香综合激情网| 久久久精品AV| 色热久| 九九人人自拍| 色偷偷色婷婷| 九色91美女| 天天射影院| 丁香 亚洲 久久| 狠狠色丁香| 久久99三级在线视频| 久久99激情丁香婷婷小说网| 综合色视频| 五月天综合婷婷| 婷婷综合玖玖五月| 99热手机在线精品| 日本色久| 婷婷六月色开| 婷婷丁香五月天婷婷| 久久99综合| www.狠狠| 成人综合网站| 五月天玖玖狠狠色色| 丁香五月激情图片婷婷| 婷婷五月成人系列| 九九色区| 色婷婷综合网站| 久久久这里都是精品| 99热在线观看免费精品| 色五月开心五月激情五月| 久久AAAA片一区二区| 精品人妻久久久| 超碰操日| 中文在线成人| 色婷婷基地| 日韩无码成人电影| 亚洲综合丁香婷婷六月天| 婷婷丁香红五月91C| 婷婷噜噜| 性爱五月丁香| 五月丁香免费看| 五月天免费色| 亚洲区1| 日熟女| 99热精品在线播放| 国产精品美女久久久久AV超清| 五月色婷婷激情| 婷婷久久欧美| 操久久网| 97干婷婷五月天| 亚洲AV日韩AV永久无码网站| 五月久久婷婷丁香| 色9色| 久久精99| 亚洲九九夜夜| 久久在线人妻| 97性视频| 人与禽A片啪啪| 五月丁香六月婷婷国产视频| 九九久久99| 99超超碰| 一级精品999WWW| 五月天色婷婷激情综合| 热久91| 丁香婷婷啪啪| 五月天婷婷激情春色小说| 97超碰欧美中文字幕| 91狠狠综合久久久| 五月婷久久在线| 丁香婷婷91在线观看视频| 婷婷五月天福利| 五月天激情社区| 99热综合网| 人妻丰满精品一区二区A片| 夜夜干夜夜操| 狠狠夜夜五月丁香| 97干在线看| 91九色精品熟女内射| 五月丁香婷爱在线| 人妻狠狠操| 欧美人人草草| 日日夜夜干| 九九热视频精品| 人妻操逼视频。| 色爱爱综合网| 91精品91久久久中77777| 国产视频婷婷| 婷婷丁香一月| 欧美熟女99| 亚州成人综合在线| www狠狠| 人人操五月天| 婷婷色色播五月天| 99自拍视频在线| 五月丁香六月停停停| 成人va在线播放| 在线观看中文字幕| 丁香婷婷射| 九热...av| 五月婷婷性爱网| 日本色婷婷| 激情影院丁香五月| 国产亚洲精品久久久久久郑州| 少妇性BBB搡BBB爽爽爽视頻| 99这里只有精品| 思思久久96热在精品国产,| 91尤物九色在线| 激情五月婷婷色综合| 激情五月天色播| 亚洲婷婷欧美婷婷| 这里只有精品免费视频在线观看| 激情文学天天| 久久色情| 五月婷婷久久大香蕉| 久9热在线免费观看| 国产亚洲精品AAAAAAA片| 日本三级中国三级99| 婷婷色五月综合| 五月丁香激情婷婷综合字幕| 性爱综合网| 亚洲色色五月天| 九九99热精品| 婷婷五月久久| 色五月激情五月| 夜夜骑夜夜操| 丁香九月婷| 日日干夜夜干| 天天干夜夜想| 婷婷色成人| 人人干AV| 五月丁香色播| 先锋资源 996| 天天日夜夜草进麻麻的子宫| 99热6这里之有精品| 九九精品网站| 黄色99视频| 任你爽视频| 大香蕉婷婷色| www.五月婷婷| 伊人久久五月天| 婷婷五月丁香啪啪| 丁香六月色婷婷| 伊人www22综合色| 性热视频99精品| 99九九热视频免费| 第四色网婷婷| 99热综合色图| 久久网日本| 九月影院義母在线播放| 色五月色五天色情网| 精品成人在线观看| 在线成人网站| 亚洲五月天,激情视频| 久热久| 五月色在线| 久久婷婷六月| 激情综合网,婷婷| 五月 丁香 欧美| 人妻在线中文字幕久久| 丁香五月婷婷成人网| 五月丁香在线偷拍视频| 婷婷五月色综合| 婷婷色爱| 婷婷五月丁香色综合| 婷丁香五月天| 色婷五月| 99噜噜噜在线播放| 六月五月天婷婷涩播在线| 91色五月在线观看| 大香婷婷| 成人av在线电影| www.主妇. com| 五月婷婷丁香五月亚洲色| 五月丁香婷中文字幕| 色婷婷综合网站| 精品无吗va视频免费观看| 色婷婷激情四射视频| 色999五月色| 国产亚洲99久久精品| 亚洲性爱AV在线| 亚洲激情六月丁香| 色狠狠综合网| 99亚洲综合| 国产精品久久久丁香五月八戒视频| av中文网站| 天天天在线观看| 人人爱国产| 天天热夜夜操| 夜夜撸夜夜骑| 九九热在线视频观看| 风流少妇A片一区二区蜜桃| 毛片九九九九九九九九18| 成人网页在线观看| 超碰免费在线| 26UUU欧美激情一区二区| 9999热这里只有精品| 99精品热| 五月丁香香蕉| 久久99大| 色99色| 激情综合青草| 亚洲人妻五月丁香婷婷| www.91在线观看| 日本三级日本三级99| 亚洲成人网址在线观看| 色婷婷丁香九月| 九九免费精品在线视频| 色99热| 97久久视频| 中文字幕精品无码一区二区| 超碰激情五月| 激情综合五月激情XXXX| 天天天天天天噜| 久久 婷婷 五月天| 国产乱子轮XXX农村| 97成人超碰免| 丁香五月天婷婷在线视频| 亚洲人人操BD| 色欲婷婷五月天| 久久久婷婷五月天| 婷婷色色丁香五月天| AV五月丁香| 色欲一二三| 深爱激情五月天| 91九色在线观看免费| 久久色五月天| 婷婷色五月在线视频| 97干在线视频| 色色丁香五月天社区| 丁香色六月婷婷| 婷婷五月天激情电影小说| 狠狠综合| 五月天婷婷狠狠| 欧洲亚洲欧洲99久久| 婷婷五月色色| a性生活久久无| 日韩欧美一级大黄网站| 欧美丁香婷婷五月天| 婷婷五月影院| 婷婷九月亚洲| 午夜婷婷五月天| 激情综合五月婷婷| 99啪啪网| 国产VA亚洲VA96| 大香蕉人妻| 99热1| 99思思热只有在这里看| 91操人| 在线资源av-超碰中文在线-成人AV| 天天日人人爽| 这里只有精品免费视频| 色婷六月| 五月婷婷丁香综合| 怡红院AV亚洲一区二区三区H | 激情小说婷婷五月| 国产乱妇乱子在线播视频播放网站| 色欲久久久久久综合网综合网| 五月天另类小说久久小说网| 性爱久久| 91一起艹| 久久人妻人人| 在线一起草av| 午夜九九电影| 色色色综合网| 91九色国产| 九月色婷婷综合| 日本在线观看99| 国产美女精品| 思思99热| 9久视频| 天天橾夜夜爽| 免费看欧美成人A片无码| 欧美大奶熟女噜噜噜噜| 婷婷的99视频网站| 日韩av在线免费观看| 99热成人在线观看| 五月婷婷香蕉| 深爱激情四射| 欧美丰满熟妇BBB久久久| WWW.99热| www色色色com| 久久婷婷国产| 激情五月综合网最新| 五月香蕉网| 五月丁香六月婷婷在线| 色色五月天 亚洲| 五月婷丁香亚洲| 日本精品人妻无码77777| 99re在线观看视频| 狠狠爱综合| 五月婷六月综合在线观看| 综合久久9| 99手机在线精品视频| 激情五月婷黄版| 操操操91| 类似婷婷激情综合网站| 婷婷亚洲久久| h亚洲| 在线伦子99热| 99热丁香| 青青草色在线视频观看| 激情久久综合| 久久久久9| 天天操夜夜夜拍拍拍| 色激情五月天| 99热6这里之有精品| 色情综合| 五月天婷婷伊人| 国产看真人毛片爱做A片| 色五月涩涩婷婷蜜桃| 精品亚洲国产成人A片在线鸭王| 怕怕av| 激情内射人妻1区2区3区| 久久综合网免费视频| 亚洲日本韩国| 亚洲VA在线| 久久色午夜在线导航| 色色亚洲五月天| 国产精品色婷婷99久久精品| 婷婷九月综合| 人人爽人人射-美女久久久久久久久久-成人AV| 色99网| 色婷婷六月激情| 丁香午夜天| 欧美综合激情五月丁香| 99久操视频| 99乱视频| 粉嫩av蜜桃av蜜臀av| 日韩啊啊啊| 九九亚洲小视频| 91久女| 激情综合色婷婷啪啪六月天| 碰碰女| 婷婷六月色| 婷婷伊人久久综合| 91色在线 | 日韩| 五月天激情小说| 成人色情五月天婷婷丁香| 日本波多野结衣视频| 橾逼网| 日本色婷婷| 欧美性做爰大片免费看办公室| 色综合综合网| www热久久yy9| 伊人91| 欧洲亚洲免费视频区| 草榴视频黄色网| 久久婷婷成人| 草美女在线观看视频在线播放| 91狼友视频在线观看| 久久激情视频| 青柠影视免费高清电视剧| 四月婷婷丁香| 日韩婷婷| 影音先锋自拍网| 韩国久久少妇视屏| 九九久久偷拍| 大香蕉久热| 99亚洲综合| 9999热精品| 五月婷综合| 五月综合六月婷婷| 91色逼| 国产精产国品一二三在观看| 中文av网站| 777.色色| 色在线99| 性无码专区无码| 五月婷婷色播| 九九热视频网站| 色婷久| 99只有精品| 五月婷婷婷丁香播| 综合欧美五月婷婷| 亚洲黄色操逼| 在线只有精品| 五月天五月天激情网| 99色在线视频观看| 四季日韩AV无码综合| 激情五月婷| 99国产视频网| 色综久久久| 色在线99| 色色欧美色色色| 色婷婷综合网站| 国语精品探花| 激情丁香五月婷| 五月丁香久久丝袜啪啪| 欧美性猛交99久久久久99按摩| 日本一级特黄大片AAAAA级| 森林影视大全,最好看的2019年视频 | 七月丁香婷婷 色色| 无码激情| 欧美色婷婷| 天天草天天舔| 五月丁香激情综合| 国产亚洲AV人片在线| 日日干夜夜干| 久久色亭亭五月天| www.五月激情红色| 婷婷激情肏屄网| 日韩情色在线观看| 国产毛片操B| 婷婷狠狠操| A在线观看| 天天狠狠干| 婷婷五月天无码视频| 超碰九色| 2022人人操人人看| 精品五月花| 国产精品国产成人国产三级| 99久re热视频精品98| 五月丁香成人网| 六月丁香婷婷色69| 开心激情色婷婷五月天| 啪啪综合| 九九色大香蕉| 五月丁香六月婷婷综合| wwwav大香蕉| 中字幕视频在线永久在线观看免费| 超碰亚洲天堂| 欧美图片丁香五月天| 先锋影音男人的天堂AV| 丰满少妇猛烈A片免费看观看 | 五月天社区| 啪啪 综合网| 婷婷五月视频| 79色色免费| 日韩啪啪视频| www.91.com黄| 欧美三级黄色片久久| 丁香社92视频| 97超级碰| 无码少妇高潮喷水A片免费| 97干在线视频| 久色| 精品色| 99热99精品| 国产熟女一区二区三区五月婷| 狠狠色丁香乆乆| 综合婷婷| 色在线视频网2025| 国产XXXX搡XXXXX搡麻豆| 99热精品超碰| 99福利视频| 五月天婷婷激情| 成人AV综合在线| 五月人妻婷婷| 五月天丁香综合| AV六月丁香| 色五月丁香婷婷综合| 91丨九色丨白浆| 六月丁香AV| 很很操96| 久久伊人大香蕉| 9久久精品视频| caopeng97日韩| 99久久久99久久91熟女| 婷婷黄色网| 激情综合五月.....| www.超碰| av第一二区| 婷婷五月天狠狠搞干| 五月天激情小说网| 狠狠干狠狠色| 五月丁香操婷逼| 永久天堂日本| 亚洲一区二区无码蜜乳av| 国产美女视频久| 丁香九色不卡aaa| 婷婷丁香基地在线| 久操热线| 91蜜桃婷婷狠狠久久综合9色| 色五月激情综合| 狠狠色婷婷丁香五月| 丁香五月乱中文字幕| 大地9中文在线观看免费高清| 婷婷丁香五月天婷婷| 久热九九| 国产激情av| 日韩淑女人妻luan伦激情精品一区二| 噼里啪啦在线观看免费完整版视频| 激情综合色| 婷婷五月丁香基地| 五月天激情.com| 日本五月婷婷| 色综合网址| 99色精品| 色噜噜丁香| 丁J香六月首页| 狼人狠狠操| 七七九九色色| 久久这里只有精品16| 婷婷五月天久久| 色播五月婷婷| 国产毛多水多女人A片| 99久久久精品| 99久久99久久| 国产夫妻操逼内射视频| 开心五月天激情网站| 66色在线日韩| 99久久综合网| 色婷婷91激情小说| 九热久| 色色色视频免费无码 | 99丁香五月| 在线资源av-超碰中文在线-成人AV| 色色婷| 99久久这里只有精品免费官网| 丁香婷婷成人在线播放| 六月久久狠狠| 久久网日本| 任你躁XXXXX麻豆精品| 亚洲无码九九九| 色综天天综合| 中文字幕乱轮| 99久久婷| 亚洲精品V天堂中文字幕| 五月天婷婷激情在线色图| 少妇激情基地| 婷婷色爱| 中文字幕永久免费| 激情五月天久久| 亚洲综合五月天婷婷丁香| 天天草婷婷五月| 丁香婷婷月| 噼里啪啦完整版中文在线观看| 五月天伊人久久| 久久久人妻不卡| 久久五月天激情| 在线99热| 伊人青涩网| 丁香五月天信号| 热99精品视频| 人妻22p| av一区二区电影免费在线观看| 99玖玖精品| 丁香香五月激情免费视频| 婷婷免费视频| 婷婷丁香成人| 欧美人人女女精品综合五月天| 无码中文一区二区三区| 99这里有精品| 男人大jjc女人免费视频| 五月天激情四射| 天堂AV在线看| 91狠狠综合久久| 九色 在线| 丁香六月欧美| 清色五月天| 狼人久草| 亚洲电影中文字幕| 热久久99视频| 人人操av| 成人无码精品1区2区3区免费看| 久久新地址| 天天色天天色天天色天天色天天色天天色| 中文AV网| 五月天婷婷狂暴白浆| 六月丁香啪啪| 在线观看亚洲AV| 婷婷六久久| 五月丁香在线视频观看| 大香蕉久热| 91久久九九| 激情婷婷丁香色五月综合| 狠狠综合| 99干日本| 开心激情网五月| 国产真人做爰视频免费| 九九热re99re6在线精品| 99爱精品视频| 97人人射| 久久性视频| 天天操天天插| 婷婷丁香五月天操逼| 色婷婷综合五月| 99人人干| 婷婷综合网| a久久| 激情丁香五月综合| 丁香九月婷婷色| 天天做天天爱天天高潮| 婷婷天堂综合| 日本一级特黄大片AAAAA级| 久久久久久久久久婷婷| 天天舔天天插天天干| 亚洲精品一区中文字幕乱码| 99色激| 欧美精品99| 啪啪丁香五月| 久久婷婷五月天激情| 天天影院色| 久操人妻| 成片免费播放| 丁香五月香蕉| 久久精品系列| 激情 婷婷| 婷婷五月天在线观看| 婷婷六月丁综合| 亚洲成人人人操| 婷婷五月欧美AA片免费| 久久深爱激情网| 91干婷婷| 六月丁香激情婷婷| 热思思九九| 五月丁香婷婷啪啪综合网| 99年操人人爽| 激情五月六月婷婷综合啪啪| 精品一二三区久久AAA片| 亚洲成色综合网站免费观看| 婷婷狠狠操| 五月噜噜噜色综合| 九九人人操| 亚洲色婷婷99一9|| 五月天开心网| 天天更新天天亚洲| 激情五月婷婷| 啪啪干伊人婷婷| 日韩一级一片内射视频4K| 成年人99热| 日木WWW视频| 5月婷婷激情网| 色原狠狠综合| 丁香五月天堂| 色九月欧美| 中文字幕在线免费观看视频| jiujiu热在线视频| 天天干天天操天天爽| 六月婷婷五月丁香首页| 中文字幕日产A片在线看| 激情5月婷婷狠狠干| AA片在线观看视频在线播放| 天天射夜夜骑| 久在线综合69| 五月天偷拍| 久99久视频| 久操操| 五月婷婷,六月激情| 婷久久高清| 丁香五月激情五月| 久久久性爱视频| 婷婷成人视频| 久久激情天堂| 在线看av| 2020日日干| 狠狠操综合| 婷婷色婷婷| 俺去也在线www色官网| 在线中文字幕免费视频| 俺去也婷婷| 色情综合网| 婷婷五月天av| 五月婷婷综合潮喷| 久草五月天| 色5月婷婷色| 青草网在线观看| 成人国产欧美大片一区| 婷婷五月天欧美| 亚洲午夜电影| 国产 码在线成人网站| 久久久久人妻中文| 国产熟女大叫受不了| 九九色综合九九色| 婷婷涩涩网| 激情综合在线播放| 久婷| 丁香五月成人论坛| 日韩AV免费| 亚洲午夜一区二区| 久久精品爱爱| 久久性都花花世界成人免费视频| 国产午夜精品一区二区| 99久久婷婷国产综合精品青桔| 亚洲欧洲中文日韩久久AV乱码| 日本人人xxx| 久久五月婷婷电影| www久久久久久久久久久| 欧美va在线观看| 婷婷欧美色| 色色999三级片| 五月天婷婷av| 激情五月天免费视频| 91精品婷婷国产综合 | 婷婷五月激情六月丁香| 国产超碰av| 337p大胆噜噜噜噜噜91Av| 五月婷婷干| 色玖玖综合网| 96丁香婷婷九月蜜桃综合久久| 五月色丁香| 六月色婷婷欧美| 91久久色| 少妇人妻人伦A片| 99热首页| 婷婷五月天,影院| 97热在线精品| 色婷婷99| 99这里| 五月青青草综合| 在线观看av网站| 综合网五月| 久久久这里有精品| 婷婷五月天Av| 色婷婷A| 性爱网五月婷婷| 色五月婷婷久久| 色婷婷五月天视频网站| 五月天激情在线视频| 色婷婷久久视屏| 99riav 亚洲| 91chinese在线| 色五月在线播放| 凹凸7777操操操| 五月婷婷深深爱| 婷婷99狠| 天天综合网站| 婷婷五月天小说| 九九久久五月天综合伊人| 婷婷午夜| 五月天伊人久久久久| 国产乱妇无乱码大黄AA片| 色99视频| 五月丁香婷婷导航视频| 9999色色色色| 激情婷婷| 免费AV在线| 七七色综合| 三人荫蒂添的好舒服A片 | 亚洲夜五月| 丁香六月婷婷久久高清| 北条麻妃伊人| 国产在线aaa片一区二区99| 色99热| 玖玖热视频| 色999;丁香五月| site:minyis.com| 9久热在线视频精品| 色婷婷另类| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 婷婷五月丁香五月天| 色综天天综合| 婷婷五月色播天| 人妻内射一区二区在线视频| 久久人人妻| 五月香婷婷|