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

ARTICLE DETAIL

資訊詳情

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

基于SpringBoot+Vue的健身俱樂部前后端分離系統(tǒng)設(shè)計與實現(xiàn)

基于SpringBoot+Vue的健身俱樂部前后端分離系統(tǒng)設(shè)計與實現(xiàn) 前后端分離健身俱樂部網(wǎng)站系統(tǒng)這個項目我做過類似的好幾個學(xué)員和粉絲也拿這類選題當(dāng)畢業(yè)設(shè)計或者練手項目。說實話SpringBoot Vue MyBatis MySQL這一套組合放在今天依然是前后端分離項目里最有代表性的技術(shù)棧之一。它不像微服務(wù)那套那么重但麻雀雖小五臟俱全RESTful API、數(shù)據(jù)持久化、JWT鑒權(quán)、跨域處理、前端路由守衛(wèi)、反向代理這些核心概念全都能覆蓋到。如果你正準(zhǔn)備搞一個能寫進簡歷、能跑起來演示的完整系統(tǒng)這個方向非常合適。這篇就圍繞健身俱樂部這個業(yè)務(wù)場景把整個系統(tǒng)的設(shè)計思路、核心模塊、關(guān)鍵實現(xiàn)和部署過程全拆開來講。包括后端接口怎么組織、數(shù)據(jù)庫表怎么設(shè)計、前端頁面怎么對接、打包部署要注意哪些坑每一步我都會把選擇背后的理由說清楚。不管你是有一定基礎(chǔ)的開發(fā)者想找參考還是剛學(xué)完框架想做實戰(zhàn)項目這篇都能幫你省下不少彎路。1. 項目整體設(shè)計與思路拆解1.1 為什么選健身俱樂部這個業(yè)務(wù)場景做項目最怕的就是業(yè)務(wù)太抽象比如“電商系統(tǒng)”“管理系統(tǒng)”這種邊界模糊做著做著就不知道自己該實現(xiàn)什么了。健身俱樂部這個場景好在業(yè)務(wù)閉環(huán)非常清晰核心鏈條就是會員注冊 - 查看課程 - 預(yù)約課程 - 教練排課 - 上課簽到 - 消費結(jié)算。這個閉環(huán)涵蓋了最常見的CRUD操作還牽扯到一對多、多對多關(guān)系以及訂單狀態(tài)流轉(zhuǎn)這類稍微進階一點的數(shù)據(jù)處理。另外健身俱樂部的業(yè)務(wù)天然適合做權(quán)限區(qū)分。會員看到的是課程列表和自己預(yù)約記錄教練看到的是自己的排課和學(xué)員列表管理員則需要管理會員、審核課程、查看營收統(tǒng)計。有了三種角色JWT鑒權(quán)、路由守衛(wèi)、按鈕級權(quán)限控制這些技術(shù)點就能全部落地上而不是空談概念。1.2 前后端分離架構(gòu)的優(yōu)勢在哪里早年的Java Web項目是JSP Servlet那一套前端頁面寫在Java項目里模板渲染交給服務(wù)端技術(shù)和業(yè)務(wù)耦合得非常緊。換個前端樣式要動后端代碼前端工程師和后端工程師經(jīng)常在一個項目里互相踩腳。前后端分離的本質(zhì)是把“展示邏輯”和“業(yè)務(wù)邏輯”徹底拆成兩個獨立工程中間只通過JSON格式的HTTP接口通信。這種架構(gòu)帶來的直接好處有三個。第一前端可以獨立部署Vue打包出來就是一堆靜態(tài)文件扔給Nginx托管就行完全不需要Java運行環(huán)境。第二后端接口可以被多個客戶端復(fù)用同一套API既給Web用以后要做小程序或者App也能直接用。第三團隊協(xié)作效率高前端用Mock數(shù)據(jù)開發(fā)后端用Postman調(diào)試接口兩邊只要約定好接口文檔就能并行開工。1.3 技術(shù)選型的理由和替代方案SpringBoot MyBatis MySQL在這個項目里是最順手的組合。SpringBoot不用多說自動裝配和Starter機制大幅簡化了配置一個可運行的Web服務(wù)幾行代碼就能起來。MyBatis的優(yōu)勢在于SQL可控復(fù)雜查詢可以手寫SQL優(yōu)化而且動態(tài)SQL在按條件篩選這種場景下非常好用。MySQL穩(wěn)定可靠學(xué)習(xí)成本低部署簡單作為中小型項目的數(shù)據(jù)庫完全沒有壓力。前端選Vue是因為它的漸進式框架特性很契合這類項目。從Vue 2到Vue 3Composition API的引入讓邏輯復(fù)用更清晰腳手架項目默認幫你配好了Vite或者Webpack路由和狀態(tài)管理都有官方的配套方案。當(dāng)然你完全可以用MyBatis-Plus替代MyBatis單表CRUD幾乎不用寫SQL或者用Spring Data JPA那是另一套風(fēng)格。這些不是誰比誰好關(guān)鍵是你對哪套更熟。我建議學(xué)習(xí)階段盡量用原生MyBatis把SQL和映射關(guān)系親手寫一遍理解了底層后再用增強框架認知會扎實很多。提示既然是做完整系統(tǒng)別只把它當(dāng)練習(xí)。如果你打算寫進簡歷一定要把業(yè)務(wù)模塊梳理清楚并且保證項目能在新環(huán)境下一鍵跑起來。跑不起來的項目寫再多技術(shù)點都白搭。2. 數(shù)據(jù)庫設(shè)計與后端核心實現(xiàn)2.1 數(shù)據(jù)庫表結(jié)構(gòu)怎么規(guī)劃健身俱樂部系統(tǒng)的表設(shè)計重點在于把業(yè)務(wù)核心鏈路的數(shù)據(jù)模型理清楚。我一般會分三組來設(shè)計基礎(chǔ)信息組、業(yè)務(wù)流轉(zhuǎn)組、訂單支付組?;A(chǔ)信息組包括用戶表、會員信息表、教練信息表、課程表。用戶表保存登錄賬號、密碼加密存儲、角色類型這三要素角色用int型字段區(qū)分0是管理員1是教練2是會員。會員信息表關(guān)聯(lián)用戶表擴展存身高、體重、體脂率、會員等級這些健身屬性。課程表主要字段是課程名稱、封面圖、分類、簡介、價格、上課地點。業(yè)務(wù)流轉(zhuǎn)組是重點包括課程預(yù)約表和教練排課表。預(yù)約表要和課程表、用戶表建立關(guān)聯(lián)記錄約課時間、狀態(tài)。狀態(tài)字段也是用int表示0待上課、1已上課、2已取消。教練排課表則需要設(shè)置每個時間段的可約人數(shù)上限這個字段在后續(xù)實現(xiàn)預(yù)約校驗時很關(guān)鍵。訂單支付組負責(zé)消費記錄訂單表包含訂單號、用戶ID、商品類型、金額、支付狀態(tài)、支付時間、支付方式。另外再加一個操作日志表記錄誰在什么時間改了什么數(shù)據(jù)后臺管理時能看到操作痕跡。創(chuàng)建表的時候有幾個細節(jié)容易忽略。第一所有表都建議加create_time和update_time字段用datetime類型后面做排序和分析數(shù)據(jù)都方便。第二邏輯刪除字段del_flag建議加上物理刪除對運營類系統(tǒng)來說風(fēng)險太高。第三金額字段強烈建議用decimal而不是float用float存金額做加減運算會出現(xiàn)精度丟失。2.2 SpringBoot項目結(jié)構(gòu)怎么組織才清晰后端工程的結(jié)構(gòu)直接影響后續(xù)維護體驗。按模塊分包是最常規(guī)的約定但很多人習(xí)慣把所有東西都塞到controller和service兩個包下面結(jié)果就是類越來越多后期自己都找不到。這里貼一下我用下來的結(jié)構(gòu)com.example.fitness ├── config # 配置類跨域配置、JWT攔截器注冊、全局異常處理 ├── controller # 接口層接收參數(shù)返回統(tǒng)一響應(yīng)體 ├── service # 業(yè)務(wù)層接口 實現(xiàn)類 ├── mapper # MyBatis的Mapper接口 ├── entity # 數(shù)據(jù)庫對應(yīng)的實體類 ├── dto # 數(shù)據(jù)傳輸對象接收請求參數(shù) ├── vo # 視圖對象返回給前端的數(shù)據(jù)結(jié)構(gòu) ├── utils # 工具類JWT工具、密碼加密工具 └── common # 公共枚舉、常量、統(tǒng)一返回結(jié)果封裝entity、dto、vo分開這一點很多人會忽略。直接用entity接收前端參數(shù)、再直接返回給前端圖省事一時爽后面改需求就是災(zāi)難。舉個例子前端傳登錄參數(shù)需要的是用戶名和密碼但user表有十幾個字段直接拿實體接收會有一些安全隱患多傳字段也容易出問題。只暴露出需要的字段接口安全性和可讀性都好很多。統(tǒng)一返回結(jié)果也要在一開始就做好。我習(xí)慣定義一個Result對象里面有code、message、data三個字段。code為200表示成功401表示未登錄或token失效500表示服務(wù)器異常。所有接口都返回這個對象前端axios封裝時只需處理一種數(shù)據(jù)結(jié)構(gòu)。2.3 MyBatis中幾個會踩坑的細節(jié)MyBatis看似簡單但用不好真會讓人頭疼兩三天這里把最容易踩的幾個點挨個說。2.3.1 Mapper接口掃描配置Mapper接口和XML文件能否被正確識別取決于兩處配置。第一處是在啟動類上加MapperScan(com.example.fitness.mapper)或者每個Mapper接口上單獨加注解二選一即可。第二處是XML文件的存放位置如果你把Mapper XML放在java目錄下需要在pom.xml里加配置把xml文件打包進去否則構(gòu)建后運行就會報“Invalid bound statement (not found)”這個錯在部署時非常常見。build resources resource directorysrc/main/java/directory includes include**/*.xml/include /includes /resource /resources /build如果XML放在src/main/resources目錄下的mapper子目錄則要在application.yml里配置mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.example.fitness.entity configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case這個配置強烈建議開啟這樣數(shù)據(jù)庫的create_time字段就能自動映射到實體的createTime屬性少寫很多resultMap。2.3.2 動態(tài)SQL怎么避免誤更新空字段更新操作是動態(tài)SQL最容易出問題的場景。如果用set標(biāo)簽更新用戶信息前端只傳了昵稱結(jié)果把密碼、手機號也更新成null了這種事故幾乎每個新手都遇到過。解決方法是更新接口單獨設(shè)計DTO并且使用MyBatis的if標(biāo)簽做非空判斷update idupdateMemberInfo parameterTypecom.example.fitness.dto.MemberUpdateDTO update member set if testheight ! nullheight #{height},/if if testweight ! nullweight #{weight},/if if testbodyFat ! nullbody_fat #{bodyFat},/if if testmemberLevel ! nullmember_level #{memberLevel},/if /set where id #{id} /update這樣前端傳什么字段就更新什么字段不傳的字段保持原狀。要注意set標(biāo)簽會自動處理最后一個逗號別畫蛇添足去寫, where。2.3.3 循環(huán)插入用foreach還是單條insert批量添加課程排期、批量導(dǎo)入會員這類場景很多人會寫一個for循環(huán)調(diào)用單條insert數(shù)據(jù)量大了效率就很差。正確做法是用foreach一次批量插入insert idbatchInsertSchedule insert into coach_schedule (coach_id, course_id, start_time, end_time, max_people, create_time) values foreach collectionlist itemitem separator, (#{item.coachId}, #{item.courseId}, #{item.startTime}, #{item.endTime}, #{item.maxPeople}, now()) /foreach /insertMySQL默認的max_allowed_packet大小足夠容納幾千條數(shù)據(jù)的批量插入一般不用擔(dān)心超出限制。加rewriteBatchedStatementstrue到數(shù)據(jù)庫連接串還能進一步提升批量執(zhí)行效率。2.4 JWT登錄鑒權(quán)的完整邏輯登錄鑒權(quán)是前后端分離項目的核心環(huán)節(jié)。因為接口是無狀態(tài)的所以需要用一種機制讓服務(wù)端能識別“你是誰”。我用的是JWT方案流程是這樣用戶登錄后后端校驗用戶名密碼校驗通過就生成一個JWT令牌返回給前端。這個令牌由三部分組成Header、Payload、Signature核心信息放在Payload里。我習(xí)慣把userId和role兩個字段放進去這樣后續(xù)接口里從token中解析出userId就知道當(dāng)前請求是哪個用戶在操作。令牌設(shè)置兩小時過期前端在axios攔截器里發(fā)現(xiàn)返回401就跳回登錄頁。生成JWT的核心代碼邏輯參考String token Jwts.builder() .setSubject(user.getUsername()) .claim(userId, user.getId()) .claim(role, user.getRole()) .setExpiration(new Date(System.currentTimeMillis() 2 * 60 * 60 * 1000)) .signWith(SignatureAlgorithm.HS256, secretKey) .compact();有了令牌攔截器在SpringBoot中通過實現(xiàn)HandlerInterceptor接口在preHandle方法里校驗token。要記得把注冊登錄接口排除在攔截范圍外配置攔截路徑時用excludePathPatterns把公開接口放行。這個過程中最大的坑是前后端對token的命名要完全一致。有的項目后端返回token字段前端卻存在access_token里結(jié)果所有請求都帶不上token全是401。盡量在一開始就約定好response里的字段叫token前端storage里存的key也叫fitness_token。注意密碼存儲絕對不能明文。使用BCrypt加密有兩點好處一是每個用戶生成的哈希值不同即使密碼相同存庫結(jié)果也不同二是BCrypt自帶鹽值暴力碰撞成本極高。Spring Security的BCryptPasswordEncoder可以直接單獨拿來用不用引入完整的安全框架。3. 前端Vue工程搭建與聯(lián)調(diào)細節(jié)3.1 初始化一個Vue項目并配好路由搭建前端工程有兩個方式Vue CLI和Vite。新項目我更推薦Vite構(gòu)建速度快開發(fā)體驗好。初始化命令npm create vitelatest fitness-admin -- --template vue創(chuàng)建完成后按照需要安裝路由、狀態(tài)管理和HTTP庫npm install vue-router4 pinia axios element-plusElement Plus是這套系統(tǒng)里非常好用的UI組件庫表格、表單、對話框、分頁這些后臺管理常用的組件都封裝好了。整套后臺頁面如果不用組件庫手寫樣式的工作量至少翻三倍。路由設(shè)計是前端最需要提前規(guī)劃的部分。我習(xí)慣在路由配置文件里把整個布局拆成兩層外層是Layout包含側(cè)邊欄和頂欄內(nèi)層是具體頁面。所有需要登錄的頁面都放在一個父路由下通過路由守衛(wèi)控制訪問權(quán)限。// src/router/index.js const routes [ { path: /login, component: Login }, { path: /, component: Layout, redirect: /dashboard, children: [ { path: dashboard, name: Dashboard, component: Dashboard }, { path: course, name: Course, component: CourseList, meta: { roles: [1, 2] } }, { path: member, name: Member, component: MemberList, meta: { roles: [0] } } ] } ]路由守衛(wèi)的作用是在跳轉(zhuǎn)前檢查登錄態(tài)和角色權(quán)限。用戶沒登錄去訪問需要鑒權(quán)的頁面直接路由跳轉(zhuǎn)到登錄頁并帶上redirect參數(shù)登錄成功后跳回原來想去的頁面router.beforeEach((to, from, next) { const token localStorage.getItem(fitness_token) if (!token to.path ! /login) { next({ path: /login, query: { redirect: to.fullPath } }) } else { next() } })3.2 axios封裝與跨域處理axios封裝做得好不好直接決定后面聯(lián)調(diào)是否痛苦。我在項目里封裝了一個request模塊統(tǒng)一處理三件事請求頭自動帶上token、響應(yīng)數(shù)據(jù)統(tǒng)一解包、錯誤提示統(tǒng)一彈窗。// src/utils/request.js import axios from axios const service axios.create({ baseURL: /api, timeout: 10000 }) service.interceptors.request.use(config { const token localStorage.getItem(fitness_token) if (token) { config.headers[token] token } return config }) service.interceptors.response.use( response { const res response.data if (res.code 401) { localStorage.removeItem(fitness_token) window.location.href /login return Promise.reject(new Error(未登錄或登錄已過期)) } return res }, error { ElMessage.error(error.response?.data?.message || 網(wǎng)絡(luò)異常請稍后重試) return Promise.reject(error) } )開發(fā)環(huán)境直接請求后端地址會遇到跨域問題。跨域的本質(zhì)是瀏覽器的同源策略前端跑在8080端口后端跑在8081端口兩者源不同瀏覽器就會攔截響應(yīng)數(shù)據(jù)。開發(fā)環(huán)境下最簡單的方案是在vite.config.js里配置代理讓前端請求走自己的域名然后轉(zhuǎn)發(fā)到后端// vite.config.js export default defineConfig({ server: { port: 3000, proxy: { /api: { target: http://localhost:8081, changeOrigin: true, rewrite: path path.replace(/^\/api/, ) } } } })這樣前端代碼里請求/api/course/list實際轉(zhuǎn)發(fā)到后端的是http://localhost:8081/course/list。生產(chǎn)環(huán)境部署時同樣用Nginx處理轉(zhuǎn)發(fā)原理是一樣的。3.3 頁面開發(fā)時如何高效對接接口頁面聯(lián)調(diào)最怕的就是沒有接口文檔全靠猜。建議后端在寫接口時順手把參數(shù)和返回值整理清楚。前端拿到接口先別急著寫頁面花10分鐘把接口返回的數(shù)據(jù)結(jié)構(gòu)看明白再設(shè)計表格列和表單字段效率會高很多。以課程管理為例前端調(diào)用課程列表接口后數(shù)據(jù)結(jié)構(gòu)一般是這樣的{ code: 200, message: success, data: { total: 35, rows: [ { id: 1, name: 燃脂操, category: 團操, price: 29.9, status: 1, createTime: 2024-05-12 10:30:00 } ] } }前端拿到這個結(jié)構(gòu)后Element Plus的Table組件直接用prop綁定字段名就能渲染。要注意時間字段后端返回的是字符串還是時間戳如果返回的是2024-05-12 10:30:00這樣的格式前端可以直接展示如果是時間戳需要做一次格式化轉(zhuǎn)換。我踩過的坑是后端把時間字段統(tǒng)一做成了字符串拼接導(dǎo)致日期排序完全亂掉。后面改成返回時間戳前端再統(tǒng)一格式化問題就解決了。建議后端時間格式約定成ISO字符串或者時間戳并且保證項目中所有接口風(fēng)格一致否則前端處理成本很高。3.4 關(guān)鍵業(yè)務(wù)頁面怎么設(shè)計和實現(xiàn)課程預(yù)約是核心頁面用戶看到的是一個課程卡片列表加預(yù)約按鈕。點擊預(yù)約按鈕后前端彈出一個對話框展示課程詳情包括上課時間、授課教練、可約人數(shù)、價格。用戶確認后調(diào)用預(yù)約接口后端校驗是否已滿、時間是否沖突、用戶是否重復(fù)預(yù)約??紤]到真實場景里用戶可能一次預(yù)約多節(jié)課課程卡片上要標(biāo)注當(dāng)前剩余名額。剩余名額怎么計算每次預(yù)約成功時減少名額取消預(yù)約時增加名額同時預(yù)約時再校驗一次余量。這個邏輯聽起來簡單但并發(fā)場景下需要注意兩個人同時約最后一個名額如果先查詢再更新就會超賣。穩(wěn)妥做法是在更新時帶上條件update coach_schedule set booked_count booked_count 1 where id #{scheduleId} and booked_count max_people受影響行數(shù)為1表示預(yù)約成功為0表示名額已滿。這種原子操作比先查再更靠譜得多。教練端頁面主要展示課程日歷每個教練可以看到自己的工作安排。這個功能其實就是把某個教練的排課表查詢出來按日期分組顯示。前端用日歷組件渲染對應(yīng)日期顯示課程信息。管理端頁面是重頭戲會員列表需要支持條件搜索和分頁課程管理需要支持上下架操作訂單管理需要導(dǎo)出Excel營收統(tǒng)計需要展示圖表。建議這些頁面按模塊獨立開發(fā)先列表再表單再操作按鈕逐步完善。實操心得開發(fā)順序有個技巧。先做后端接口用Postman驗證通過后再寫前端頁面或者先定好接口用Mock數(shù)據(jù)跑通前端再對接真實后端。千萬別兩邊同時開工邊寫邊改不然兩邊互相等排錯時也搞不清問題在前端還是后端。4. 環(huán)境準(zhǔn)備與項目部署全流程4.1 本地開發(fā)環(huán)境需要裝哪些東西很多新手卡在環(huán)境配置上這里列一個完整的清單。JDK推薦裝JDK 8或者JDK 11。選JDK 8的原因是穩(wěn)定SpringBoot 2.x系列完全兼容網(wǎng)上搜問題也容易找到答案。JDK 17也不是不行但要確認和SpringBoot版本兼容SpringBoot 2.x對JDK 17的支持會遇到模塊化限制建議直接用JDK 8省心。Maven裝最新版或者3.6都可以重點是要在IDEA里把Maven的settings.xml指到國內(nèi)鏡像否則下載依賴慢得讓人想放棄。鏡像我這里就不寫具體地址了你在搜索引擎搜“Maven國內(nèi)鏡像”就有很多現(xiàn)成的配置。MySQL建議裝5.7或者8.0。安裝時要注意編碼設(shè)置成utf8mb4數(shù)據(jù)庫排序規(guī)則選utf8mb4_general_ci。用utf8mb4而不是utf8的原因很簡單utf8mb4能存儲emoji和生僻字utf8存不了。連接串里再加一行參數(shù)保證高版本MySQL的SSL連接不會報錯。Node.js裝16.20 LTS或者18 LTS版本都可以Vite 4要求Node 14.18以上。安裝完以后把npm的registry切換成淘寶源執(zhí)行命令npm config set registry https://registry.npmmirror.com就行。這些環(huán)境裝完后建議先各自驗證一遍JDK用java -versionMaven用mvn -vNode用node -vMySQL用mysql -u root -p登錄測試。確認都沒問題再開始跑項目不然環(huán)境出問題會干擾你判斷項目本身的Bug。4.2 前端打包與Nginx部署Vue項目開發(fā)完成后構(gòu)建生產(chǎn)產(chǎn)物npm run build構(gòu)建完會在項目目錄下生成dist文件夾里面就是打包好的靜態(tài)文件。把dist文件夾里的內(nèi)容復(fù)制到Nginx的html目錄然后配置Nginx。配置Nginx做兩件事托管靜態(tài)文件反向代理API請求。先看一個最小可用的配置server { listen 80; server_name your-domain.com; root /usr/share/nginx/html/fitness; index index.html; location / { try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://127.0.0.1:8081/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }try_files $uri $uri/ /index.html;這行是前端路由模式的關(guān)鍵配置。Vue Router默認使用history模式頁面地址看起來是/course/list這種真實路徑。如果刷新頁面Nginx會根據(jù)路徑找文件找不到就返回404。加上這行配置后所有請求兜底返回index.html再由Vue路由接管頁面就正常了。location /api/塊把前端發(fā)往/api/的請求反向代理到后端服務(wù)。注意proxy_pass http://127.0.0.1:8081/;末尾的斜杠作用是把/api前綴去掉再轉(zhuǎn)發(fā)保證后端收到的地址和本地開發(fā)時一致。前端有兩種路由模式剛才說的history模式在部署時需要Nginx配合還有一種hash模式URL地址里帶#號部署簡單但不好看。如果你用的是hash模式不需要try_files那行也能正常工作。什么場景用哪種如果域名是給外部訪問的正式項目建議history模式配好Nginx如果是本地演示或者測試環(huán)境hash模式省事不折騰。4.3 后端工程打包與運行全流程后端SpringBoot項目打包前先確認application-prod.yml配置正確。數(shù)據(jù)庫地址、用戶名、密碼換成了生產(chǎn)環(huán)境的值日志輸出級別調(diào)整成info去掉打印SQL的配置。然后執(zhí)行Maven打包命令mvn clean package -Dmaven.test.skiptrue打包成功后在target目錄下會生成一個xxx.jar文件。把這個jar上傳到服務(wù)器運行指令java -jar fitness-server.jar默認是在前臺運行關(guān)掉終端服務(wù)就停了。正式環(huán)境用后臺運行方式nohup java -jar fitness-server.jar fitness.log 21 日志輸出重定向到fitness.log文件里排查問題的時候直接看這個文件。nohup的意思是忽略掛斷信號加上符號讓進程在后臺運行。要停止服務(wù)先查進程號再殺掉ps -ef | grep fitness-server kill -9 pid繼承標(biāo)題里提到的“Tomcat部署前后端分離項目”這里多說一句。如果是用SpringBoot內(nèi)嵌Tomcat打成jar直接運行就行壓根不用單獨裝Tomcat。如果你自己用SpringBoot打的是war包就需要裝一個外置Tomcat把war包丟到webapps目錄下啟動Tomcat后項目自動解壓部署。但既然用SpringBoot了沒必要退回傳統(tǒng)做法內(nèi)置Tomcat的jar包部署方式更簡單也更好維護。4.4 服務(wù)器端運行環(huán)境的快速搭建在Linux服務(wù)器上搭建整個運行環(huán)境核心要做這么幾件事# 安裝JDK 8以通用方式為例 yum install java-1.8.0-openjdk # 檢查安裝 java -version # 安裝Nginx yum install nginx systemctl start nginx # 安裝MySQL yum install mysql-server systemctl start mysqld # 設(shè)置MySQL開機自啟 systemctl enable mysqld # 導(dǎo)入項目數(shù)據(jù)庫 mysql -u root -p fitness.sqlJDK、Nginx、MySQL都裝好并啟動后按照前面說的方法啟動后端jar再把前端dist目錄放到Nginx的站點目錄整個系統(tǒng)就通了。驗證方式很簡單瀏覽器訪問服務(wù)器IP地址看到登錄頁面說明前端通了輸入賬號密碼能登錄說明前后端聯(lián)調(diào)沒問題。有一個經(jīng)常被忽視的點服務(wù)器的防火墻端口。如果前端頁面能打開但接口請求不通十有八九是8081端口沒開或者說Nginx轉(zhuǎn)發(fā)沒配好。檢查端口監(jiān)聽情況用命令netstat -tlnp | grep 8081如果是8080和8081這類非80端口還需確認安全組規(guī)則里放行了對應(yīng)端口。4.5 演示環(huán)境的完整驗證清單項目部署完成后不能只看頁面能打開就算交付。我會按業(yè)務(wù)主流程完整走一遍確認每個模塊都在真實環(huán)境跑通。驗證清單大概是這樣的注冊一個新會員看看登錄后角色是否正確管理員創(chuàng)建課程、添加教練排課會員瀏覽課程列表預(yù)約一門課程教練端查看預(yù)約名單和排課表管理員查看預(yù)約統(tǒng)計和營收訂單會員取消預(yù)約后名額是否正常釋放所有頁面刷新后不出現(xiàn)404退出登錄后訪問受限頁面自動跳登錄頁每個環(huán)節(jié)都走一遍發(fā)現(xiàn)問題就修掉確認全通后才能把這個項目交付出去。很多人項目做完沒驗證就直接提交了答辯現(xiàn)場演示時突然崩了那場面確實是災(zāi)難。注意部署到服務(wù)器和本地環(huán)境是有差異的。本地跑通的項目到服務(wù)器上很可能因為目錄路徑、數(shù)據(jù)庫名、端口占用等原因出問題務(wù)必按上面的清單在服務(wù)器環(huán)境完整驗證一遍。不要想當(dāng)然認為“本地通了服務(wù)器肯定也通”。5. 常見問題與排查技巧實錄5.1 后端啟動失敗的幾個高頻坑啟動后端口被占用是出現(xiàn)頻率最高的問題。有時候是上次的進程沒殺掉有時候是另一個項目占用了同一端口。排查辦法lsof -i :8081找到占用端口的進程號殺完之后再重新啟動。如果8081端口被系統(tǒng)進程占用了最簡單的辦法是換一個端口在application.yml里改server.port同時把Nginx的代理地址同步改掉。數(shù)據(jù)庫連接失敗也比較常見SpringBoot啟動時報錯Communications link failure。絕大多數(shù)原因是MySQL沒啟動、密碼錯誤、或者連接串寫錯。逐個排查# 確認MySQL在運行 systemctl status mysqld # 確認能登錄MySQL mysql -u root -p # 確認連接串里的端口號 mysql -h localhost -P 3306 -u root -pMySQL 8.0啟動出錯還要檢查連接串里有沒有加useSSLfalse。默認會啟用SSL連接而本地MySQL實例沒有正確配置SSL證書時就會報錯。連接串這樣寫保證沒問題url: jdbc:mysql://localhost:3306/fitness?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghai5.2 MyBatis相關(guān)報錯與排查“Invalid bound statement (not found)”是我在后端項目里遇到頻率最高的報錯。這個報錯的意思是Mapper接口的方法和XML里對應(yīng)的id對不上或者XML文件根本沒被加載進來。排查順序如下確認Mapper接口方法名和XML的id完全一致包括大小寫確認XML文件被Maven打進了jar包檢查target目錄下有沒有對應(yīng)的XML文件確認application.yml里的mapper-locations路徑配置正確“TooManyResultsException”也偶爾碰到意思是查詢結(jié)果有多條記錄但方法返回值寫的單對象。這個錯誤一般是SQL寫的條件不準(zhǔn)查出了多條記錄排查SQL條件和數(shù)據(jù)或者改方法返回值為List。分頁時的坑也要說一下。如果用了PageHelper分頁插件注意查詢結(jié)果的類型是PageInfo要用new PageInfo(list)拿到總條數(shù)直接list.getTotal()會提示找不到getTotal方法。另外PageHelper的分頁參數(shù)只在緊跟著的下一條SQL生效想分頁哪個查詢就要在它前面緊貼著設(shè)置分頁中間不能夾雜其他SQL。5.3 前端常見報錯與解決思路前端代碼運行報錯最多的地方首推跨域。報錯信息通常長這樣Access to XMLHttpRequest at http://localhost:8081/... from origin http://localhost:3000 has been blocked by CORS policy。出現(xiàn)這個錯誤第一個要確認的是你有沒有走代理。如果你在代碼里把baseURL寫死了http://localhost:8081那請求根本沒有走vite代理而是瀏覽器直接跨域調(diào)用代理配置就白寫了。正確做法是baseURL寫/api由代理轉(zhuǎn)發(fā)到后端。前端另一個常見問題是打包后頁面白屏控制臺報錯Failed to fetch dynamically imported module。這個一般是路由懶加載的文件路徑寫錯了或者構(gòu)建產(chǎn)物沒上傳完整。先看瀏覽器Network面板里面哪個js文件404了再對著修正路徑或者重新構(gòu)建一次再上傳。Vue 3 Element Plus還有一個經(jīng)典問題就是圖標(biāo)點擊不顯示。Element Plus從1.x版本開始圖標(biāo)庫單獨拆成了element-plus/icons-vue包你沒有安裝或者沒有全局注冊圖標(biāo)就是空白的。在main.js里面注冊import * as ElementPlusIconsVue from element-plus/icons-vue for (const [key, component] of Object.entries(ElementPlusIconsVue)) { app.component(key, component) }5.4 登錄后跳回登錄頁的排查思路前后端分離項目里“點擊按鈕后莫名其妙跳回登錄頁”也是高頻問題。先判斷是不是所有請求都跳登錄頁還是個別接口跳。如果所有請求都跳大概率是token寫入不一致。比如后端要求請求頭參數(shù)叫token前端卻用Authorization去傳后端解析不到統(tǒng)一返回401路由守衛(wèi)就把頁面重定向到登錄頁了?;蛘遲oken過期也有同樣效果。如果是個別接口跳那就是后端某些接口的攔截配置有問題。比如你登錄接口動態(tài)更新用戶信息后沒把新token返回給前端用舊token訪問新接口時就過期了?;蛘吣硞€接口路徑不小心被排除在攔截范圍外了導(dǎo)致該鑒權(quán)的接口沒有鑒權(quán)。排查這類問題最快的辦法是把瀏覽器Network面板打開看接口返回的狀態(tài)碼和響應(yīng)體。是401還是403響應(yīng)信息提示是“未登錄”還是“無權(quán)限”看準(zhǔn)了再動手改不要瞎調(diào)代碼。5.5 部署環(huán)節(jié)設(shè)計一個快速自查表結(jié)合上述經(jīng)驗整理一張排查速查表按順序檢查能解決90%的部署問題。現(xiàn)象可能原因排查命令/操作頁面打不開Nginx未啟動或配置錯誤systemctl status nginxnginx -t 檢查配置前端頁面能開但接口404反向代理路徑配置錯誤檢查location /api塊的proxy_pass配置接口請求跨域前端沒走代理直接請求后端檢查baseURL是否為/api瀏覽器Network看請求URL后端啟動報端口被占用端口被其他進程占用lsof -i 查看占用進程并處理后端啟動報數(shù)據(jù)庫連接失敗MySQL未啟動或密碼錯誤systemctl status mysqldmysql -u root -p 測試登錄登錄后接口401/跳登錄頁token傳參名稱不一致或過期檢查前端請求攔截器headers配置刷新頁面404前端路由history模式?jīng)]配try_filesNginx中l(wèi)ocation /增加try_files配置這張表你在部署時對照著排查能省下大量查資料的時間。我自己第一次部署前后端分離項目時因為Nginx沒配try_files所有頁面刷新都404查了半天才想到是這個問題。有了這張表后來再部署就順手多了。結(jié)尾這個健身俱樂部網(wǎng)站系統(tǒng)整套做下來覆蓋了前后端分離開發(fā)的全部核心環(huán)節(jié)業(yè)務(wù)建模、數(shù)據(jù)庫設(shè)計、RESTful API開發(fā)、JWT鑒權(quán)、Vue組件化開發(fā)、Nginx部署。如果你正在找畢業(yè)設(shè)計選題或者想豐富項目經(jīng)歷按這套思路把代碼寫透收獲會遠遠超過看一遍教程。個人經(jīng)驗中最深的體會是環(huán)境準(zhǔn)備和部署環(huán)節(jié)看似不起眼但坑最多。寧可開工前多花半天把JDK、MySQL、Node、Nginx這些環(huán)境都弄利索也不要寫到一半再來查環(huán)境問題那樣非常打斷思路。另一個建議是保留一份部署自查文檔每次換機器部署都照著跑出了問題時排查效率會高很多。最后再分享一個實用的小技巧整個系統(tǒng)跑通之后建議用Postman把主要接口整理成一份接口集合導(dǎo)出成JSON存到項目倉庫里。后面不管是自己重構(gòu)還是別人接手都能快速看懂接口定義不用費力去代碼里翻。項目交付的世界里“文檔完善”這件事的分?jǐn)?shù)占比可能比你想象中高很多。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久69精品久久久久久久| 欧亚免费视频| 日逼97| 国产怡红院| 看日韩操逼| 国产97视频| 东北女人| 九九无码久久精品视频| 人人潮人人摸| 久久免费精品视频免一| 午夜乱轮操逼视频免费看| 色九月综合| 亚欧成人综合影院| 亚洲图片激情小说| 蜜臀th| 99爱精品| 91人妻Pr| 加勒比久久综合网高清| 久久午夜色播影院免费高清| 少妇熟女一区二区三区| 91美女视频。| 久久超碰av在线| 99少妇精品视频| 亚洲欧洲网站免费观看| 先锋色眉乱伦资源| 天天草天天日| 亚州男人天堂| 蜜臀AV一区二区三区| 亚洲欧洲第二视频在线观看色图| 中文字幕二区日韩天堂| 97福利视频| 脫衣舞一区二区三区| 国产高清成人免费视频| 国产盗摄美女如厕大神作品在线观看| 人妻熟女字幕一区二区| 成人精品在线| 超碰碰碰碰| 熟女字幕| 看黄片视频免费| 亚洲最新Av| 天天亚洲| 91精品人| 操逼视频国产无套| 日本孕妇一区二区视频操逼免费看 | 超碰久草| 久热99999| 97网址www| 人人爱人人操人人性| 人人贴人人摸| 18禁免费视频| 国产美女高潮叫床视频| 亚洲情色欧美| 目产99999久久999| 中国黑人三级片网站上区| 欧美一区二区情色| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 中国探花熟女| 800zy一区二区| 精爱久久| 亚洲在钱| 精品免费成人久久| 九九无码| 熟妇xxxxx性春色| 秋霞午夜成人福利片片| 国产精品一区二区亚洲人成毛片| 国产黄色 A 片免费看| 欧美日韩岛国大片在线观看| www.色婷婷| 色女网日韩| 久久超碰大香蕉| 白丝在线一区| 97超碰色| h无码动漫在线观看| 最新国产精品久久精品| 一区二区久久天天干狠狠| 亚洲AV乱码专区国产噜噜亚洲| 午夜福利久久久噜久噜久久综合| 欧美91在线+|+欧美| 国产和美国毛片| 亚洲毛片基地专区| 欧美劲爆视频一区二区| 中文高清一区二区的| 色一射色一射| 色爽——AV| 美女91网| www.男人的天堂| 精品中文日韩字幕视频| 久久精品—区二区三区内射| 中文字幕一区二区免费在线| 99热9| 国产欧美日韩臀| 成人在线午夜视频一区| 91处女在线观看| 色黄污美女啪啪啪免费网站| 欧美最婬乱婬爆婬性视频 | 一级特级aaaa毛片免费观看| 91 国产丝袜在线放观看| 91精品婷婷国产综合久久竹菊| 另类图片五月天| 欧美巨大性舒爽顶到了| 插入综合网| 尤物视频偷拍免费| 久久久久人妻二区精品叶可怜| 亚洲欧美日韩夜夜| 日本国产亚洲一区在线观看| 在线可观看的黄色网址| 天天做天天爽| 国产精品欧美激在线| 91青青在线视频| 日日夜夜精品视频| 欧美日韩国产中文精品字幕自在自线 | 日本一级特级毛片视频| 亚洲乱伦图片视频| 91偷拍欧美亚洲| AV丝袜少妇| 91肉丝| 成人资源中文字幕在线观看天天| 日本精品人妻少妇一区二区| 久久尹人大香焦视| 亚洲导航深夜福利| 后入式在线免费观看60秒| 日本一级真人黄色性爱视频| 日欧美色| 国产女同视频在线播放| 69视频福利导航| 五十路熟女人妻一区二区三区四区五| 99热精品在线观看| 国产传媒日韩欧美| 男人久久天堂| 激情综合婷婷| 久久久久久中文| 国产福利影视| 高清国产精品福利网站| 夜草欧美| 超碰人人超在线观看| 久久精品日韩专区免费观看| 日本99热| 国产精品久久久久久亚洲色欲| 强奸乱伦动态污图免费| 亚洲天堂电影网99999| 超碰狠狠操| 色色九区| 91在线色| 91蜜臀熟女| 亚洲欧美碰碰| 久久久久久久久久久久久久久性生活视频 | 亚洲情色电影网| 国产操逼网站亚洲一级黄色| a片亚洲一本通视频| 超碰人人妻| 亚洲国产综合图区中文字幕| 色眯眯射| www.狠狠干.coom | 精品成人无码| 97色亚洲| 中文字幕一区二区三区人妻不卡| 国产精品一区二区久久精品| 久久久涩| 啊操爽品善一区二区三区| 无码精品蜜桃一区二区三区ww| 99少妇| 九九九九九九亚洲| 伊人大香蕉在线| 色99色| 国产这里只有精品| HEYZO高无码国产精品227| 偷拍综合网| 清纯唯美综合| 爱爱动态60秒| 成人av在线播放| 欧美综合亚洲综合| 97无码视频在线播放| 大香蕉青青9| 欧美美女在线高潮999| 五月综合激情网| 亚洲高清无码免费观看视频| 色色色网站| 亚洲日韩AV视色| 九九热免费国产视频婷婷伊人五月 | 99久久9| 日产精品久久久一区二区| 黑人综合色| 成人性交免费视频| 精品美女少妇一区二区三区| 78m成人视线| 亚洲国产精品无石码久久| 日小BB小视频| 极品色社| 91嫩草在线| 少妇熟女一区二区三区| 5278欧美一区二区三区| 99re在线视频国产| 亚洲色图尤物视频| 久都青青视频| 亚洲色图欧美色图另类图片| 在线岛| 久久一二三四五六七八九区区区 | 久久同城AV| 毛片一区二区| 啊嗯好大视频在线观看| 久这精品中文在线观看视频| 午夜欧美女人操逼| 国产情色在线| 日韩久久.一级黄色片| 日本不卡高清免v欧美日韩在线观看| 性欧美| 四虎影视永久在线免费| 日本九九久久99| 91精品人| 久久色激情一区二区三区| av2014 日韩在线中文字幕| 色综合天天| 国产污视频麻豆传媒一区二区| 天美91| 91国产精品熟女| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 欧美A片中文字幕| 大香蕉123| 好属操| 在线 亚洲 网爆 自拍| V A在线| 亚洲天堂,男人| 日日操夜夜操天天操免费观看麻豆| 99综合免费视频| 91美女视频在线观看| 久久综合日韩亚洲欧美| 激情抓乳插进去啪啪啪日韩 | 99久在线精品99re8热视频在线| 久操91视频| 久久久久ab| 国产中文大片资源中文字幕| 久久久久久久九九九九| 天海翼久久| 色性欧美| 久久,精品一二三| 人人玩人人添人人澡免费| 97操综合| 久久视网78| 六月丁香久久| 探花一区在线| 免费a级毛片av无码久久精品中文字幕| 青青伊人久久| 啊啊啊啊啊好大好舒服想要| 东京太热久久久| 天天干夜夜操网| 乱伦色图网址是多少| 91日产桃蜜| 精品人妻免费观看| 日韩欧美中文字亚洲慕| 蜜臀一二三| 亚洲熟妇乱女区二区三区| www.色婷婷色综合| 国内精品久久久久影院亚洲| 国产综合在线视频网站| 综合国产影视三级| 国产又黄又粗的视频| 国产无码成人无码| 超碰欧美| 日本性交操一区二区不卡系列| 亚洲成人ab| 亚洲男人天堂手机版| 中文字幕av一区二区三区人妻少妇| 大香蕉一人在线| 97色97好| 亚洲国产中文字幕| 亚洲高潮影院| 九九九九久久久久| 天天夜躁日日躁狠狠2002| 操碰97| 亚洲男人综合| 乱伦av.com| 99热婷婷| 男人的天堂2019AV| 日韩精品人妻中文字幕久久久| 青娱乐大香蕉| 狠久久| 秋霞一集毛片观看| 91爆操视频| 午夜男人一级A片7777| 国产精品一区二区三区在线密挑| 劲爆欧美人妖三区91| 久草毛片| 国产一区在线观看无码AV| 蜜乳av首页| 九九九九日本 | 天天插天天插| 久草久日| 97在线无精品| 久插综合| 玖玖爱在线视频免费观看| 欧美日韩操操操| 四虎永久在线精品免费网址| 国产白丝网站| 搡老女人老妇女AAA一VU麻豆| 久色网| 激情婷婷丁香| 1000部熟女视频在线观看| 香蕉久久国产AV一区二区| 欧美性,色九九| 久久 精品| 男人成人黄色视频在线观看免费下载| 在线97在线| 97精品综合久久网| 国产精品美女视频诱惑| 免费看久久久性性| 一起草av| 欧美激情内射| 丁香五月婷婷啪啪| 青青草原香蕉日本Ap| 国产亚洲日韩欧| 久久六六| 亚欧中文字幕在线视频| 国产男女无套视频免费观看| 亚洲资源吧| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 岛国毛片在线观看免费| 神马午夜久久久| 国产一级内射无挡观看| 涩涩久久精品| 最新国产精品久久精品| 亚洲 欧美综合| 亚洲情色电影网| 国产区日韩区在线观看| 日本孕妇孕交| 五月婷在线| 欧美中文综合| 美女91在线观看| 日韩性爱电影一区| 欧美亚洲情色| 女人 A一级| 人妻人妻天天碰| 狠狠干综合| 色综合一本| 极品AV网站在线观看| a一区二区三区乱码在线| 精品无码人妻一区二区免费蜜桃| 麻豆精品久久久久久久| 男人天堂一区二区| 日韩偷拍色图| 亚洲 欧美 小说| 刺激性视频黄页| 在现视频女上位好爽| 五月天激情网图片| 欧美亚州手机在线| 国产精品国产自产拍高清AV| 欧美大码在线视频| 亚州色站 日韩电影| 亚洲中文人妻色| 亚洲码和欧洲精品激情系列| 天天天天做夜夜夜夜做| 久久一区二区加油站| 国产 日韩,欧美 自拍| 96超碰网| 久久精品国产亚洲AV高清演员表| 新婚人妻扶着粗大强行坐下| 久操大香蕉手机视频在线看| 日韩情色视频| 欧美精品三区| 最新亚洲黄色免费电影| 高清无码 国产精品| 丁香色五月 97干| 嗯嗯嗯啊啊啊在线免费观看| 成人热久久精品| 日韩欧美蜜桃精品久久中文字幕久久| 91综合网| 五月激情天| 欧美日韩国产电影| v91av| 大屁股xxxxx| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 日韩欧亚中文在线| 中文伊人大香蕉视频| 欧美日本国产日韩激情视频| 超碰av在线| 午夜亚洲WWW湿好大| JuliaAnn丝袜熟女系列| 高清国产精品福利网站| 丰满人妻被猛烈进入中| 黑人美精品 A片| 国产99久久99热这里只有精品15 | 18禁中文字幕| 青娱乐日韩无码| 六月色婷婷| 色女99一级片在线观看| 欧美最大综合网| 亚洲毛片久久| 51久久夜色精品国产麻豆| av在线一区二区三区| 女人双腿搬开让男人桶| 婷婷五月天补不补| 曰本特级特黄特色黄色A级网站高清在线免费看| 亚洲高清男人天堂| 曰韩精品视频一区二区| 能看的av| 使劲用力艹少妇视频一区二区| 五十路熟女,国产欧美精品区一区二区三区| 亚洲素人综合| 男人午夜天堂| 高清无码国产亚洲| 麻豆成人av| 亚洲欧美日韩制服另类| 96精品在线| 蜜桃久久久久久久久久久久| 日本久久女同性恋视频| 青青草日韩无码| 日韩欧美天堂| 黑人狂躁日本妞一区二区三区| 可以免费观看的av| 91亚洲欧美激情| 国产激情av女片自拍| 最新精品久久蜜桃 | 96麻豆精品一区二区三区| 97九色人妻| 欧美最大综合网| 二男一女成人A片| 精品久久大胆人体| 26uuu性物| WWW.加勒比人妻一区不卡.com| 亚洲熟女乱色一区二区三区| www久久99| 一本大道青青| 中文字幕黑人大片| 性videos欧美熟妇hdx| 97精品国产97久久久久久户外免费| 在线二区不卡| 欧洲免费一区二| 亚洲综合另类小说色区亚洲成av人片在www| 91精品人妻一区二区三区蜜桃臀| 天天插夜夜操| 久久禁| 99热思思| 台湾成人无码AV| 超碰在线1234区| 人妻久久久| 男人的天堂2010| 精品免费一区| 91激情国产| 免费观看欧美日韩操逼视频| 超碰色综合| 女人的天堂大香蕉网| 免费伦费视频在线观看| 91天堂| 加勒比性爱成人在线| 五月天激情四射| 日本成人A片网站| 国产精品伦理| 欧美极品少妇| 久久婷婷亚洲欧| 五月综合久久| 日韩AV无码中文一区二区| 又粗又长又大国产不卡| 人妻第一页| 老女人老91妇女老热女| 亚洲不卡AV在线| 国产精品成人无码av| 午夜福利精品| 91在线欧色| 国产黄色视频久久| 综合久久久久久久久91| 精品人妻av区天天看片| 夜夜免费视频| 超碰综合97在线| 另类专区加勒比| 超碰天天操你比| 四季AV综合网址| 操美女人妻| 干B| 久久香蕉超碰97国产精品| 久久久影院| 久久不卡一区二区| 97超碰人操| 亚洲国产丝袜在线观看| 久久视频,这里只有精品| 亚洲色丰满少妇高潮| 久热大香蕉网站| 久久精品一区二区三区蜜桃臀| 99在线啪| 亚洲中文字幕在现观看| 中文字幕精品免费一区二区| 性爱乱伦一区| 大香蕉十区| 欧美综合亚洲综合| 女沟厕偷窥piss小便| 四虎午夜影院| 九九热超碰| 鸥美插入视频| 麻豆精品.欧美精品.日韩精品.| 超碰色美女| 超碰97 线线 在现| 人人操,操人人| 国产人妻精品久久久一区二区三区 | 五月天色综合| 黄站在线免费观看| 国产成人自拍视频视频| 99爱精品| KK色在线影院| 乱伦图av| 一区,二区,三区视频| 久操97| 国产激情在线| 手机久操欧美综合色码| 91亚洲高清| 激情小说成人日本无码一| 夜夜操91744565| 91 亚欧| 日本中文字幕高跟| 亚洲色婷婷综合久久一区二区三区| 女欧美一区二三区| AV高清一区| 亚洲精品97| 久久这里都是精品| 白嫩少妇| 高树玛利亚无码流出| 男人天堂欧美| 天天香香欲综合| 天天插夜夜操| 国产精品高朝久久久久久久| 人人天天干干| 97久久久| 精品人妻一区二区三区视频| 粉嫩av在线一区二区| 亚洲日精品| 亚洲精品色| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 国产又色又粗又黄又爽| 97在线欧洲| 亚洲中文字母在线播放| 视频在线97| 成人熟女视频一区二区三区| 97精品免费视频网站| 欧美日韩国产中文超碰| 2019精品国产无码成人| 久久影视二区三区行押| 中文字幕第页| 强奸乱伦动态污图免费 | 色黄污美女啪啪啪免费网站| 亚洲高清男人天堂| 又黄又爽在线观看视频| 天堂俺去俺来也www久久婷婷| 九九自拍伦理| 亚洲色图超碰在线| 日韩黄色成人性爱| 亚洲成人性爱网站在线播放| 超碰天天去日穴| 四虎 精品 WWW| 欧美疯狂做爰xxxx| 国内精品久久人妻性色av| 91欧美情色| 亚洲日本天堂| 久久久性爱视频| 校园春色综合| 中日韩久久久免费看| 欧美色道啊| 天美传媒精品久久视频| 欧美系列在线一区二区| 亚洲国产日韩欧美熟妇在线| 97bbn| 夜夜影视四色| 大香蕉黄色一级片免费看| 91骚熟女| 88xx成人精品视频| 60秒不遮不挡| 国产成人五月天丁香花| 97神马久久| 欧美色图亚洲色,麻豆| 加勒比人妻综合| 日本久久综合| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 精品久一区免费| 夜夜嗨一区二区| 五月天色综合| 久久久久国产亚洲一区欧美色图日韩| 欧美制服网站美腿丝袜| 色综合美国| 欧美一区二区情色| 无码一区二区三区四区五区六区七区八区九区十区视频 | 婷婷色香| 97看操| 天操老女人| 九九九九97| 亚洲se电影| 少妇人妻在线| 97爱| 国模私拍一区二区三区神乳| 亚洲国产精品有声| 操操啪| 91久久久久久| 亚洲系列第一页| 大香蕉人妻| 一品道视频一区二区三区| 国产精品熟女乱伦| 亚洲综合码| 久久中出在线| 日产精品久久久一区二区| 欧美天天干| 成人精品在线免费视频| 国内毛片国产专区二| 国产在线精品偷| 日韩人妻操B| AV色图| 人妻丝袜一区二区三区在线| 日本国产亚洲一区在线观看| 国模精品一区二区三区苹果色戒| 玖色AV| 97干天天| 干少妇视频| 日本免费中文字幕在线| 日本久久99| 国产精品一区二区后入| 婷婷激情四射| 欧美日本国产日韩激情视频| 久久久噜噜噜久久久| 欲色啪| 亚洲欧美日韩中文播放| 亚洲综合成人网| 亚洲精品欧洲精品| 蜜臀久久99精品久久久久久-DVD| 黄片国产精品一区二区| 99色视频| 九九九九热只有精品| 亚洲电影中字一区二区| 91性高潮久久久久久久久| 日日做夜狠狠爱欧美黑人| 青青草依人大香蕉| 6080YYY午夜理论片在线观看| baisiav| 激情四射婷婷六月天| 熟妇综合一区二区三区| 久久草草欧美精品| 黑人粗大V S日韩女优视频| 日韩有码 一区二区三区| 久久久久婷婷| 呦女网站| 亚洲精品中文字幕一区在线视频 | 综合久久中文字幕综合日韩精品| 白丝AV网站| 好吊色综合| 久久ww| 高清无码91| 亚洲欧综合另类无码一区| 婷婷久久综合| 精品无码少妇| 欧美黄片视频在线观看免费 | 色噜噜日韩精品| 亚洲乱码尤物193YW| 美女大乳久久久久久久女人18| 射久久| 久99热| 9丨久久九九九| 五月天综合在线| 四虎精品一区| 国产亚洲综合欧美一区| 日日躁狠狠躁天天躁精品| 国产又爽又黄| 日韩日韩日韩-国产乱码精品一区二区| 国产东北女人在线视频| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 亚洲国产精品99久久久| 亚洲精品不卡一二三区| 午夜无遮挡男女啪啪视频| 91女网站| 老熟妇一区二区三区…| 新精精品久久精品| 福利伊人玖玖国产| 精品玖九九久| 五月综合激情网| 欧美色图自拍| 97超碰色五月| 思思热在线视频在线| juliaann丝袜大战黑鬼| 免费一级特黄特色大片在线观看看| 日韩电影天堂视频二区三区| 五月天婷精品激情| 美女t无毒不卡不卡| 丁香五月电影| 日韩免费高清大片在线| 久久久久密臀视频| 婷婷久久久| 国产又黄又爽| 欧美少妇性乱| 欧美日韩91| 亚洲巨爆乳一区二区三区四季网| 加勒比人妻综合| 亚洲欧美中文日韩视频中国语| 大香蕉草草| 男人天堂久久日韩| 日本人人操人人操| 天天操天天舔| 91在线/欧洲| 一级免费啪啪片| 人人么人人操| 欧美日韩亚洲国产中文永久天天看| 九九亚洲视频| 午夜亚洲国产理论秋霞| 99这里只有精品| 午夜精品久久久久久久99蜜桃一| 欧美色网| 日本黄色XXX| 岛国小电影| 欧美黑人精品一区二区| 国产精品96| 欧美日韩中国x| 91精品国产综合久久久蜜臀| 亚洲综合一区二区| 日韩欧美大片免费高清啪啪| 亚洲天天影视色综合| 国产伊人自拍| 亚洲 欧美日韩 另类| 精品国模无码| 欧美在线亚洲| 大香蕉一人在线| 色综合91| 中文字幕日本久久| 99国产在线 精品 视频| 国产福利合集| 91在线国产后入风骚翘臀美女素人| 99热导航| 极品色社| 亚洲天堂区| A片 AV一级在线播放观看免费| 日韩视频中文字幕| 伊人网高清| 五十路熟女,国产欧美精品区一区二区三区| 97欧美精品综合| 久久婷婷视频| 欧美三级中文字幕hd| 波多野结衣一级视频| 超碰在线一区| 啊啊啊无码| 国产蜜臀精品一区二区尤物| 91欧美性| 久久 久久国内精品亚洲| 东北女人的毛片| 五月天伊人| 爆乳免费黄网站| 精品人妻伦一二三区久久| 国产又色又爽又舒服的三级视频| 亚洲精品无码成人久久久99| 色五天伊人| 强奸乱伦AV网址| 9色国产精品一区粉嫩| 日本一区二区不卡| 97免费在线观看| 欧美色女人| 免费视频一二三区| 99久草| 色香天天| 久久超碰97| 国产强奸乱伦欧美| 亚洲无码电影久久久| 啊啊啊在线观看| 91色图| 亚洲av性爱电影| 人妻二区| 久草视频观看视频在线| 在线岛| 国产18精品亚洲精品| 男人的天堂一区三区| 凹凸视频特色日本特黄| 久久婷婷六月综合| 殴美大黄片| 婷婷五月天网| 欧洲综合视频| 亚洲的天堂网| 久久久久幕乱码| 午夜αv| 被窝影院午夜看片无码| 日本黄大片在线观看视频| 国产熟女完整版中字| 无色无码| 国产黄a三级三级三级av在线看| 青青爽| 色踪合AV| 午夜欧美精品久久久| 超碰97中文| 国模不卡| 综合久| 精品小视频在线| 曰韩少妇无码| 91肉丝| 人妻81p| 人人扣人人操| 欧美综合第一| 丁香7月婷婷| 97超碰人人模人人拍人人| 老司机深夜18禁污污网站| 思思热免费视频观看| 天天爱天天操| 成人热久久精品| 91精品丝袜久久久久久| 天天看天天干| 五月丁香网站| 97超碰天天爱天天爱| 我要色综合网站| 国产伊人精品在线| 亚洲字幕一区二区| 中文字幕一区av| 曰韩少妇无码| 三上悠亚在线毛片91| japan日本高清乱xxxx| 国产欧美日韩在线观看麻豆传媒公司 | 日本不卡免费二区| 日韩av在线精品观看| 亚洲国产日韩欧美熟妇在线| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 三上悠亚在线毛片91| 丰满岳乱妇一区二区三区| 欧美激情总合网| 久久精品高清无码一区| 免费αV在线视频| 欧美99热| 久草久日| 男女激烈网站最新| 男人的天堂2010| 97chaopenrihan| 高清在线不卡一区二区 视频| 一本道综合色图| 97欧美色综合| 太久视频| 99操| 久久欲| 色噜噜国产在线| 久九九九九九九九热| 丰满人妻一区二区三区大胸懂色 | 日日干夜夜欢| 欧美性爱无码一区二区三区| 中文字幕老熟妇黄色视频| 久久久久久中文| 操比国产| 日本免费一区二区不卡 | 伦理日韩国产久久| 成人麻豆av电影网站| 精品人妻一区二区三区-国产精品| 风月影院十八禁| 日本久久天堂| 欧美另类天堂| 成人午夜无码视频| 欧美91色| 天天躁日日躁AAAXX| 超碰视97中文| 亚洲成?V人片在线观看福利| 伊人四虎综合| 极品尤物在线观看| 中文字幕色AV| 五月丁香在线| 91亚洲图片| 99久久综合| 国产一级高清免费观看| 色妺妺在线视频| 国产精品com| 九九九午夜| 亚洲国产精品无码AV久久久| 爱欲AV| 免费精品中文字幕| 99re99视频在线免费观看| 操高情无码| 尤物视频网 刘玥| 五月婷婷激情网| 9精品久久久久| 久久久久人妻二区精品叶可怜| 久久综合av| 岛国黄色大片网站| 国产精品欧美在线观看 | 久热一区二区| 欧洲中文字幕| 人人艹亚洲| 福利大香蕉| 二色av| 亚洲人妻在线精品| 国内97干免费看| 在线观看国产黄色| 国产日本一区二区三区蜜臀在线观看| 九九热免费国产视频婷婷伊人五月| 最新av网站在线观看| 成人精品在线免费视频| 蜜臀AV成人精品蜜臀| 特级毛片特黄久久免费看 | 久插综合| 综合色99| 欧美精品三级黄片| 97在线欧| 天天色悠悠激情| 国产一级操B视频| 一区二区视频在看| 操逼999| 激情综合婷婷| 国产AV色黄看到爽| 亚洲做性| 欧美久久毛片基地| 欧美人人AAA| 2024黄色视频| 国产蜜臀在线| 国产日韩精品一区二区三区| 操B在线观看| WWW.操逼.COM| 欧美体内射精| a人欧美综合天堂麻豆| 欧美婷婷五月天| 欧美黄色大片在线观看 | 国产久久av| 麻豆国产精品午夜视频| 国产欧美日产一区二区三区 - 国产欧美日| 成人性爱电影一区二区| 亚洲在线| 久久超碰天天| 蜜臀久久在线视频| 920日本午夜免费| 日韩精品免费高清视频在线| 欧美成人性活片| 国产精品午夜福利| 色香在线| 成人色女网| 日本一级黄色电影| 麻豆国产96在线| 超碰97人妻免费在线| 91网站18禁| 天操天操夜操夜月月年年操操| 成人五月天色网| 欧美另类色图片| 99热精品在线播放| 成人亚欧免费视频| 91精品国产日韩欧美综合| 欧美一级在线观看成人| 一本久道久久综合狠狠爱一密臀精| 蘋果手機免費看成人Av| 久草婷婷| 国产久久视频| 国产四虎在线| 一个人免费HD91视频| 色婷婷视频| 欧美亚洲91| 亚洲91网| 97超碰中文在线| 亚州综| 中文字幕乱亚洲美女精品一区| 自拍第一页| 成人资源中文字幕在线观看| 日日日大屁股骚女人精品| 亚洲综合69| 久啪| 97视频在线免费| 精品中文一区二区| 天堂精品| 欧美最大综合网| 欧美亚洲国产日本在线,久久精品国产| 男人夜色天堂ss| 日韩精品亚洲专区在线影视| 乱伦av国产| 亚洲中文日韩精品| 男女真人网18| 狠狠干婷婷| 狠狠色综合网| 久久侵犯人妻爽爽爽| 中文字幕日韩综合| 日韩 人妻 精品| 国产欧美一区二区| 亚洲中文字幕乱码无码一区二区 | 久肏视频字幕| 色九九久九九| 亚洲在线欧美| 国产精品999aaa| 亚洲图片婷婷五月天| 成全在线观看免费观看| 国产九九九九九九九九| 欧美日韩第一页| 亚洲性综合9| 精品久久久中文字幕不| 60秒免费小视频| 大屁股国产在线视频| 夜夜夜夜久久久久| 欧美精品三区| www.91理论| 国产免费久久久久| 亚洲天堂女优在线| 97免费视频在线观看视频| 免费国产| 成人毛片免费| 激情网色| 熟妇熟女视频一区二区三区| 久久久久久中文字幕中文字幕最新| av一区二区三区四区五区久草臀| 偷拍片久久| 热99这里有精品综合久久 | 日韩人妻免费精品| 91动漫操逼视频| 天天看片天天爽| 国产少妇内射| 蜜臀视频网站| 午夜影美女日鸡鸡天天视频国产| 99操99| 久久6热精品99视频| 色原狠狠天天天| 樱花蜜乳av| www.婷婷六月天| 久久精品国产精品| 国产97/欧美| 精品人妻中文字幕4399| 久久黄黄| 智利AV在线网| 99亚洲精品| 亚洲色综合| 日日摸日日碰| 91老熟女| AA丁香综合激情| 天天干一区二区| 97人人夜| 天天日B夜夜干B时时操B| 极品五月天噜噜| 天堂亚洲精品| 免费一级精品啪啪视频| 日本天天人人狠狠在线日美女| 色香伊人| 欧美综合娱乐久久| AV大香蕉| 色天天野狼综合社区| 99久久婷婷丁香| 偷窥自拍亚洲色图| 99久久99九九99九九九| 中文字幕日韩人妻视频一区二区三区 | 久久成人国产| 蜜臀99999| 日本精品五区| 2020中文字幕| 蜜臀中文无码午夜| 亚洲美女自拍偷拍视频| 白丝jkav| 天天色黄色影院天天操| 久久爽爽精品| 欧美Ⅴ性爱| 97蜜桃综合| 亚洲高清91| 一区二区日韩欧美久久| 大香蕉日韩欧美| 操逼网站视频漫画国产| 精品9999| 日韩亚洲国产视频| 日韩精品电影| 日韩中文字幕国产| 999综合色| 国产JDAV无码视频在线观看| 一区二区三区国产精产| 黄片视频观看| 欧美超碰9798| 成人小说另类在线| 啊好大好舒服| 色综合V| 激情五月天校园春色网| 国产精品视频在线观看| 337p大胆噜噜噜噜噜91Av| 加勒比无码毛片| 激情五月天丁香| 91N综合网| 一道本久久棕合爱| 亚洲国产综合图区中文字幕 | 五月天AV资源| 色婷五月| 992大香蕉| 91在线美女| 91精品久久久久五月天精品| 蜜臀99999| 熟妇操花| 亚洲蜜臀精品视频久久| 无码9区| 欧美日韩大香蕉| 大香蕉99热| 国产1769在线| 欧美瑟综合| 亚洲综合网电影91| 偷拍 欧美 日韩| 国产精品欧美激在线| 放黄片放3级黄片没穿衣服| 啊啊啊啊啊操我视频| 四虎视频在线观看| 日本免费人成视频播放120秒| 久久人妻无码毛片A片麻豆| 婷婷五月天伊人| 日本高清一本二本免费不卡| 97九色人妻| 亚洲高清无码在线桃色| 超碰 欧美| 78久久久| 91搞逼视频| 亚洲色性| 青青操在线亚洲视频观看欧美在线| 乱伦色图网址是多少| 大香蕉性欧美| 操美女高潮抽搐白浆| 在线视频亚洲无码| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 91丨九色丨东北熟女| 天天干天天舔| 精品小视频在线| 婷色五月| 国产亚洲中文不卡二区| 美女好片色日本| 夜精品久无码| 搡老女人老妇女老妇老熟女怎么读| 日韩欧美成人综合在线| 日少妇视频| 大香蕉综合在线| 国产超碰国产97| 久久久 国产精品| 永久免费观看的毛片的网站| 99日视频在线免费| 成人看片网站| 国产午夜无码片在线观看影视| 26UUU欧美日本| 日韩欧美中文字亚洲慕| 骚逼一区二区| 99热超碰| 国产自偷自拍一区| 老熟妇一区二区三区…| 亚洲欧洲激情| www.AV有限公司一区| 亚洲骚女一区二区三区| 激情综合二| 一级特黄aaa大片在线观看成人一级片在线观看| 啊啊啊啊好疼| 夜夜操一区二区| 91久久18禁| 狠狠激情综合狠狠操中文字幕| 一区不卡在线观看av| 综合影院永久入口国产| 又黄又硬又粗又长国产视频| 麻豆人妻偷人精品无码视频| 男人久久精品| 欧美少妇一区二区三区| 人妻激情另类| 欧美特大黄一级片片免费| 日韩黄片视频试看| 乱伦一二三区| 天天综合91| 91 欧美| 超碰欧美| 欧美se综合| 97在线免费视频观看| 91久久婷婷| 桑老女人九区| 后入综合久久| 久久久涩| 久热精品在线| 久久久免费高清中文视频| 亚洲伊人青青草| 亚洲国产中文字幕| 国产中文大片资源中文字幕| 乱精品一区字幕二区| 中文字幕av亚洲在线| 在线观看黄色电话| 无码不卡亚洲成?人片| 久久大黄片| 9色国产精品一区粉嫩| 日日夜夜摸| 麻豆国产97在线| 收看日本人日bb| 国产精品久久妻无码网站| 亚洲熟女精品| 在线看片国产精品每日更新| 久草久热| 久久久久久91香蕉国产| 国产精品一区二区后入|