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

ARTICLE DETAIL

資訊詳情

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

Java+Vue+SpringBoot全棧實(shí)戰(zhàn):美食互動(dòng)平臺(tái)從設(shè)計(jì)到部署全解析

Java+Vue+SpringBoot全棧實(shí)戰(zhàn):美食互動(dòng)平臺(tái)從設(shè)計(jì)到部署全解析 先說點(diǎn)實(shí)在的這個(gè)標(biāo)題里頭的東西我基本都親手折騰過一遍。拿java vue SpringBoot組合做美食烹飪互動(dòng)平臺(tái)算是一個(gè)非常標(biāo)準(zhǔn)的全棧實(shí)戰(zhàn)項(xiàng)目既能覆蓋SSM到SpringBoot的過渡知識(shí)又能把前端工程化、數(shù)據(jù)庫設(shè)計(jì)、接口聯(lián)調(diào)、部署上線這些職場(chǎng)里天天要用的事全部串起來。市面上類似的課程設(shè)計(jì)和畢業(yè)設(shè)計(jì)數(shù)量不少但很多都停留在“能跑起來”的水平代碼結(jié)構(gòu)亂、數(shù)據(jù)庫設(shè)計(jì)粗糙、答辯一問就卡殼。這篇博文就按一個(gè)完整的、可以拿去交作業(yè)也可以拿來面試講的項(xiàng)目來拆從表結(jié)構(gòu)到接口、從路由到部署、從答辯問到避坑一步不落。1. 美食互動(dòng)平臺(tái)的核心需求與整體設(shè)計(jì)1.1 這個(gè)項(xiàng)目到底在解決什么問題美食烹飪互動(dòng)平臺(tái)聽名字就知道不是普通的菜譜展示站。它要解決的核心問題是一個(gè)想學(xué)做菜的人如何快速找到適合自己的菜譜并且能跟發(fā)布菜譜的人以及其他學(xué)習(xí)者產(chǎn)生互動(dòng)。所以業(yè)務(wù)上至少要拆出三塊內(nèi)容側(cè)菜譜的發(fā)布、瀏覽、檢索、分類、詳情展示。這是平臺(tái)的底座沒有內(nèi)容一切互動(dòng)都是空談。用戶側(cè)注冊(cè)、登錄、個(gè)人信息維護(hù)、我發(fā)布的菜譜、我的收藏。這部分解決“誰在玩”的問題?;?dòng)側(cè)收藏、點(diǎn)贊、評(píng)論、瀏覽計(jì)數(shù)。這是“互動(dòng)”二字的直接體現(xiàn)也是答辯時(shí)最能講出亮點(diǎn)的模塊。這三塊對(duì)應(yīng)的就是后端的用戶模塊、菜譜模塊、互動(dòng)模塊前端對(duì)應(yīng)的是首頁、菜譜列表頁、詳情頁、發(fā)布頁、個(gè)人中心。整個(gè)項(xiàng)目把前后端分離的常規(guī)打法練了一遍又沒有刻意堆砌復(fù)雜業(yè)務(wù)難度剛好卡在一個(gè)大四學(xué)生跳一跳能夠到的位置。1.2 技術(shù)選型為什么是java vue SpringBoot這套組合在近幾年的課程設(shè)計(jì)和畢業(yè)設(shè)計(jì)里幾乎成了標(biāo)配不是沒有原因的。后端用SpringBoot最大好處是約定優(yōu)于配置。以前用Spring MVC那一套光XML配置文件就能寫好幾頁現(xiàn)在一個(gè)啟動(dòng)類加幾個(gè)注解就能把Web環(huán)境拉起來。項(xiàng)目里再用Spring Boot MyBatis-Plus操作數(shù)據(jù)庫CRUD可以省掉大量樣板代碼甚至分頁查詢都是現(xiàn)成的。對(duì)于時(shí)間有限的畢設(shè)黨來說這套組合能把精力從配置里解放出來放到業(yè)務(wù)實(shí)現(xiàn)上。前端用Vue核心優(yōu)勢(shì)是組件化開發(fā)和生態(tài)成熟。頁面里每一個(gè)功能塊都可以拆成組件比如菜譜卡片、評(píng)論區(qū)、分頁條寫一次到處復(fù)用。配上Vue Router做路由跳轉(zhuǎn)Axios做HTTP請(qǐng)求Element UI提供現(xiàn)成的UI組件一套后臺(tái)管理風(fēng)格的前端界面幾天就能搭出來。數(shù)據(jù)庫選用MySQL配合Navicat這類可視化工具建表、改結(jié)構(gòu)、導(dǎo)數(shù)據(jù)都直觀。項(xiàng)目交付時(shí)數(shù)據(jù)庫腳本是必備的評(píng)審老師打開就能導(dǎo)入印象分會(huì)好很多。1.3 功能拆分與頁面映射把需求翻譯成功能清單大概是下面這樣模塊后端接口前端頁面核心交互用戶注冊(cè)、登錄、個(gè)人信息、修改資料登錄頁、注冊(cè)頁、個(gè)人中心JWT鑒權(quán)、頭像上傳菜譜分頁查詢、條件搜索、分類篩選、詳情、發(fā)布、編輯、刪除首頁、菜譜列表、菜譜詳情、發(fā)布頁多條件組合查詢、圖片上傳互動(dòng)收藏、取消收藏、點(diǎn)贊、評(píng)論、瀏覽計(jì)數(shù)菜譜詳情頁內(nèi)嵌狀態(tài)實(shí)時(shí)更新統(tǒng)計(jì)排行、最新、熱門首頁排行榜、列表頁排序?yàn)g覽量計(jì)算與排序頁面不需要炫技但核心鏈路必須通用戶進(jìn)入首頁看菜譜列表點(diǎn)進(jìn)詳情能看圖文步驟覺得不錯(cuò)就收藏、點(diǎn)贊、評(píng)論想分享自己的做法就注冊(cè)登錄后發(fā)布菜譜在個(gè)人中心管理自己發(fā)過和收藏過的內(nèi)容。這一套走下來項(xiàng)目講解時(shí)能講出一條非常清晰的故事線。2. 數(shù)據(jù)庫設(shè)計(jì)菜譜與互動(dòng)的表結(jié)構(gòu)詳解2.1 設(shè)計(jì)思路先畫業(yè)務(wù)ER圖再落表數(shù)據(jù)庫設(shè)計(jì)是答辯環(huán)節(jié)最容易暴露基本功的地方。很多同學(xué)上來就建表建到一半發(fā)現(xiàn)字段不夠或者關(guān)系沖突再回頭改結(jié)構(gòu)效率奇低。我的做法是先畫ER圖再落表。這個(gè)項(xiàng)目里的實(shí)體其實(shí)很清晰用戶、菜譜分類、菜譜、評(píng)論、收藏記錄。點(diǎn)贊記錄可以考慮單獨(dú)建表也可以跟收藏合并到一張互動(dòng)表里用type區(qū)分但為了講解方便和代碼清晰我建議拆開。關(guān)系是用戶和菜譜一對(duì)多一個(gè)用戶能發(fā)布多個(gè)菜譜。分類和菜譜一對(duì)多一個(gè)分類下掛多個(gè)菜譜。用戶和評(píng)論一對(duì)多一個(gè)用戶能評(píng)論多個(gè)菜譜。菜譜和評(píng)論一對(duì)多一個(gè)菜譜有多條評(píng)論。用戶和菜譜的互動(dòng)多對(duì)多通過收藏表、點(diǎn)贊表來體現(xiàn)。2.2 核心表結(jié)構(gòu)拆解用戶表不需要復(fù)雜常規(guī)字段就夠了。注意密碼必須加密存儲(chǔ)這一步在答辯時(shí)經(jīng)常被問到答不上“為什么不能明文存”會(huì)非常掉分。字段類型說明idbigint主鍵自增usernamevarchar(50)用戶名唯一passwordvarchar(100)BCrypt加密后的密碼nicknamevarchar(50)昵稱avatarvarchar(255)頭像地址emailvarchar(100)郵箱rolevarchar(20)角色區(qū)分普通用戶和管理員create_timedatetime注冊(cè)時(shí)間statustinyint狀態(tài)1正常0禁用菜譜表是內(nèi)容核心字段要多一些。食材和步驟這類結(jié)構(gòu)化文本建議用JSON或者用分隔符存儲(chǔ)避免再拆兩張子表增加復(fù)雜度。我當(dāng)時(shí)的做法是用JSON字符串存食材列表和步驟列表后端解析后返回給前端渲染實(shí)測(cè)方便很多。字段類型說明idbigint主鍵user_idbigint發(fā)布者關(guān)聯(lián)用戶表category_idbigint分類關(guān)聯(lián)分類表titlevarchar(100)菜譜標(biāo)題covervarchar(255)封面圖descriptiontext簡(jiǎn)介ingredientstext食材清單JSON格式stepstext操作步驟JSON格式difficultytinyint難度1簡(jiǎn)單2中等3困難cook_timeint耗時(shí)單位分鐘viewsint瀏覽數(shù)likesint點(diǎn)贊數(shù)statustinyint狀態(tài)1已發(fā)布0草稿create_timedatetime發(fā)布時(shí)間互動(dòng)相關(guān)的三張表評(píng)論表存內(nèi)容收藏表和點(diǎn)贊表記錄用戶與菜譜的關(guān)聯(lián)關(guān)系。后兩張表結(jié)構(gòu)相似但語義不同分開寫更容易講清楚也方便做判斷“當(dāng)前用戶是否已收藏”這類查詢。2.3 索引設(shè)計(jì)列表查詢快不快要看索引數(shù)據(jù)量小的時(shí)候索引感覺不明顯但答辯時(shí)如果被問到“你怎么保證查詢性能”索引就是必答項(xiàng)。我在菜譜表的category_id、user_id、create_time上建了索引在評(píng)論表的recipe_id上建了索引在收藏表和點(diǎn)贊表的user_id recipe_id上建了聯(lián)合唯一索引。聯(lián)合唯一索引同時(shí)解決了兩個(gè)問題防止用戶對(duì)同一條菜譜重復(fù)收藏/點(diǎn)贊以及快速判斷用戶是否收藏過某菜譜。CREATE UNIQUE INDEX uk_user_recipe ON favorite(user_id, recipe_id);這條語句在講解時(shí)可以單獨(dú)拿出來說因?yàn)樗瑫r(shí)體現(xiàn)了你對(duì)約束和數(shù)據(jù)完整性的理解。3. 后端SpringBoot核心實(shí)現(xiàn)從項(xiàng)目骨架到接口落地3.1 項(xiàng)目結(jié)構(gòu)初始化與依賴引入創(chuàng)建SpringBoot項(xiàng)目我用的是IDEA的Spring InitializrJava版本選擇8或者11都可以SpringBoot版本選擇2.7.x。這里有個(gè)過來人的建議不要去追最新的SpringBoot 3.x因?yàn)?.x強(qiáng)制要求JDK 17而且很多教程還停留在2.x遇到問題排查起來會(huì)非常痛苦。關(guān)鍵依賴如下dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.5.3.1/version /dependency dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId scoperuntime/scope /dependency dependency groupIdio.jsonwebtoken/groupId artifactIdjjwt/artifactId version0.9.1/version /dependency dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId /dependencyMyBatis-Plus的引入能省掉大量Mapper XML簡(jiǎn)單的CRUD直接繼承BaseMapper就有現(xiàn)成方法。項(xiàng)目結(jié)構(gòu)上按標(biāo)準(zhǔn)分包c(diǎn)ontroller、service、mapper、entity、commoncommon里面放統(tǒng)一返回結(jié)果、異常處理、工具類。3.2 統(tǒng)一返回結(jié)果與全局異常處理這一步看起來不起眼但直接決定前后端聯(lián)調(diào)時(shí)的效率。如果沒有統(tǒng)一返回格式前端每個(gè)接口都要單獨(dú)判斷數(shù)據(jù)結(jié)構(gòu)調(diào)試成本會(huì)翻倍。我在common包里定義了一個(gè)Result類Data public class ResultT { private Integer code; private String message; private T data; public static T ResultT success(T data) { ResultT result new Result(); result.setCode(200); result.setMessage(操作成功); result.setData(data); return result; } public static T ResultT error(String message) { ResultT result new Result(); result.setCode(500); result.setMessage(message); return result; } }后端所有Controller都返回Result對(duì)象前端Axios統(tǒng)一攔截后取data字段如果code不是200彈出message提示。這樣寫還有另一個(gè)好處全局異常處理器里捕獲的異常也能包裝成Result返回前端不會(huì)看到一堆看不懂的英文堆棧。3.3 JWT登錄認(rèn)證的設(shè)計(jì)與實(shí)現(xiàn)認(rèn)證這塊我用的是JWT而不是傳統(tǒng)的Session。原因很簡(jiǎn)單前后端分離的項(xiàng)目里后端不維護(hù)Session更利于水平擴(kuò)展而且Vue端拿到token后存到localStorage每次請(qǐng)求在攔截器里帶上Authorization頭一套流程很干凈。登錄流程是這樣的用戶提交用戶名密碼后端驗(yàn)證密碼。驗(yàn)證通過后用JWT工具類生成token把用戶ID和用戶名放入claims。token返回給前端前端保存并在后續(xù)請(qǐng)求中攜帶。后端攔截器校驗(yàn)token解析出用戶信息放入ThreadLocal供Controller使用。密碼加密用BCryptPasswordEncoder這里多說一句凡是數(shù)據(jù)庫里有用戶表且存了密碼的項(xiàng)目答辯幾乎必問密碼安全性。你如果能說出“BCrypt是單向哈希、自帶鹽值、同一密碼每次加密結(jié)果不同”這一問就過了。JWT攔截器的核心代碼大致是這樣Component public class JwtInterceptor implements HandlerInterceptor { Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (!(handler instanceof HandlerMethod)) { return true; } String token request.getHeader(Authorization); if (StringUtils.hasText(token) JwtUtil.validateToken(token)) { Integer userId JwtUtil.getUserId(token); UserContext.setUserId(userId); return true; } response.setStatus(401); return false; } Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { UserContext.clear(); } }注意一個(gè)細(xì)節(jié)afterCompletion里必須清掉ThreadLocal否則Tomcat線程池復(fù)用時(shí)會(huì)出現(xiàn)用戶數(shù)據(jù)串號(hào)。這個(gè)點(diǎn)知道的人不多但講出來會(huì)顯得你對(duì)并發(fā)編程有真實(shí)理解。3.4 菜譜模塊的接口設(shè)計(jì)與分頁查詢菜譜列表接口是項(xiàng)目里最重要的一個(gè)接口因?yàn)樗瑫r(shí)支持分頁、分類篩選、按標(biāo)題搜索、按瀏覽量排序、按最新時(shí)間排序。如果不用MyBatis-Plus這一塊要拼不少SQL但現(xiàn)在用LambdaQueryWrapper就能優(yōu)雅搞定。Override public PageResultRecipeVO pageQuery(RecipeQuery query) { PageRecipe page new Page(query.getPageNum(), query.getPageSize()); LambdaQueryWrapperRecipe wrapper new LambdaQueryWrapper(); wrapper.eq(Recipe::getStatus, 1) .eq(query.getCategoryId() ! null, Recipe::getCategoryId, query.getCategoryId()) .like(StringUtils.hasText(query.getKeyword()), Recipe::getTitle, query.getKeyword()) .orderByDesc(query.getOrderBy().equals(hot) ? Recipe::getViews : Recipe::getCreateTime); PageRecipe result recipeMapper.selectPage(page, wrapper); // 轉(zhuǎn)換為VO補(bǔ)充封面圖路徑、發(fā)布者昵稱等信息 return convertToPageResult(result); }這里的亮點(diǎn)在于條件構(gòu)造器可以很優(yōu)雅地把“可選參數(shù)”拼進(jìn)SQL里。eq里的第三個(gè)參數(shù)是布爾值只有條件滿足時(shí)才拼接該條件這樣就不用寫一堆if判斷了。發(fā)布菜譜的接口要注意事務(wù)問題。雖然目前只插入一條菜譜記錄但考慮到以后可能要同時(shí)刷新分類統(tǒng)計(jì)、生成搜索索引應(yīng)該在Service層加上Transactional注解。這個(gè)小細(xì)節(jié)同樣能在答辯時(shí)加分。4. 前端Vue實(shí)現(xiàn)從安裝環(huán)境到頁面組件落地4.1 Vue環(huán)境配置與項(xiàng)目創(chuàng)建Vue環(huán)境配置是很多新手卡住的第一道關(guān)。Node.js的安裝要注意版本Vue CLI 4.x版本建議Node 12以上Vite創(chuàng)建Vue 3項(xiàng)目建議Node 16以上。如果版本不匹配啟動(dòng)時(shí)會(huì)報(bào)一堆看不懂的錯(cuò)。建議直接使用Vite創(chuàng)建Vue 3項(xiàng)目創(chuàng)建命令npm create vitelatest food-platform -- --template vue然后安裝路由和狀態(tài)管理npm install vue-router4 npm install pinia npm install axios npm install element-plusElement Plus是Element UI的Vue 3版本組件風(fēng)格適合內(nèi)容管理類系統(tǒng)表格、表單、卡片、分頁這些都有現(xiàn)成的能省下大量寫CSS的時(shí)間。完整引入和按需引入的問題項(xiàng)目時(shí)間緊就直接完整引入反正畢設(shè)不追求首屏加載極致的包體積。4.2 前端路由設(shè)計(jì)與頁面結(jié)構(gòu)前端路由先想清楚再動(dòng)手不然后面越寫越亂。我的路由設(shè)計(jì)如下路徑組件說明/Home.vue首頁含輪播圖、分類導(dǎo)航、熱門菜譜/recipesRecipeList.vue菜譜列表支持分類和關(guān)鍵詞查詢/recipe/:idRecipeDetail.vue菜譜詳情核心頁面/publishPublishRecipe.vue發(fā)布菜譜需登錄/loginLogin.vue登錄/registerRegister.vue注冊(cè)/userUserCenter.vue個(gè)人中心/user/collectionsUserCollections.vue我的收藏路由守衛(wèi)很重要。發(fā)布菜譜、個(gè)人中心這類頁面必須登錄后才能訪問Vue Router的全局前置守衛(wèi)可以統(tǒng)一處理router.beforeEach((to, from, next) { const token localStorage.getItem(token); if (to.meta.requiresAuth !token) { next(/login); } else { next(); } });4.3 Axios請(qǐng)求封裝與攔截器Axios不封裝直接用也能跑但每個(gè)頁面都要重復(fù)處理token拼接和錯(cuò)誤提示代碼會(huì)非常冗余。我習(xí)慣在src/utils/request.js里做統(tǒng)一封裝import axios from axios; import { ElMessage } from element-plus; import router from ../router; const request axios.create({ baseURL: /api, timeout: 10000 }); request.interceptors.request.use(config { const token localStorage.getItem(token); if (token) { config.headers.Authorization token; } return config; }); request.interceptors.response.use( response { const res response.data; if (res.code 200) { return res.data; } ElMessage.error(res.message || 請(qǐng)求失敗); return Promise.reject(new Error(res.message)); }, error { if (error.response error.response.status 401) { ElMessage.error(請(qǐng)先登錄); localStorage.removeItem(token); router.push(/login); } else { ElMessage.error(網(wǎng)絡(luò)異常請(qǐng)稍后重試); } return Promise.reject(error); } ); export default request;這里有個(gè)關(guān)鍵配置baseURL設(shè)為/api然后在Vite配置文件里加代理轉(zhuǎn)發(fā)到后端8080端口。這樣開發(fā)時(shí)前端請(qǐng)求不會(huì)跨域部署后Nginx也能通過/api前綴做反向代理一套邏輯兩頭通用。4.4 菜譜詳情頁的組件拆分菜譜詳情頁是功能最集成的頁面包含基本信息、食材清單、步驟圖片、瀏覽量、收藏按鈕、點(diǎn)贊按鈕、評(píng)論區(qū)。組件拆分思路RecipeInfo展示標(biāo)題、封面、作者、難度、耗時(shí)、瀏覽量。IngredientList接收J(rèn)SON字符串解析后渲染食材表格。StepList步驟列表用el-steps組件展示。InteractionBar收藏、點(diǎn)贊按鈕動(dòng)態(tài)切換選中狀態(tài)。CommentSection評(píng)論區(qū)支持加載更多。這種拆法最直觀的好處是每個(gè)組件的props和emits是清晰的代碼可讀性強(qiáng)。更關(guān)鍵的是答辯講項(xiàng)目的時(shí)候你能說出“我把可獨(dú)立的功能抽成了組件”這種話比說“我寫了一個(gè)大頁面”有說服力得多。5. 前后端聯(lián)調(diào)與部署上線全流程5.1 本地聯(lián)調(diào)時(shí)的跨域與代理配置前后端分離開發(fā)時(shí)跨域問題無法回避。解決跨域有兩個(gè)層面后端加CORS配置或者前端代理轉(zhuǎn)發(fā)。我在開發(fā)階段用的是Vite代理。在vite.config.js里配置export default defineConfig({ server: { port: 3000, proxy: { /api: { target: http://localhost:8080, changeOrigin: true } } } });這樣前端頁面里發(fā)的/api/user/login請(qǐng)求會(huì)被Vite開發(fā)服務(wù)器轉(zhuǎn)發(fā)到http://localhost:8080/user/login瀏覽器全程只跟同源地址打交道不會(huì)觸發(fā)CORS。后端的CORS配置也不能少因?yàn)椴渴鸷罂赡芮岸遂o態(tài)文件跟后端接口不在同一臺(tái)服務(wù)器上。寫一個(gè)全局CORS配置類Configuration public class CorsConfig implements WebMvcConfigurer { Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/**) .allowedOriginPatterns(*) .allowedMethods(GET, POST, PUT, DELETE, OPTIONS) .allowedHeaders(*) .allowCredentials(true) .maxAge(3600); } }5.2 SpringBoot項(xiàng)目打包與配置文件分離SpringBoot項(xiàng)目的部署最簡(jiǎn)單的方式是把項(xiàng)目打成jar包然后mvn clean package -DskipTests java -jar food-platform.jar但實(shí)盤部署時(shí)建議把配置外置這樣改數(shù)據(jù)庫密碼或者端口時(shí)不用重新打包。方法是在jar包同目錄下放一個(gè)application-prod.yml啟動(dòng)時(shí)指定java -jar food-platform.jar --spring.profiles.activeprod生產(chǎn)環(huán)境的配置里數(shù)據(jù)庫密碼不要寫在明文中可以用Jasypt加密。雖然畢設(shè)階段用不到這么重的手段但你在報(bào)告里提到“配置外置”和“profile區(qū)分環(huán)境”比只說“把項(xiàng)目打成jar包就能跑”要好得多。默認(rèn)端口如果不是8080用server.port配置即可。還有一個(gè)小細(xì)節(jié)SpringBoot 2.7的啟動(dòng)Banner可以自己生成用網(wǎng)絡(luò)上的banner生成工具把字符畫丟進(jìn)去啟動(dòng)時(shí)就能看到效果這種小趣味雖然不影響功能但顯得項(xiàng)目有點(diǎn)人情味發(fā)給老師看的時(shí)候他會(huì)覺得你做事細(xì)致。5.3 Vue項(xiàng)目打包并放進(jìn)SpringBootVue項(xiàng)目打包默認(rèn)輸出到dist目錄npm run build打包完的dist里全是靜態(tài)文件部署方式有兩種常見路線路線一用Nginx托管前端靜態(tài)文件反向代理后端接口。這是生產(chǎn)的標(biāo)準(zhǔn)做法配置大概是server { listen 80; server_name your-domain.com; location / { root /opt/food-platform/dist; try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://127.0.0.1:8080/; } }注意try_files那句Vue Router使用history模式時(shí)不寫這行的話刷新頁面會(huì)404。路線二直接把dist目錄復(fù)制到SpringBoot的src/main/resources/static目錄下然后一起打包。這種做法簡(jiǎn)單粗暴適合沒有獨(dú)立服務(wù)器部署前端靜態(tài)資源的場(chǎng)景。需要注意的坑是如果后端接口前綴是/api而前端路由里也用了/api可能會(huì)跟靜態(tài)資源路徑?jīng)_突。我建議還是走Nginx方案因?yàn)椴渴餜evue打包文件到SpringBoot里會(huì)讓你的項(xiàng)目結(jié)構(gòu)變得不干凈而且給老師演示的時(shí)候Nginx方案更能展示你對(duì)生產(chǎn)環(huán)境的理解。但如果你只是為了在本地一個(gè)jar包把前后端都跑起來第二種方案確實(shí)省事把dist下內(nèi)容拷到static目錄重新打包訪問8080端口就能看到完整頁面。5.4 數(shù)據(jù)庫初始化腳本的編寫規(guī)范交付項(xiàng)目時(shí)數(shù)據(jù)庫腳本是標(biāo)配。腳本里要注意幾點(diǎn)開頭加CREATE DATABASE IF NOT EXISTS和USE語句。所有表加DROP TABLE IF EXISTS但是要注釋掉防止拿著腳本直接跑的時(shí)候把已有數(shù)據(jù)清了。主鍵用AUTO_INCREMENT不手動(dòng)插入主鍵值。插入必要的初始數(shù)據(jù)比如管理員賬號(hào)、分類數(shù)據(jù)、幾條示例菜譜。腳本寫完一定要自己從空庫跑一遍確認(rèn)沒問題再交這是基本功。我見過有人交的SQL腳本是從Navicat直接導(dǎo)出的里面有完整的建表冗余語句導(dǎo)入時(shí)各種報(bào)錯(cuò)這種細(xì)節(jié)問題在答辯現(xiàn)場(chǎng)特別尷尬。6. 常見問題排查與答辯準(zhǔn)備6.1 新手最容易踩的幾個(gè)坑我把這個(gè)項(xiàng)目從零到一做完遇到過的問題基本集中在下面幾類。端口沖突SpringBoot默認(rèn)8080如果本機(jī)已經(jīng)有別的服務(wù)占用了啟動(dòng)會(huì)直接報(bào)錯(cuò)“Port already in use”。排查方式是用netstat -ano | findstr 8080Windows或者lsof -i:8080Mac/Linux查占用進(jìn)程殺掉或者改server.port都行。MyBatis-Plus配置掃不到Mapperapplication.yml里沒配置mapper-locations或者啟動(dòng)類沒加MapperScan注解運(yùn)行時(shí)會(huì)報(bào)“Invalid bound statement”。解決方法是啟動(dòng)類加MapperScan(com.food.mapper)前端404除了前面提到的history模式刷新問題還有一個(gè)常見場(chǎng)景是Nginx只配置了location /反向代理沒寫對(duì)。請(qǐng)求打過去就返回前端index.html但接口路徑實(shí)際沒轉(zhuǎn)發(fā)到后端看到的結(jié)果就是頁面能開數(shù)據(jù)全是空的。圖片上傳后訪問不到項(xiàng)目本地上傳的圖片存在了磁盤上的某個(gè)目錄但前端使用img標(biāo)簽訪問的時(shí)候路徑不對(duì)。把上傳目錄映射成靜態(tài)資源是個(gè)好辦法Configuration public class WebConfig implements WebMvcConfigurer { Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler(/upload/**) .addResourceLocations(file: uploadPath /); } }6.2 答辯高頻問題與回答思路答辯指導(dǎo)這部分我把評(píng)委老師大概率問的問題和對(duì)應(yīng)的回答思路都梳理一下項(xiàng)目用的什么架構(gòu)——前后端分離架構(gòu)。前端Vue Element Plus負(fù)責(zé)頁面渲染和用戶交互后端SpringBoot提供RESTful API通過JSON數(shù)據(jù)交互部署時(shí)前端交給Nginx托管、后端打成jar包運(yùn)行。為什么選SpringBoot不用SSM——SpringBoot簡(jiǎn)化了SSM的配置內(nèi)置Tomcat能夠獨(dú)立運(yùn)行自動(dòng)裝配機(jī)制減少了大量樣板配置。但底層仍然是Spring MVC MyBatis這套東西。數(shù)據(jù)庫表是怎么設(shè)計(jì)的——從業(yè)務(wù)實(shí)體出發(fā)梳理關(guān)系用戶和菜譜是一對(duì)多菜譜和分類是多對(duì)一用戶和菜譜的互動(dòng)通過收藏/點(diǎn)贊表體現(xiàn)。重點(diǎn)字段加了索引聯(lián)合唯一索引防止重復(fù)互動(dòng)。瀏覽量怎么實(shí)現(xiàn)的——就是在詳情接口里對(duì)views字段做1更新。如果要做得更精細(xì)可以通過Redis incr來計(jì)數(shù)再異步落庫但畢設(shè)講清楚基本實(shí)現(xiàn)即可。圖片上傳到哪去了——上傳到服務(wù)器的磁盤目錄通過靜態(tài)資源映射暴露訪問地址。注意不能直接存數(shù)據(jù)庫的BLOB字段會(huì)拖慢數(shù)據(jù)庫性能。評(píng)論和收藏接口怎么設(shè)計(jì)的——評(píng)論表關(guān)聯(lián)菜譜ID和用戶ID新增時(shí)同時(shí)更新菜譜的評(píng)論數(shù)可選。收藏接口先判斷是否已收藏再進(jìn)行插入或刪除操作返回最新狀態(tài)給前端。6.3 報(bào)告的寫法與重點(diǎn)章節(jié)建議項(xiàng)目的交付物不只是代碼還有一份文檔報(bào)告。報(bào)告的關(guān)鍵章節(jié)緒論寫清楚項(xiàng)目背景、國內(nèi)外現(xiàn)狀、研究意義。這部分不用寫太多三頁左右即可。需求分析核心功能的需求描述配合用例圖。用例圖可以用PlantUML或者ProcessOn畫不需要多精但要規(guī)范。系統(tǒng)設(shè)計(jì)架構(gòu)圖、技術(shù)選型、數(shù)據(jù)庫ER圖、表結(jié)構(gòu)說明。這是評(píng)委看得最細(xì)的部分。系統(tǒng)實(shí)現(xiàn)每個(gè)模塊的截圖核心代碼段說明。代碼不要求全量貼挑核心邏輯講清楚。系統(tǒng)測(cè)試寫功能測(cè)試用例表覆蓋登錄、發(fā)布菜譜、收藏、評(píng)論等核心流程。如果有余力加一點(diǎn)JMeter性能測(cè)試截圖會(huì)非常加分。浩瀚的技術(shù)棧里這種全棧項(xiàng)目最容易被問“這個(gè)是你自己寫的嗎”所以你一定要對(duì)每行代碼都了如指掌。我的習(xí)慣是在答辯之前把所有Service層的方法從頭到尾過一遍能說出每個(gè)方法的作用和調(diào)用鏈。6.4 個(gè)人實(shí)操體會(huì)與最后的小建議項(xiàng)目做完之后我最大的感觸是這套技術(shù)棧組合不是為了炫技而是它恰好覆蓋了一個(gè)真實(shí)Web項(xiàng)目從寫到跑的所有環(huán)節(jié)。你寫數(shù)據(jù)庫的時(shí)候在做表結(jié)構(gòu)和索引設(shè)計(jì)寫Vue的時(shí)候在考慮組件復(fù)用和路由權(quán)限寫部署的時(shí)候要處理跨域、靜態(tài)資源、進(jìn)程管理和日志查看這一整套經(jīng)驗(yàn)在以后的工作里會(huì)反復(fù)用到。最后分享一個(gè)很實(shí)用的小建議項(xiàng)目答辯前把項(xiàng)目在另一臺(tái)電腦上從零部署一遍。MySQL導(dǎo)入腳本、JDK安裝、Node環(huán)境、jar包啟動(dòng)全程記錄下來。一方面你會(huì)發(fā)現(xiàn)自己遺漏了哪些依賴沒說明另一方面這份部署文檔直接放進(jìn)報(bào)告正文當(dāng)“部署說明”章節(jié)質(zhì)量比網(wǎng)上抄來的教程靠譜得多。至于答辯現(xiàn)場(chǎng)評(píng)委讓你現(xiàn)場(chǎng)啟動(dòng)項(xiàng)目你也不會(huì)因?yàn)榄h(huán)境問題卡住而手忙腳亂。這個(gè)項(xiàng)目本身還可以繼續(xù)擴(kuò)展的方向有不少我后來在里面加了菜譜收藏統(tǒng)計(jì)排行、用戶上傳菜譜審核、按食材名稱搜索再往后甚至可以引入Redis緩存熱門菜譜列表。但對(duì)現(xiàn)階段的你來說先把基礎(chǔ)鏈路走通、把每個(gè)細(xì)節(jié)問透就已經(jīng)贏過大多數(shù)交爛大街項(xiàng)目的人了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
99热这里只有精品1| 丁香六月婷婷久久综合| 黄站在线免费观看| 超碰调教97| 亚洲黄色视频在线观看视频| 东北女人性交| 一起草av| 亚洲一区二区三区AV无码 | 无遮挡又黄又刺激的视频| 呦女网站| 国产久久久久影院老熟女| 99自拍视频| 日韩AV无码网站| www久久精品| 手机在线观看不卡无码av| 亚洲AV无码| 操逼网站视频漫画国产| 中文字幕在线观看网页| 九九精品美女高溯喷水| 人人操肉肉| 欧美乱伦专区| 成人性生活高清视频在线播放| 欧美另类自拍 | 电影69乱码96| 中文字幕精品资源在线| 欧美丝袜制服久久| 亚洲97成人在线观看| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| 九九九久久久久| 素人播放一区| 亚洲国产一区二区三区在线 | 欧美日韩高潮喷水91| 特级丰满少妇一级AAAA爱毛片| 国产精品久久妻无码网站| 91精品老女人| 老熟女搡BBBB搡BBBB视频| 日韩操逼性鲍| 四虎国产精品永久入口| 日韩中文字幕在线视频观看| www.99热| 欧美熟女少妇| 久久妇| 欧美第38页| 狠狠操狠狠操操| 四虎在线视频| 成人无码欧美一级A片狼牙直播| 2019亚洲男人天堂| 国产日韩美女小穴视频网站不卡| 日韩无码第3页| 风间由美日韩欧美久久| 成人小电影网站tex| 蜜桃久久一区二区| 国产一区在线观看无码AV| 中文色综合| 亚洲精品人妻在线| 干婷婷综合网| 色性综合| 少妇色综合| 久久青娱乐| 天堂综合网| 草草电影院| 亚洲欧洲日韩天堂av| 操逼1区| 99re久久| 清纯唯美激情四射| 久久久999国产精品| 欧美78P| 9色国产精品一区粉嫩 | 中文字幕日韩综合| 青青草啪啪网| 欧美色图校园春色| 亚洲欧美国产中文视频| 亚洲国产麻豆一区二区三区| 婷婷久久五月| 亚洲大色堂| 五月婷网站| 26uuu国产| 熟女一区二区三区| 日韩精品 欧美激情| 久久精品国产亚洲AV先锋| 色乱二区| 夜夜操天天肏| 9久9久9久9久视频网站| 亚洲精品一区二区精华| 国产成人久久久精品免费AV| www.一本大99| 电家庭影院午夜69久久夜色精品国产69乱 | 久草资源在线| 免费A V在线播放| 欧美日韩丝袜| 亚洲情色 自拍| 98人妻精品一区二区色欲| 九九无码视频| 老女人碰碰在线碰碰视频| 欧美性性性| 免费一级黄色录像影片| 三级片大波波| 成人av性爱电影在线观看| HEYZO高无码国产精品227| 99.色网| 熟女少妇视频| 92人人操人人| 男人的天堂在线| 亚洲欧洲自拍图片专区满春格| 五月丁香色婷婷| 9ⅰ久久久天天| 男女性无套 免费九一| 国产精品秘 福利姬在线观看| 97精品国产手机| 青娱乐淫乱1314| 成人婷婷丁香| 96精品久久| 97人人模人人爽人人| 超碰午夜| 加勒比无码一区二区三区| 亚洲精品久久久久久| 人人看人人爰人人操| 少妇六月天| 97天天日| 国产天天骚| 羞涩视频| 日本三级人妻a人妻一在线| 欧美91变态| 素人播放一区| 韩国免费播放一级毛片| 97玖玖超碰| 一级片视频啪啪| 熟妇视频一区二区三区在线观看| 97亚洲综合| 精品国产乱码久久久久久影片| 欧美综合色综合| 69精品久久久久中文字幕| 青青欧美| 日本性爱少妇| 欧美在线电影| 99久久com免费视频′| 神马午夜久久| ,国产乱人伦精品一区二区三区| 国产精品美女久久久久久网站| 91人妻视频在线| 日本黄色精品专区网站| 一区,二区,三区视频| 国产毛片在线| 日韩AV噜噜噜一区二区三区四区| 蜜臀av一区二区三区免费观看| 欧美天天干| 91在线视频免费中出| 免费视频在线一区二区不卡| 啊啊啊啊无码| 久久久久久久久久久人妻| 一中国女人毛片水真多| 97精品一区| 中亚精品极乱| 欧美性生活免费网| 国产夫妻性生活视频| 婷婷六月天| 激情天天视频| 9色国产精品一区粉嫩| 99热aaa| 国产中文字幕曰本毛片| 综合伊人激情| 国产9熟妇视频网站| 日韩啪啪啪啪啪| 久久首页| 欧美97爱| 中文字幕精品专区搜索结果91| 97综合在线| 欧美性爱第一页久久| 欧美玖玖爱免费玖玖| www.久久| 国产精品爽爽va在线观看98| 亚洲av综合伊人久久| 日韩 女同 综合| 色老汉玖玖爱| 国产亚洲精品自在线亚洲情侣| 美女被啪到深处抽搐视频| 秋霞福利网| 99国产精品人妻人伦| 懂色AV蜜臀无码精品APP | 日韩欧美经典在线观看| 麻豆视频国产一区二区| 91精品人妻一品二品三品| 午夜精品久久久久久久99热影院| 亚洲综合五月天婷婷丁香| 黑人精品XXX一区一二区| 花花AV导航| 亚洲成人色情五月天丁香花| 国产天天骚| 丁香五月大香蕉| 人人摸人人摸人人干| 无码区蜜乳| 天久久久噜噜噜久久国产精品爽爽| 日韩91网| 伊人久久国产免费观看视频| 97久精品| 亚洲精品99| av凤凰久久久| 首页亚洲国产高跟丝袜诱惑视频| 伊人五月天激情| 无码区蜜乳| 蜜臀久久99精品久久久久久无删减 | 你草精品在线视频| 亚洲丝袜天堂| 中文97国产| 国产视频一区二区在线| 国产精品青青草| 天天操夜夜操| 久操B网| 日韩熟女精品无码专区一区二区| 夜夜操夜夜爽夜夜高潮| 精品人妻夜夜草| 18一区二区三区| 欧美嗯啊……在线观看视频免费| 欧美少妇一区二区三区| 亚洲美女色图| 色麻豆AV| 精品无码久久| 在线午夜成人无码视频| 色就色综合| 国产无马视频| 综合婷婷| 欧美九9 9 9| 欧美熟爽综合| 亚洲人在线成线成人| 在线女人91| 日日夜夜骚| 中文字幕片| 曰本91情色| 一区二三区四区视频大全套| 国产精品69久久久久久久| 天美一区在线| 不卡在线观看视频| 欧美一级黄色免费专区| 日韩精品人妻一| 亚欧Av| 四色永久成人网站| 亚欧美综合网。| 色综九九九一区| 超碰碰97资源站| 91无遮挡| 色噜噜人妻丝袜a∨先锋影| 天天插天天射| 免费看污网址| 99999re| 亚洲色欲天天天堂色欲网女| 色吧综合网| 亚洲 欧美 另类 综合 偷拍| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 日韩99999| 尤物网站91| 亚洲第一精品在线视频| 久久熟女人| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 国产精品毛片?v一区二区三区| 国产一级不卡在线观看| 调教熟妇 久久久久久| 九九久久一区二区三区| 色欲久久99精品久久| 蜜臀久久99精品久久久电影| 看一级黄色视频| WWW4虎| 后入福利视频| 岛国黄片网站| 夜色五月天| 精品亚洲黄色片 国产精品导航一区二区 | 午夜激情成人在线观看| 婷婷天堂站| 97亚洲在线| 欧美一区二区一级岛国大片| 9+1视频网址| 91骚妇| 火箭成精品视频884必出精品| 国产又猛又粗又爽又黄| 亚洲男人天堂Av| 性九九九九九九| 欧洲性爱无码区| 97碰在线视频| 人人妻人人色一区二区三区| 国产一区二区三区久久久精品| 激情自拍 校园春色| 少妇熟女视频一区二区三区| 在线国产福利网址导航| 在线 亚洲 网爆 自拍| 少妇熟女一区二区三区| 久操不卡视频| 亚洲脚交| 日韩人妻免费精品| 日韩综合97P| 逼操网站| 男人的天堂日韩| jk白丝没脱就开始啪啪| 欧美日韩黄片精品在线| 欧美最婬乱婬爆婬性视频 | 天天日天天舔天天喷天天射| 亚洲精品国产拍免费91在线| 精品毛片久久久精品毛片| 婷婷香网站| 国产视频一区二区三区在线免费观看 | 亚洲人妻AV| 欧美亚洲高清晰| 女同性恋久久| 啊啊啊慢点| 五月天综合在线| 超碰色图| 久久久久久性爱片| 操逼逼一区视频| 1204av韩国| 精品毛片av一区二区| 先锋音影AV| 无码精品久久久天天影视| 日韩资源网| 精品国产乱码久久久久久口爆网站| 91操人| 欧美性爱伊人| 欧美精品激情| 激情露脸爱| 狠狠操夜夜| 在线播放中文字幕| 91狠狠综合久久久久久| 午夜性刺激视频免费观看| 中文字幕乱碼在线| 国产精品欧美日韩久久| 国产精品夜夜夜| 婷婷久久综合久| 在线亚洲欧美| 亚洲色图自拍| 中文字幕一区av| 一区二区三区在线资源| 熟女人妻一区二区三区| 综合激情97 | 黑丝内射一区二区三区| 国产精品久久久久久久AV大片| 嗯嗯啊啊啊啊轻点视频| 一品道视频一区二区三区| 91福利网在线观看| 骚鸭AV| 久久久不能久久久久| 国产日韩精品人妻久久久久色欲网站| 18精品一二区| 亚洲伊人久久精品影院| 97超碰美国| av在线不卡一区二区三区| 精品美女少妇一区二区| oumeizonghese,www| 97精品综合| 欧美激情性爱视频网站| 91九九| 劲爆欧美人妖三区91| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 人人操人人摸人人看人人插| 成人日本片久久久蜜桃| 欧美少妇第一页| 在线观看精品国产免费| 91东京热男人的天堂| 亚洲欧美校园| 夜夜嗨免费视频| 91久久伊人婷婷青青草| 日韩精品99999| 日韩免费大片一级播放| 国产91福利小视频在线观看| 熟人人妻少妇精品久久| 97视频新免费| 加勒比日本在线| 中文字幕二区日韩天堂 | 一本大道久| 亚洲综合校园春色| 精国久久一区二区三区98| 国产精品久久久视频| 日本岛国黄色网址| 九九aV| 无码精品人妻一区二区三区妖精 | 4141514逼喷水三级片| 中文字幕 国产区| 久久一区二区高清免费| 国产成人99久久亚洲综合| 97色亚洲| 亚州综合色| 午夜一区| 1240青青草一区二区三区视频天爱| 中文字幕免费在线观看| 97中文字幕一区| 91欧洲入口| 蜜臀av中文字幕| 久久精品电影| 超碰精品人妻狠狠干| 中文字幕人乱码中文字的预防方法 | 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 操我啊啊啊啊啊| 天天欧美色| 亚洲男人天堂2019| 99久久无色码| 欧洲与亚洲欧美精品中文字幕| 天天干天天日天天射黄色大片| 中文字暮97| 91国产丝袜足交精品视频| 女人妻一区| 91在线限制级| 久久久久9| 亚洲中文字幕97久久精品少妇| 亚洲国产一区二区日韩专区| 天天插天天操| 综合网亚洲1| 中国一级特黄大片护士| 91综合国产精品| 俺去啦俺来也久久综合| 超碰人妻中文在线| 精品v日韩欧美国产| 大香蕉淫人| 成人AV素股で擦久久| 精品成人动漫一区二区| 东北女人性交| 毛片99-全集电影手机免费观看完整-B029AV | 色婷婷影视| 成人免费看吃奶视频网站| Julia Annxxxxx| 激情五月天婷婷| 天天天天天天天天综合| 久久久久久久九九九九| 亚洲欧洲无码bt精品合集| 色五月首页| 自慰白浆在线观看| 欧美精品999| 四色永久成人网站| 九九色婷婷| 狠狠操天天干| 亚洲 欧美 中文 日韩超碰 | 天天影视色香欲综合网小说| 天天干18禁| 久久超碰网| 人妻一区二区三区四区视频| 翔田千里无码一区| 欧洲成人性爱视频| 亚洲成av人片色午夜乱码| 成人五月香网在线| 九九英色视频| 九九九国产精品| 97国产|免费| 亚洲中文字幕熟女| 亚洲一区二区性爱电影| 久久99久久99久久99人受| 麻豆区99999| 国产性爱欧美性爱在线 | 人人操肉肉| 午夜男人一级A片7777| 上海一级黄片| caopeng97人妻| 欧美色图亚洲色图成人在在线| 五十路三级片| 免费观看日本操逼视频| 久久五月天婷婷| 好爽要喷了| 秋霞操逼片| 99色在线| 99在线精品观看视频中文| 高清孕妇孕交 交孕妇| 日本道日本道中文字幕日本道最新日本道在线观看 | 99re6国产精品99re| 青青免费在线视频一区| 中文字幕精品亚洲熟女| 日韩有码中文字幕女同性恋| 99夜夜操| 日韩天堂av电影在线观看| 欧美不卡五十路| 超碰4A| AV网站高清无码在线观看| 久久久久久AV无码免费网站| 超碰国产情侣自拍网| 欧美se综合| 久热婷婷| 午夜福利合集| 久久99精品视频| 91超碰丝袜制服| 国产精品熟女丝袜一区二区| 天天影视之亚洲综合网| 欧美日韩色综合网| 好舒服视频| ?亚洲伊人伊成久久人综合网| 中文幕97| 睡产熟女乱伦| 大香蕉淫人| 最新加勒比丝袜在线| 亚洲欧美另类激情小说| 天天看特黄的免费网站| 国产高清26uuu| 美女黄色91| 丰满人妻一区二区三区四| 国产欧美在线观看免费观看| 婷婷香网站| 柠檬AV导航| 蜜臀AV秘一区翔田千里| 青草视频人妻在线观看| 亚洲丝袜二区| 一起草在线视频| 欧美专利1区2区3区4区5区免费| 超碰1997| 懂色中文一区二区三区| 久久久久国产无av| 美国一区二区三区视频| 国产午夜精品一区二区三区牛牛| 校园春色家庭伦理欧美激情| 91影视亚洲| 九热大香蕉| 日韩不卡a级视频专区| 黄色一区三区| 一本色道综合久久欧美| 久久久一二三四区| 亚洲av综合色区图片亚洲| 国产亚热在线久久| 超碰碰激情97+久| 在线观看一卡二卡| 97色干| 国产树林里野战在线看| 五月丁香六月综合缴清无码| 久久东京热久久| 少妇精品久久久八区九区| 久久这里精品国产99丫e6| 天天干,夜夜爽| 国产小u女在线观看| 性影在线视频| jk白丝没脱就开始啪啪| 久久双插| 国产日韩精品人妻久久久久色欲网站 | 入口操逼网站| 国产精品69人妻无码久久久| 黄人人操人人操| 100啪啪视频大全| 日韩无码精品综合久久| 国产成人无码a| 成全在线观看免费观看| www.伪伪| 韩国黄色片精品久久久| 五月婷婷基地| 中文字幕丝袜美腿| 日本黄色裸日本黄色裸体| 9 7超碰在线免费观看| 欧美日日人人天天| 日本三级日本三级三级人妇四虎| 欧美成人黄网色网站| 青草一区二区| 超碰成人公开| 精品无吗久久| 亚洲天天在线| 禁片 高清 在线观看视频网站| 激情视频一二三| 国产美女口爆吞精| 麻豆国产成人精品| 日韩久草| 亚洲激情在线观看一区| a人欧美综合天堂麻豆| 久久久男人的天堂| 国产精品乱码久久久久| 中国一级特黄大片护士 | 亚洲成人无码影院| 99精品在线观看| 亚洲凸凹超碰成人| 水多多映视AV| 牛黄色久午久| 日本好吊色视频| 久久 精品| 久久香蕉综合一本到3atv| 后入人妻一区| 久久 精品| 91精品无码人妻系列| 国产盗摄美女如厕大神作品在线观看| 99热这里只有精品1| 99e久久国产精品| 蜜臀精品1区2区| 国产馆| 97久久超碰| 国产中午字一暮区| 性做久久久久久久| 欧美一级专区免费大片| 翔田千里AⅤHD无码| 亚洲另类久操网| 色综合av综合久久| 亚洲最大91网| 综合久久2017| 亭亭丁香激情| 超碰碰激情97+久| 欧美在线啊啊啊 | 国产精品熟女丝袜一区二区| 久9热| 最新日韩黄片| 亚洲97资源| 婷婷五月天综合网| 日本高清视频xxxx| 青青草福利视频| 秋霞午夜视频一区二区| 日本一区不卡| 久久婷婷五月天| 九九五月天| 亚洲男人天堂2| 青青草大香蕉视频| 麻豆这里只有精品| 人人操人人肉久久精品| 日本熟妇熟色97一本在线观看| 日韩无码视频黄色| 久热久操| 无码9区| 人妻啪| 日韩欧美女求操每天更新| 成人女人国产| 91GD.COM| 日韩在线性爱免费视频| 粉嫩av一区二区三区天美传媒| 亚 欧 美 综合| 丝袜美腿制服人妻二区中文字幕 | 日韩猛交| 日本性一区| 超碰97资源中文字幕| 性一交一乱一交A片久久四色| 97在线免费观看视频| 亚洲一区制服诱惑| 97久久免费| 亚洲 91 在线| 啊视频在线| 亚洲图片欧洲图片aⅴ| 日韩无码人妻| 日日摸日日碰夜夜爽视频| 91熟女.com| 亚洲限制级| 91九色丨国产丨爆乳| 国产午夜精品理论片一二三区区 | 男人女人18禁片免费看网站| ,国产乱人伦精品一区二区三区| 亚洲综合首页| 青娱乐av在线| 日韩免费高清大片在线| 无码一区二区精品视频久久久春药| 老熟乱一区二区三区四区| 日产精品久久久一区二区| 色噜噜人妻av中文字幕| 欧美日韩中文字幕人妻| 永久免费av无码网站国产app| 疯操AV| 神马久久啊啊| 丰满人妻一区二区中文| 丝袜综合| 超碰到97情色| 97操97干| 少妇天堂| 欧美 亚洲 另类 综合| 麻豆成人AV| 欧美日韩成人在线| 免费A片三p视频| 91精品丝袜久久久久久| 欧美亚洲AN| 日韩内射视频| www.99中文字幕| 国产久久久久久| 亚洲国产亚洲天堂| 五月天亚洲网| 97视频900| 无码久| 久久精品天美| 久草久日| 夜夜做夜夜爽精品视频| 青青操在线亚洲视频观看欧美在线 | 免费国产视频| 亚洲国产综合图区中文字幕| 葡萄牙性视频一二区| 国内外激情在线| 2017天天操天天日| 91亚洲色图| 1769一区| 亚洲强奸乱伦影视网| 首页中文字幕中文字幕免费| 亚洲成?V人片在线观看福利| 把腿张开老子CAO烂你| 午夜视频好爽啊| 日韩av一级黄片| 精品国产乱码久久久久A| 怡红院视频在线| 无码一区二区三区四区五区六区七区八区九区十区视频 | 1024日韩| 91是天天| 91 丝袜在线观看| 亚洲欧美日韩激情不卡| 亚洲熟妇A V黑人| A一区片| 另类小色呦| 欲女人妻性色av| www.人人摸在线视频| 一二三四视频中文字幕在线看| 91人人臊| 蜜臀aV午夜一区二区三区| 人人看人人插| 深夜激情无码| 久久久一区二区| 欧美92| 国产91亚洲精品一区二区三区| 日本性感人妻91| 黄色高清无码无码破解免费暗网 | 日本韩国国产精品一区| 久久精品国产免费观看99| 91麻豆天美国产| 中文无线日韩一区| 欧美伊人久久综合网| 中文一区二区婷婷视频| 视频在线观看青青99国产| 啪啪啪东京| 成人日韩欧美| 色色97爱| 人人扣人人操| 亚洲清纯综合| 亚洲一区二区三区播放在线| 女一区二区| 男人女人18禁片免费看网站| 久艹伊人精品综合在线| 久久伊人亚洲AV无码网站| 欧美美女在线高潮999| 国产精品毛片?v一区二区三区 | 伊人久久亚洲色欲综合网站| 国产精品干干干| 亚洲日韩XXX| 国产精品女久久久久av爽| 日韩精品9区| 99热99在线播放激情| 超碰在线成人电影| 狠狠五月天| 天天综合亚洲综合| 欧美狠狠鲁| 日韩精品 视频一区二区| 成人精品水蜜桃久久久久久久| 国产女人与拘做受视频免费| 无码人妻毛片丰满熟妇精品区| 亚洲AV成人在线| 淫荡网址| 欧美色道啊| 亚洲色图91欧美日韩| 国产黄色在线播放观看| 精品久操| 亚洲欧美爆| 日韩高清黄片| 久九九九九九九九热| 亚洲 中文 女同| 久久久久久久国产a∨| 97精品在线视频| 无码人妻丰满熟妇奶水区毛片| 在线视频97| 淫乱图区 | 国产黄色在线播放观看| 久久精品人妻一区二区三区| 男人的天堂色偷偷青青草视频婷婷网| 操逼片国产| 亚洲色图欧美一区二区不卡| com 首页 18岁 禁区 女优 免费 精选 同城 | 国产精品分类在线观看| 大香蕉线| 久热99999| 欧美 熟女 日韩| 偷拍欧美激情| 思思热免费在线视频| 精品日韩人妻精品一二三区| 国产精品操| 天天在线91| 亚洲综合校园春色| 97色论| 成人资源中文字幕在线观看天天| 欧亚免费视频| 欧美综合站| 97色97好| 亚洲九九视频| 日本阿v天堂在线观看| 熟女激情综合网| 成人一道本免费视频| 无码137片内射在线影院| 小视频国产| 中日韩欧美精品无码AⅤ一区二区| 日韩无码极品| 美女久久久| 少妇一区二区三区高速| 中日韩熟女| 欧美九9 9 9| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 久9精品| 啪啪性爱免费视频| 欧美人人AAA| 亚洲日产专区| 日韩钢筋无码高清啾啾啾| 亚洲 欧美 小说| 欧洲一区二区| 综合久久久久久久久91| 国产情侣自拍在线播放| 操人91| 伊人伊人LD| 久久蜜桃一区二区| 无码丰满熟妇一区二区浪潮AV| 欧美不卡二区| 日本一天色道久久久精品视频| 久久久91福利姬| 国产精品一区二区久久精品| 激情久久久| 色香在线| 免费观看日本操逼视频| 亚洲欧洲日韩国产自在线| 99热亚洲天堂| 日本二区不卡| av一区二区三区 中文| 日本九九久久99播| 亚洲天堂2020| 久久亚洲不卡| 久伊人网78| 国产三级电影免费观看| 女生自91网站| 亚洲AV秘无码一区..| 97天天爽| 天天激清| 极品五月天噜噜| 综合亚洲网| 丁香六月综合激情| 天天日天天看| 大香蕉久久| 综合 亚洲 欧美| 久久久久国产一区二| 亚洲色图综合网| 国产又大又硬又长又粗| 日韩无码久久熟女一级片| 欧美性爱中文字幕无线码| 欧美日韩亚洲天堂网| 高清无码 国产精品| 黑丝制服中文字幕 | 综合网天天| 无码操逼天堂| 大香蕉伊人色偷偷在线| 久久久久亚洲av综合波多野制衣| 久久综合久色欧美综合狠狠 | 日日插夜夜| 亚洲日本韩国极品一区二区| 丝袜足交视频| 狠狠干精品一二三四五六2022| 成人av在线播放| 亚洲深夜福利| 成人一区二区三区四区| 天天干一干| 少妇一区二区三区精选| 亚洲日韩黑丝| 男人的天堂2018.| 操高情无码| 亚洲日韩天堂| WWW美腿丝袜香蕉中文| 91N欧美| 中文字幕aⅴ在线视频| 人人操人人色网| 色一区二区三区综合| 中文字幕91综合| 国产精品999zyz| 精品熟女呻吟久久91| 超碰偷拍| 日韩亚洲美女一区久久| 色色无码| 2018色综合天天操| 国产精品一区二区三区,亚洲综合 性开放中文AV高清无码免费看 | 1禁看欧美黄片免费看| 欧美人黑A片无码免视费| 香蕉精品二区二区| 97视频新免费| 精久久久| 中文字幕色AV| 丝袜狂射91| 福利一级版子| 香蕉久久精品| 香蕉久久精品| 欧美日本天堂| 1000午夜黄色| 夜夜精品视频一区二区| 超碰久久网| 精人妻无码一区二区三区伊人直播| 内射中出日韩在线观看视频| 女一区二区| 一区二区三区机械有限公司| 久热大香蕉| 五月婷婷六月丁香| 狠狠中文字幕| 情色av电影| 中亚黄色三级大片| 四虎影视 亚洲无码| 91人妻熟女| 天天做天天爱夜夜爽毛片试看| 亚洲欧美色图小说| 一个人免费HD91视频| 亚洲精品三| 99丝袜福利在线播放| 免费日韩黄片| 久久久亚洲精品电影免费看| 国产夫妻性生活视频| 国产精品久久天天干| 久久精彩视频| 91精品导航| 欧美成人精品一区| 久久草草亚洲蜜桃臀| 久久五月天婷婷| 久久99999| 啊啊啊好想要| 欧美毛片在线网| 久日91在线| 国产探花日韩援交| 插欧洲美女欧美精品| 夜夜嗨AV蜜臀av| 加勒比色综合| 亚洲aV无码成人在线观看| 亚洲精品一区中文字幕乱码| 青青草乱入乱欲视频在线观看| 狠狠干91| 国产馆极品诱惑| 国产操逼视频在线观看| 中美日韩毛片| 摸奶性爱视频网站在线免费播放| 91人人爽人人爽| 亚洲综合电影| 精品九九九九九九九| 黄色一区二区秘书性感| 色呦色呦色精品| 黑人无码一区二区| 久久成人精品| 97WW精品| 国产又黄又爽又刺激久久久久久 | 91在线免费精品视频| 欧美黄色片AAAAA| 亚洲欧美97√| 国产美女激情| 三级片网站在线播放| 亚洲欧美在线丝袜| 熟女在线视频| 日韩国产乱子伦App| 日韩97| 91五月天| 大香蕉九九| 日韩黄片影院| 91久久伊人婷婷青青草| 99免费视频| 在线综合 亚洲 欧美中文字幕| 天天天堂影视日韩亚洲91| 亚洲精品男人的天堂| 国产精品女久久久久av爽| 骚日日av| 天天综合麻豆视频| 久久久久中出| 国产隔壁老王影院在线| 久久超碰com| 蜜臀一二三区| 久久香蕉超碰97国产精品| 91九九| 俺去也婷婷| 九九综合久久| 中文字幕亚洲永久精品| 七月丁香婷婷| 久久99干一本高清| 欧美色www亚洲国产阿娇要播| 开心五月婷婷激情| 欧美日韩中文字幕不卡| xxx亚洲午夜天堂| 69超碰综合| 狠狠狠狠狠| 秋霞视频一区二区| 日本日皮视频逼| 香蕉人欧美综合| 天天噜| 亚洲高清91| 日日爽熟女| 玖玖大干人妻| JuliaAnnXXX888| 91蜜桃传媒精品久久久一区二区| 热久日综合| 精品人妻一区二区三区视频| 亚洲情色在线| 美女毛片999| 九九九久久久久| 少妇色综合| 99超碰碰| 综合色欧美| 69天堂| 另类图片欧美激情综合| 先锋影音av先锋一区| 日韩簧片免费看| 性开放中文AV高清无码免费看| 日韩图区 偷拍| 日本道久久综合色色| 中文字幕一区二区三区四区在线视频| 亚洲综合第一页| 凹凸视频在线观看伊人| 欧美在线视频99| 亚洲色香| 大香蕉中文在线| 26uuu性| 人妻天天爽夜夜爽爽| 精国久久一区二区三区98| 99999亚洲| 亚洲第一狼人丝袜美女另类| 超碰97欧美在线| 日本好吊色视频| 国产婷婷综合在线观看| 国产原创自拍| 久久伦理视频久久大香蕉视频| 欧美 亚洲精品首页| 能在线播放的国产三级| 国产夜夜艹| 国产成人五月天丁香花| 美女午夜福利免费视频| 亚洲丝袜色| 91欧美亚洲| 凹凸视频特色日本特黄| 国产高清亚洲日韩一区| 婷婷五月天激情四射| 超碰在97| 亚洲欧美日韩精品久| 国产乱码精品久久久久久 | 嫩呦国产一区二区三区AV| 91肏屄网| 婷婷综合伊人一区| 国产精品久久久久久夜夜夜| 激情在线青青操| 三级片网站在线播放| 精彩国产视频播放1区2区| 日婷婷| 国产十八禁视频| 久久久久久久久成人av解说| 久草老司机| 9久精品| 在线观看中文字幕| 物尤视频一区二区| 操逼www.| 欧美亚洲高清晰 | 啪啪综合网| 99青草| 台湾成人无码AV| 9ⅰ久久久天天| 91美女在线精品视频| 无码人妻精品一区二区三区99不卡| 天天摸夜夜摸| 中文字幕国产在线天堂| 亚洲综合校园春色| 午夜免费福利视频一区| 熟女网站最新| 玖玖爱在线视频免费观看| 亚洲丝袜色图| 99热只有这里有精品| 99re9| 色男人色天堂东京热| 99色视频| 国产高清免费不卡av| 91老熟妇| 97人人夜| 亚洲视频二区| 麻豆婷婷成人一二三| 综合一区中亚洲国产成人综合精品| 久久久久人| 亚洲网污污污污| 国产女上位好爽在线| 男男H黄动漫啪啪无遮挡网站| 欧美一级美片在线观看免费| 国产精品另类| 久久久一区二区| 中文字幕文字幕无码一区二区三区电影99 | 激情五月天社区| 国产日韩欧美中文在线播放| 欧洲精品二区| 超碰95| 亚洲综合九九| 性色aV一区二区三区噜噜| 熟妇人妻一二三区免费| 久操| 欧美日韩97在线| 91痴汉| 97伊人超碰| 男人的天堂 在线一区| 日韩在线电影| 免费a v| 国产一区免费午夜视频| 啪啪啪东京| 午夜福利激情在线视频| 国模少妇一区二区三区| 色噜噜人妻丝袜a∨先锋影| 久久伊人大香蕉| 五月丁香影院| 亚洲情色一区三区| 精品美女人人干| 日逼97| 亚洲欧洲无码bt精品合集| 亚洲成人福利电影免费| 这里都是精品在线观看| 五月丁香综合网| 久久久久国产亚洲一区欧美色图日韩| 久九干| 日韩AV噜噜噜一区二区三区四区| 97资源久久| AV一区观看| 欧美拳交在线播放| 老熟妇一区二区三区啪啪| 96久久久久久久| 国产一区自拍欧美日韩| 日韩不卡a级视频专区| 欧美图片色综合| 欧美激情内射| 一级特黄aaa大片在线观看成人一级片在线观看| www成人啪啪18秘 免费| 国模限制级电影| 日本性爰一道本| 国产精品香蕉热久久新品| 精品97久久综合| 亚洲一区二区精品福利| AV天黑人| 日韩av熟女一区二区三区成人| 96久久久| 久久久久久久一级黄色打同平台| 青娱乐休闲视频在线观看| 丰满人妻一区二区三区免费,| 国产亚洲福利第一页丝袜| 精品人妻一区二区乱码一区二区| 91制服丝袜中文字幕| 国产操逼逼网| 99色婷婷中文字幕乱色| 9色国产精品一区粉嫩| 99热99色| 午夜毛片亚洲精品片国产久久久| A级国产欧美激情在线| 精品久久久久黄少妇| 国产偷人伦激情在线观看| 9 9精品一区二区三区| 婷婷10月天青娱乐| 亚洲古典另类欧美在线| 青青草一区二区三区四| 国产理论视频在线播放| 亚洲黄片免费在线播放| 久久久性爱| 婷婷五月天成人网| 国产99热| 亚洲欧洲色情高清| 在线观看亚洲专区| 欧亚日韩中文在线| 日韩啪啪啪视频| 五月天精品| 国产av激情无码久久天堂| 99国产精品自在自在| 欧美视频在线第3页| 超碰人妻天天干| 超碰在线免费一区二区三区| 超碰97资源中文字幕| 亚洲av无码成人精品国产| 久久精品久久久久久久| 欧美骚少妇| 亚洲永久AV无码精品秋霞| 日本99视频| 成年女人黄网站| 黄色无码高清黄色无码网站| 97草草| 91伊人大香蕉| 2001天天操| 国产精品交换一区二区| 婷婷丁香九月| 日韩欧洲操屄视频| 日本阿v天堂在线观看| 99热销国产这里有精品| 亚洲欧美国产中文字幕| 亚洲中文字幕乱码无码一区二区| 久久ww| 色婷五月| 色五月丁香五月| 激情专区综合| 五月丁香激情综合网|