日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

乐优商城项目实战系列2

發布時間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 乐优商城项目实战系列2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0.學習目標

  • 使用資料搭建后臺系統
  • 會使用nginx進行反向代理
  • 實現商品分類查詢功能
  • 掌握cors解決跨域
  • 實現品牌查詢功能

1.搭建后臺管理前端

1.1.導入已有資源

后臺項目相對復雜,為了有利于教學,我們不再從0搭建項目,而是直接使用課前資料中給大家準備好的源碼:

我們解壓縮,放到工作目錄中:

然后在Intellij idea中導入新的工程:

選中我們的工程:

1.2.安裝依賴

你應該注意到,這里并沒有node_modules文件夾,方便給大家下發,已經把依賴都刪除了。不過package.json中依然定義了我們所需的一切依賴:

我們只需要打開終端,進入項目目錄,輸入:npm install命令,即可安裝這些依賴。

大概需要幾分鐘。

如果安裝過程出現以下問題

建議刪除node_modules目錄,重新安裝?;蛘遚opy其他人的node_modules使用

1.3.運行一下看看

在package.json文件中有scripts啟動腳本配置,可以輸入命令:npm run dev或者npm start

發現默認的端口是9001。訪問:http://localhost:9001

會自動進行跳轉:

1.4.目錄結構

webpack:是一個現代 JavaScript 應用程序的靜態模塊打包器(module bundler)。并且提供了前端項目的熱部署插件。

1.5.調用關系

我們最主要理清index.html、main.js、App.vue之間的關系:

理一下:

  • index.html:html模板文件。定義了空的div,其id為app。
  • main.js:實例化vue對象,并且通過id選擇器綁定到index.html的div中,因此main.js的內容都將在index.html的div中顯示。main.js中使用了App組件,即App.vue,也就是說index.html中最終展現的是App.vue中的內容。index.html引用它之后,就擁有了vue的內容(包括組件、樣式等),所以,main.js也是webpack打包的入口
  • index.js:定義請求路徑和組件的映射關系。相當于之前的<vue-router>
  • App.vue中也沒有內容,而是定義了vue-router的錨點:<router-view>,我們之前講過,vue-router路由后的組件將會在錨點展示。
  • 最終結論:一切路由后的內容都將通過App.vue在index.html中顯示。
  • 訪問流程:用戶在瀏覽器輸入路徑,例如:http://localhost:9001/#/item/brand --> index.js(/item/brand路徑對應pages/item/Brand.vue組件) --> 該組件顯示在App.vue的錨點位置 --> main.js使用了App.vue組件,并把該組件渲染在index.html文件中(id為“app”的div中)

2.Vuetify框架

2.1.為什么要學習UI框架

Vue雖然會幫我們進行視圖的渲染,但樣式還是由我們自己來完成。這顯然不是我們的強項,因此后端開發人員一般都喜歡使用一些現成的UI組件,拿來即用,常見的例如:

  • BootStrap
  • LayUI
  • EasyUI
  • ZUI

然而這些UI組件的基因天生與Vue不合,因為他們更多的是利用DOM操作,借助于jQuery實現,而不是MVVM的思想。

而目前與Vue吻合的UI框架也非常的多,國內比較知名的如:

  • element-ui:餓了么出品
  • i-view:某公司出品

然而我們都不用,我們今天推薦的是一款國外的框架:Vuetify

官方網站:https://vuetifyjs.com/zh-Hans/

2.2.為什么是Vuetify

有中國的為什么還要用外國的?原因如下:

  • Vuetify幾乎不需要任何CSS代碼,而element-ui許多布局樣式需要我們來編寫
  • Vuetify從底層構建起來的語義化組件。簡單易學,容易記住。
  • Vuetify基于Material Design(谷歌推出的多平臺設計規范),更加美觀,動畫效果酷炫,且風格統一

這是官網的說明:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Uedr7xD4-1642863683461)(assets/1530555978248.png)]

缺陷:

  • 目前官網雖然有中文文檔,但因為翻譯問題,幾乎不太能看。

2.3.怎么用?

基于官方網站的文檔進行學習:

我們重點關注UI components即可,里面有大量的UI組件,我們要用的時候再查看,不用現在學習,先看下有什么:

以后用到什么組件,就來查詢即可。

2.4.項目頁面布局

接下來我們一起看下頁面布局。

Layout組件是我們的整個頁面的布局組件:

里面使用了Vuetify中的2個組件和一個布局元素:

  • v-navigation-drawer :導航抽屜,主要用于容納應用程序中的頁面的導航鏈接。

  • v-toolbar:工具欄通常是網站導航的主要途徑。可以與導航抽屜一起很好地工作,動態選擇是否打開導航抽屜,實現可伸縮的側邊欄。

  • v-content:并不是一個組件,而是標記頁面布局的元素??梢愿鶕付ǖ?strong>app組件的結構動態調整大小,使得您可以創建高度可定制的組件。

那么問題來了:v-content中的內容來自哪里?

  • Layout映射的路徑是/
  • 除了Login以外的所有組件,都是定義在Layout的children屬性,并且路徑都是/的下面
  • 因此當路由到子組件時,會在Layout中定義的錨點中顯示。
  • 并且Layout中的其它部分不會變化,這就實現了布局的共享。

3.使用域名訪問本地項目

3.1.統一環境

我們現在訪問頁面使用的是:http://localhost:9001

有沒有什么問題?

實際開發中,會有不同的環境:

  • 開發環境:自己的電腦
  • 測試環境:提供給測試人員使用的環境
  • 預發布環境:數據是和生成環境的數據一致,運行最新的項目代碼進去測試
  • 生產環境:項目最終發布上線的環境

如果不同環境使用不同的ip去訪問,可能會出現一些問題。為了保證所有環境的一致,我們會在各種環境下都使用域名來訪問。

我們將使用以下域名:

  • 主域名是:www.leyou.com,leyou.com
  • 管理系統域名:manage.leyou.com
  • 網關域名:api.leyou.com

但是最終,我們希望這些域名指向的還是我們本機的某個端口。

那么,當我們在瀏覽器輸入一個域名時,瀏覽器是如何找到對應服務的ip和端口的呢?

3.2.域名解析

一個域名一定會被解析為一個或多個ip。這一般會包含兩步:

  • 本地域名解析

    瀏覽器會首先在本機的hosts文件中查找域名映射的IP地址,如果查找到就返回IP ,沒找到則進行域名服務器解析,一般本地解析都會失敗,因為默認這個文件是空的。

    • Windows下的hosts文件地址:C:/Windows/System32/drivers/etc/hosts
    • Linux下的hosts文件所在路徑: /etc/hosts

    樣式:

    # My hosts 127.0.0.1 localhost
  • 域名服務器解析

    本地解析失敗,才會進行域名服務器解析,域名服務器就是網絡中的一臺計算機,里面記錄了所有注冊備案的域名和ip映射關系,一般只要域名是正確的,并且備案通過,一定能找到。

3.3.解決域名解析問題

我們不可能去購買一個域名,因此我們可以偽造本地的hosts文件,實現對域名的解析。修改本地的host為:

127.0.0.1 api.leyou.com 127.0.0.1 manage.leyou.com

這樣就實現了域名的關系映射了。

每次在C盤尋找hosts文件并修改是非常麻煩的,給大家推薦一個快捷修改host的工具,在課前資料中可以找到:

解壓,運行exe文件,效果:

我們添加了兩個映射關系(中間用空格隔開):

  • 127.0.0.1 api.leyou.com :我們的網關Zuul
  • 127.0.0.1 manage.leyou.com:我們的后臺系統地址

現在,ping一下域名試試是否暢通:

OK!

通過域名訪問:

原因:我們配置了項目訪問的路徑,雖然manage.leyou.com映射的ip也是127.0.0.1,但是webpack會驗證host是否符合配置。

在webpack.dev.conf.js中取消host驗證:disableHostCheck: true

重新執行npm run dev,刷新瀏覽器:

OK!

3.4.nginx解決端口問題

域名問題解決了,但是現在要訪問后臺頁面,還得自己加上端口:http://manage.taotao.com:9001。

這就不夠優雅了。我們希望的是直接域名訪問:http://manage.taotao.com。這種情況下端口默認是80,如何才能把請求轉移到9001端口呢?

這里就要用到反向代理工具:Nginx

3.4.1.什么是Nginx

nginx可以作為web服務器,但更多的時候,我們把它作為網關,因為它具備網關必備的功能:

  • 反向代理
  • 負載均衡
  • 動態路由
  • 請求過濾

3.4.2.nginx作為web服務器

Web服務器分2類:

  • web應用服務器,如:
    • tomcat
    • resin
    • jetty
  • web服務器,如:
    • Apache 服務器
    • Nginx
    • IIS

區分:web服務器不能解析jsp等頁面,只能處理js、css、html等靜態資源。
并發:web服務器的并發能力遠高于web應用服務器。

3.4.3.nginx作為反向代理

什么是反向代理?

  • 代理:通過客戶機的配置,實現讓一臺服務器代理客戶機,客戶的所有請求都交給代理服務器處理。
  • 反向代理:用一臺服務器,代理真實服務器,用戶訪問時,不再是訪問真實服務器,而是代理服務器。

nginx可以當做反向代理服務器來使用:

  • 我們需要提前在nginx中配置好反向代理的規則,不同的請求,交給不同的真實服務器處理
  • 當請求到達nginx,nginx會根據已經定義的規則進行請求的轉發,從而實現路由功能

利用反向代理,就可以解決我們前面所說的端口問題,如圖

3.4.4.安裝和使用

安裝

安裝非常簡單,把課前資料提供的nginx直接解壓即可,綠色免安裝,舒服!

我們在本地安裝一臺nginx:

解壓后,目錄結構:

  • conf:配置目錄
  • contrib:第三方依賴
  • html:默認的靜態資源目錄,類似于tomcat的webapps
  • logs:日志目錄
  • nginx.exe:啟動程序??呻p擊運行,但不建議這么做。
  • 反向代理配置

    示例:

    nginx中的每個server就是一個反向代理配置,可以有多個server

    完整配置:

    #user nobody; worker_processes 1;events {worker_connections 1024; }http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;gzip on;server {listen 80;server_name manage.leyou.com;proxy_set_header X-Forwarded-Host $host;proxy_set_header X-Forwarded-Server $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;location / {proxy_pass http://127.0.0.1:9001;proxy_connect_timeout 600;proxy_read_timeout 600;}}server {listen 80;server_name api.leyou.com;proxy_set_header X-Forwarded-Host $host;proxy_set_header X-Forwarded-Server $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;location / {proxy_pass http://127.0.0.1:10010;proxy_connect_timeout 600;proxy_read_timeout 600;}} }

    使用

    nginx可以通過命令行來啟動,操作命令:

    • 啟動:start nginx.exe
    • 停止:nginx.exe -s stop
    • 重新加載:nginx.exe -s reload

    啟動過程會閃爍一下,啟動成功后,任務管理器中會有兩個nginx進程:

    3.5.測試

    啟動nginx,然后用域名訪問后臺管理系統:

    現在實現了域名訪問網站了,中間的流程是怎樣的呢?

  • 瀏覽器準備發起請求,訪問http://mamage.leyou.com,但需要進行域名解析

  • 優先進行本地域名解析,因為我們修改了hosts,所以解析成功,得到地址:127.0.0.1

  • 請求被發往解析得到的ip,并且默認使用80端口:http://127.0.0.1:80

    本機的nginx一直監聽80端口,因此捕獲這個請求

  • nginx中配置了反向代理規則,將manage.leyou.com代理到127.0.0.1:9001,因此請求被轉發

  • 后臺系統的webpack server監聽的端口是9001,得到請求并處理,完成后將響應返回到nginx

  • nginx將得到的結果返回到瀏覽器

  • 4.實現商品分類查詢

    商城的核心自然是商品,而商品多了以后,肯定要進行分類,并且不同的商品會有不同的品牌信息,我們需要依次去完成:商品分類、品牌、商品的開發。

    4.1.導入數據

    首先導入課前資料提供的sql:

    我們先看商品分類表:

    CREATE TABLE `tb_category` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '類目id',`name` varchar(20) NOT NULL COMMENT '類目名稱',`parent_id` bigint(20) NOT NULL COMMENT '父類目id,頂級類目填0',`is_parent` tinyint(1) NOT NULL COMMENT '是否為父節點,0為否,1為是',`sort` int(4) NOT NULL COMMENT '排序指數,越小越靠前',PRIMARY KEY (`id`),KEY `key_parent_id` (`parent_id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=1424 DEFAULT CHARSET=utf8 COMMENT='商品類目表,類目和商品(spu)是一對多關系,類目與品牌是多對多關系';

    因為商品分類會有層級關系,因此這里我們加入了parent_id字段,對本表中的其它分類進行自關聯。

    4.2.實現功能

    在瀏覽器頁面點擊“分類管理”菜單:

    根據這個路由路徑到路由文件(src/route/index.js),可以定位到分類管理頁面:

    由路由文件知,頁面是src/pages/item/Category.vue

    商品分類使用了樹狀結構,而這種結構的組件vuetify并沒有為我們提供,這里自定義了一個樹狀組件。不要求實現或者查詢組件的實現,只要求可以參照文檔使用該組件即可:

    4.2.1.url異步請求

    點擊商品管理下的分類管理子菜單,在瀏覽器控制臺可以看到:

    頁面中沒有,只是發起了一條請求:http://api.leyou.com/api/item/category/list?pid=0

    大家可能會覺得很奇怪,我們明明是使用的相對路徑:/item/category/list,講道理發起的請求地址應該是:

    http://manage.leyou.com/item/category/list

    但實際卻是:

    http://api.leyou.com/api/item/category/list?pid=0

    這是因為,我們有一個全局的配置文件,對所有的請求路徑進行了約定:

    路徑是http://api.leyou.com,并且默認加上了/api的前綴,這恰好與我們的網關設置匹配,我們只需要把地址改成網關的地址即可,因為我們使用了nginx反向代理,這里可以寫域名。

    接下來,我們要做的事情就是編寫后臺接口,返回對應的數據即可。

    4.2.2.實體類

    在leyou-item-interface中添加category實體類:

    內容:

    @Table(name="tb_category") public class Category {@Id@GeneratedValue(strategy=GenerationType.IDENTITY)private Long id;private String name;private Long parentId;private Boolean isParent; // 注意isParent生成的getter和setter方法需要手動加上Isprivate Integer sort;// getter和setter略 }

    需要注意的是,這里要用到jpa的注解,因此我們在leyou-item-iterface中添加jpa依賴

    <dependency><groupId>javax.persistence</groupId><artifactId>persistence-api</artifactId><version>1.0</version> </dependency>

    4.2.3.controller

    編寫一個controller一般需要知道四個內容:

    • 請求方式:決定我們用GetMapping還是PostMapping
    • 請求路徑:決定映射路徑
    • 請求參數:決定方法的參數
    • 返回值結果:決定方法的返回值

    在剛才頁面發起的請求中,我們就能得到絕大多數信息:

    • 請求方式:Get,插敘肯定是get請求

    • 請求路徑:/api/item/category/list。其中/api是網關前綴,/item是網關的路由映射,真實的路徑應該是/category/list

    • 請求參數:pid=0,根據tree組件的說明,應該是父節點的id,第一次查詢為0,那就是查詢一級類目

    • 返回結果:??

      根據前面tree組件的用法我們知道,返回的應該是json數組:

      [{ "id": 74,"name": "手機","parentId": 0,"isParent": true,"sort": 2},{ "id": 75,"name": "家用電器","parentId": 0,"isParent": true,"sort": 3} ]

      對應的java類型可以是List集合,里面的元素就是類目對象了。也就是List<Category>

    添加Controller:

    controller代碼:

    @Controller @RequestMapping("category") public class CategoryController {@Autowiredprivate CategoryService categoryService;/*** 根據父id查詢子節點* @param pid* @return*/@GetMapping("list")public ResponseEntity<List<Category>> queryCategoriesByPid(@RequestParam("pid") Long pid) {if (pid == null || pid.longValue() < 0) {// 響應400,相當于ResponseEntity.status(HttpStatus.BAD_REQUEST).build();return ResponseEntity.badRequest().build();}List<Category> categories = this.categoryService.queryCategoriesByPid(pid);if (CollectionUtils.isEmpty(categories)) {// 響應404return ResponseEntity.notFound().build();}return ResponseEntity.ok(categories);} }

    4.2.4.service

    一般service層我們會定義接口和實現類,不過這里我們就偷懶一下,直接寫實現類了:

    @Service public class CategoryService {@Autowiredprivate CategoryMapper categoryMapper;/*** 根據parentId查詢子類目* @param pid* @return*/public List<Category> queryCategoriesByPid(Long pid) {Category record = new Category();record.setParentId(pid);return this.categoryMapper.select(record);} }

    4.2.5.mapper

    我們使用通用mapper來簡化開發:

    public interface CategoryMapper extends Mapper<Category> { }

    要注意,我們并沒有在mapper接口上聲明@Mapper注解,那么mybatis如何才能找到接口呢?

    我們在啟動類上添加一個掃描包功能:

    @SpringBootApplication @EnableDiscoveryClient @MapperScan("com.leyou.item.mapper") // mapper接口的包掃描 public class LeyouItemServiceApplication {public static void main(String[] args) {SpringApplication.run(LeyouItemServiceApplication.class, args);} }

    4.2.6.啟動并測試

    我們不經過網關,直接訪問:http://localhost:8081/category/list

    然后試試網關是否暢通:http://api.leyou.com/api/item/category/list

    一切OK!

    然后刷新后臺管理頁面查看:

    發現報錯了!

    瀏覽器直接訪問沒事,但是這里卻報錯,什么原因?

    這其實是瀏覽器的同源策略造成的跨域問題。

    5.跨域問題

    跨域:瀏覽器對于javascript的同源策略的限制 。

    以下情況都屬于跨域:

    跨域原因說明示例
    域名不同www.jd.com 與 www.taobao.com
    域名相同,端口不同www.jd.com:8080 與 www.jd.com:8081
    二級域名不同item.jd.com 與 miaosha.jd.com

    如果域名和端口都相同,但是請求路徑不同,不屬于跨域,如:

    www.jd.com/item

    www.jd.com/goods

    http和https也屬于跨域

    而我們剛才是從manage.leyou.com去訪問api.leyou.com,這屬于二級域名不同,跨域了。

    5.1.為什么有跨域問題?

    跨域不一定都會有跨域問題。

    因為跨域問題是瀏覽器對于ajax請求的一種安全限制:一個頁面發起的ajax請求,只能是與當前頁域名相同的路徑,這能有效的阻止跨站攻擊。

    因此:跨域問題 是針對ajax的一種限制。

    但是這卻給我們的開發帶來了不便,而且在實際生產環境中,肯定會有很多臺服務器之間交互,地址和端口都可能不同,怎么辦?

    5.2.解決跨域問題的方案

    目前比較常用的跨域解決方案有3種:

    • Jsonp

      最早的解決方案,利用script標簽可以跨域的原理實現。

      限制:

      • 需要服務的支持
      • 只能發起GET請求
    • nginx反向代理

      思路是:利用nginx把跨域反向代理為不跨域,支持各種請求方式

      缺點:需要在nginx進行額外配置,語義不清晰

    • CORS

      規范化的跨域請求解決方案,安全可靠。

      優勢:

      • 在服務端進行控制是否允許跨域,可自定義規則
      • 支持各種請求方式

      缺點:

      • 會產生額外的請求

    我們這里會采用cors的跨域方案。

    5.3.cors解決跨域

    5.3.1.什么是cors

    CORS是一個W3C標準,全稱是"跨域資源共享"(Cross-origin resource sharing)。

    它允許瀏覽器向跨源服務器,發出XMLHttpRequest請求,從而克服了AJAX只能同源使用的限制。

    CORS需要瀏覽器和服務器同時支持。目前,所有瀏覽器都支持該功能,IE瀏覽器不能低于IE10。

    • 瀏覽器端:

      目前,所有瀏覽器都支持該功能(IE10以下不行)。整個CORS通信過程,都是瀏覽器自動完成,不需要用戶參與。

    • 服務端:

      CORS通信與AJAX沒有任何差別,因此你不需要改變以前的業務邏輯。只不過,瀏覽器會在請求中攜帶一些頭信息,我們需要以此判斷是否允許其跨域,然后在響應頭中加入一些信息即可。這一般通過過濾器完成即可。

    5.3.2.原理有點復雜

    瀏覽器會將ajax請求分為兩類,其處理方案略有差異:簡單請求、特殊請求。

    5.3.2.1.簡單請求

    只要同時滿足以下兩大條件,就屬于簡單請求。:

    (1) 請求方法是以下三種方法之一:

    • HEAD
    • GET
    • POST

    (2)HTTP的頭信息不超出以下幾種字段:

    • Accept
    • Accept-Language
    • Content-Language
    • Last-Event-ID
    • Content-Type:只限于三個值application/x-www-form-urlencoded、multipart/form-data、text/plain

    當瀏覽器發現發起的ajax請求是簡單請求時,會在請求頭中攜帶一個字段:Origin.

    Origin中會指出當前請求屬于哪個域(協議+域名+端口)。服務會根據這個值決定是否允許其跨域。

    如果服務器允許跨域,需要在返回的響應頭中攜帶下面信息:

    Access-Control-Allow-Origin: http://manage.leyou.com Access-Control-Allow-Credentials: true Content-Type: text/html; charset=utf-8
    • Access-Control-Allow-Origin:可接受的域,是一個具體域名或者*(代表任意域名)
    • Access-Control-Allow-Credentials:是否允許攜帶cookie,默認情況下,cors不會攜帶cookie,除非這個值是true

    有關cookie:

    要想操作cookie,需要滿足3個條件:

    • 服務的響應頭中需要攜帶Access-Control-Allow-Credentials并且為true。
    • 瀏覽器發起ajax需要指定withCredentials 為true
    • 響應頭中的Access-Control-Allow-Origin一定不能為*,必須是指定的域名

    5.3.2.2.特殊請求

    不符合簡單請求的條件,會被瀏覽器判定為特殊請求,,例如請求方式為PUT。

    預檢請求

    特殊請求會在正式通信之前,增加一次HTTP查詢請求,稱為"預檢"請求(preflight)。

    瀏覽器先詢問服務器,當前網頁所在的域名是否在服務器的許可名單之中,以及可以使用哪些HTTP動詞和頭信息字段。只有得到肯定答復,瀏覽器才會發出正式的XMLHttpRequest請求,否則就報錯。

    一個“預檢”請求的樣板:

    OPTIONS /cors HTTP/1.1 Origin: http://manage.leyou.com Access-Control-Request-Method: PUT Access-Control-Request-Headers: X-Custom-Header Host: api.leyou.com Accept-Language: en-US Connection: keep-alive User-Agent: Mozilla/5.0...

    與簡單請求相比,除了Origin以外,多了兩個頭:

    • Access-Control-Request-Method:接下來會用到的請求方式,比如PUT
    • Access-Control-Request-Headers:會額外用到的頭信息

    預檢請求的響應

    服務的收到預檢請求,如果許可跨域,會發出響應:

    HTTP/1.1 200 OK Date: Mon, 01 Dec 2008 01:15:39 GMT Server: Apache/2.0.61 (Unix) Access-Control-Allow-Origin: http://manage.leyou.com Access-Control-Allow-Credentials: true Access-Control-Allow-Methods: GET, POST, PUT Access-Control-Allow-Headers: X-Custom-Header Access-Control-Max-Age: 1728000 Content-Type: text/html; charset=utf-8 Content-Encoding: gzip Content-Length: 0 Keep-Alive: timeout=2, max=100 Connection: Keep-Alive Content-Type: text/plain

    除了Access-Control-Allow-Origin和Access-Control-Allow-Credentials以外,這里又額外多出3個頭:

    • Access-Control-Allow-Methods:允許訪問的方式
    • Access-Control-Allow-Headers:允許攜帶的頭
    • Access-Control-Max-Age:本次許可的有效時長,單位是秒,過期之前的ajax請求就無需再次進行預檢了

    如果瀏覽器得到上述響應,則認定為可以跨域,后續就跟簡單請求的處理是一樣的了。

    5.3.3.實現非常簡單

    雖然原理比較復雜,但是前面說過:

    • 瀏覽器端都有瀏覽器自動完成,我們無需操心
    • 服務端可以通過攔截器統一實現,不必每次都去進行跨域判定的編寫。

    事實上,SpringMVC已經幫我們寫好了CORS的跨域過濾器:CorsFilter ,內部已經實現了剛才所講的判定邏輯,我們直接用就好了。

    在leyou-gateway中編寫一個配置類,并且注冊CorsFilter:

    import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter;@Configuration public class LeyouCorsConfig {@Beanpublic CorsFilter corsFilter() {//1.添加CORS配置信息CorsConfiguration config = new CorsConfiguration();//1) 允許的域,不要寫*,否則cookie就無法使用了config.addAllowedOrigin("http://manage.leyou.com");//2) 是否發送Cookie信息config.setAllowCredentials(true);//3) 允許的請求方式config.addAllowedMethod("OPTIONS");config.addAllowedMethod("HEAD");config.addAllowedMethod("GET");config.addAllowedMethod("PUT");config.addAllowedMethod("POST");config.addAllowedMethod("DELETE");config.addAllowedMethod("PATCH");// 4)允許的頭信息config.addAllowedHeader("*");//2.添加映射路徑,我們攔截一切請求UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();configSource.registerCorsConfiguration("/**", config);//3.返回新的CorsFilter.return new CorsFilter(configSource);} }

    結構:

    重啟測試,訪問正常:

    分類的增刪改功能暫時就不做了,頁面已經預留好了事件接口,有興趣的同學可以完成一下。

    6.品牌的查詢

    商品分類完成以后,自然輪到了品牌功能了。

    先看看我們要實現的效果:

    點擊“品牌管理”菜單:

    路由路徑:/item/brand

    根據路由文件知,對應的頁面是:src/pages/item/Brand.vue

    頁面會發送如下請求:

    6.1.后臺提供查詢接口

    前臺頁面已經準備好,接下來就是后臺提供數據接口了。

    6.1.1.數據庫表

    CREATE TABLE `tb_brand` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '品牌id',`name` varchar(50) NOT NULL COMMENT '品牌名稱',`image` varchar(200) DEFAULT '' COMMENT '品牌圖片地址',`letter` char(1) DEFAULT '' COMMENT '品牌的首字母',PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=325400 DEFAULT CHARSET=utf8 COMMENT='品牌表,一個品牌下有多個商品(spu),一對多關系';

    簡單的四個字段,不多解釋。

    這里需要注意的是,品牌和商品分類之間是多對多關系。因此我們有一張中間表,來維護兩者間關系:

    CREATE TABLE `tb_category_brand` (`category_id` bigint(20) NOT NULL COMMENT '商品類目id',`brand_id` bigint(20) NOT NULL COMMENT '品牌id',PRIMARY KEY (`category_id`,`brand_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品分類和品牌的中間表,兩者是多對多關系';

    但是,你可能會發現,這張表中并沒有設置外鍵約束,似乎與數據庫的設計范式不符。為什么這么做?

    • 外鍵會嚴重影響數據庫讀寫的效率
    • 數據刪除時會比較麻煩

    在電商行業,性能是非常重要的。我們寧可在代碼中通過邏輯來維護表關系,也不設置外鍵。

    6.1.2.實體類

    @Table(name = "tb_brand") public class Brand {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;// 品牌名稱private String image;// 品牌圖片private Character letter;// getter setter 略 }

    6.1.3.mapper

    通用mapper來簡化開發:

    public interface BrandMapper extends Mapper<Brand> { }

    6.1.4.controller

    編寫controller先思考四個問題,參照前端頁面的控制臺

    • 請求方式:查詢,肯定是Get
    • 請求路徑:分頁查詢,/brand/page
    • 請求參數:根據我們剛才編寫的頁面,有分頁功能,有排序功能,有搜索過濾功能,因此至少要有5個參數:
      • page:當前頁,int
      • rows:每頁大小,int
      • sortBy:排序字段,String
      • desc:是否為降序,boolean
      • key:搜索關鍵詞,String
    • 響應結果:分頁結果一般至少需要兩個數據
      • total:總條數
      • items:當前頁數據
      • totalPage:有些還需要總頁數

    這里我們封裝一個類,來表示分頁結果:

    public class PageResult<T> {private Long total;// 總條數private Integer totalPage;// 總頁數private List<T> items;// 當前頁數據public PageResult() {}public PageResult(Long total, List<T> items) {this.total = total;this.items = items;}public PageResult(Long total, Long totalPage, List<T> items) {this.total = total;this.totalPage = totalPage;this.items = items;}public Long getTotal() {return total;}public void setTotal(Long total) {this.total = total;}public List<T> getItems() {return items;}public void setItems(List<T> items) {this.items = items;}public Long getTotalPage() {return totalPage;}public void setTotalPage(Long totalPage) {this.totalPage = totalPage;} }

    另外,這個PageResult以后可能在其它項目中也有需求,因此我們將其抽取到leyou-common中,提高復用性:

    不要忘記在leyou-item-service工程的pom.xml中引入leyou-common的依賴

    <dependency><groupId>com.leyou.common</groupId><artifactId>leyou-common</artifactId><version>1.0.0-SNAPSHOT</version> </dependency>

    接下來,我們編寫Controller

    @RestController @RequestMapping("brand") public class BrandController {@Autowiredprivate BrandService brandService;/*** 根據查詢條件分頁并排序查詢品牌信息* @param key* @param page* @param rows* @param sortBy* @param desc* @return*/@GetMapping("page")public ResponseEntity<PageResult<Brand>> queryBrandsByPage(@RequestParam(value = "key", required = false)String key,@RequestParam(value = "page", defaultValue = "1")Integer page,@RequestParam(value = "rows", defaultValue = "5")Integer rows,@RequestParam(value = "sortBy", required = false)String sortBy,@RequestParam(value = "desc", required = false)Boolean desc){PageResult<Brand> result = this.brandService.queryBrandsByPage(key, page, rows, sortBy, desc);if (CollectionUtils.isEmpty(result.getItems())){return ResponseEntity.notFound().build();}return ResponseEntity.ok(result);} }

    6.1.5.Service

    @Service public class BrandService {@Autowiredprivate BrandMapper brandMapper;/*** 根據查詢條件分頁并排序查詢品牌信息** @param key* @param page* @param rows* @param sortBy* @param desc* @return*/public PageResult<Brand> queryBrandsByPage(String key, Integer page, Integer rows, String sortBy, Boolean desc) {// 初始化example對象Example example = new Example(Brand.class);Example.Criteria criteria = example.createCriteria();// 根據name模糊查詢,或者根據首字母查詢if (StringUtils.isNotBlank(key)) {criteria.andLike("name", "%" + key + "%").orEqualTo("letter", key);}// 添加分頁條件PageHelper.startPage(page, rows);// 添加排序條件if (StringUtils.isNotBlank(sortBy)) {example.setOrderByClause(sortBy + " " + (desc ? "desc" : "asc"));}List<Brand> brands = this.brandMapper.selectByExample(example);// 包裝成pageInfoPageInfo<Brand> pageInfo = new PageInfo<>(brands);// 包裝成分頁結果集返回return new PageResult<>(pageInfo.getTotal(), pageInfo.getList());} }

    6.1.6.測試

    通過瀏覽器訪問試試:http://api.leyou.com/api/item/brand/page

    接下來,去頁面請求數據并渲染

    6.2.異步查詢工具axios

    異步查詢數據,自然是通過ajax查詢,大家首先想起的肯定是jQuery。但jQuery與MVVM的思想不吻合,而且ajax只是jQuery的一小部分。因此不可能為了發起ajax請求而去引用這么大的一個庫。

    6.2.1.axios入門

    Vue官方推薦的ajax請求框架叫做:axios,看下demo:

    axios的Get請求語法:

    axios.get("/item/category/list?pid=0") // 請求路徑和請求參數拼接.then(function(resp){// 成功回調函數}).catch(function(){// 失敗回調函數}) // 參數較多時,可以通過params來傳遞參數 axios.get("/item/category/list", {params:{pid:0}}).then(function(resp){})// 成功時的回調.catch(function(error){})// 失敗時的回調

    axios的POST請求語法:

    比如新增一個用戶

    axios.post("/user",{name:"Jack",age:21}).then(function(resp){}).catch(function(error){})

    注意,POST請求傳參,不需要像GET請求那樣定義一個對象,在對象的params參數中傳參。post()方法的第二個參數對象,就是將來要傳遞的參數

    PUT和DELETE請求與POST請求類似

    6.2.2.axios的全局配置

    而在我們的項目中,已經引入了axios,并且進行了簡單的封裝,在src下的http.js中:

    http.js中對axios進行了一些默認配置:

    import Vue from 'vue' import axios from 'axios' import config from './config' // config中定義的基礎路徑是:http://api.leyou.com/api axios.defaults.baseURL = config.api; // 設置axios的基礎請求路徑 axios.defaults.timeout = 2000; // 設置axios的請求時間Vue.prototype.$http = axios;// 將axios賦值給Vue原型的$http屬性,這樣所有vue實例都可使用該對象
    • http.js中導入了config的配置,還記得嗎?

    • http.js對axios進行了全局配置:baseURL=config.api,即http://api.leyou.com/api。因此以后所有用axios發起的請求,都會以這個地址作為前綴。

    • 通過Vue.property.$http = axios,將axios賦值給了 Vue原型中的$http。這樣以后所有的Vue實例都可以訪問到$http,也就是訪問到了axios了。

    6.2.3.項目中使用

    我們在組件Brand.vue的getDataFromServer方法,通過$http發起get請求,測試查詢品牌的接口,看是否能獲取到數據:

    網絡監視:

    resp到底都有那些數據,查看控制臺結果:

    可以看到,在請求成功的返回結果response中,有一個data屬性,里面就是真正的響應數據。

    響應結果中與我們設計的一致,包含3個內容:

    • total:總條數,目前是165
    • items:當前頁數據
    • totalPage:總頁數,我們沒有返回

    6.3.完成分頁和過濾

    6.3.1.分頁

    點擊分頁,會發起請求,通過瀏覽器工具查看,會發現pagination對象的屬性一直在變化:

    我們可以利用Vue的監視功能:watch,當pagination發生改變時,會調用我們的回調函數,我們在回調函數中進行數據的查詢!

    具體實現:

    成功實現分頁功能:

    6.3.2.過濾

    過濾字段對應的是search屬性,我們只要監視這個屬性即可:

    查看網絡請求:

    頁面結果:

    總結

    以上是生活随笔為你收集整理的乐优商城项目实战系列2的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    在线观看视频h | av片在线观看免费 | 成人一区电影 | 亚洲成人资源在线观看 | 国产一区精品在线观看 | 久久久久久久久久久久99 | 在线观看日韩精品 | 欧美色黄| 99 色| 午夜久久久久久久久 | 波多野结衣亚洲一区二区 | 91精品婷婷国产综合久久蝌蚪 | www.色爱| 97超碰人人澡人人爱学生 | 天天草天天 | 亚洲人人爱 | 五月婷婷在线观看视频 | 精品国产乱子伦一区二区 | 亚洲综合色激情五月 | 亚洲激情六月 | 国产91丝袜在线播放动漫 | 激情综合一区 | 不卡的av片| 久久婷婷精品 | 欧美视频在线观看免费网址 | 午夜精品久久久久久久99 | 久久综合欧美精品亚洲一区 | 日本三级吹潮在线 | 13日本xxxxxⅹxxx20 | 成人午夜黄色 | 色.com| 亚洲 精品在线视频 | 久久久久国产一区二区三区四区 | 911精品美国片911久久久 | 成人av播放 | 国产美女在线免费观看 | av在线激情 | 成人午夜电影久久影院 | 国内外成人免费在线视频 | 奇米7777狠狠狠琪琪视频 | 日韩视频免费播放 | 色视频网站在线观看一=区 a视频免费在线观看 | 中文字幕 成人 | 成人av网站在线 | 韩国精品福利一区二区三区 | 久99久精品视频免费观看 | 麻豆传媒电影在线观看 | 欧美一进一出抽搐大尺度视频 | av电影一区 | 日韩在线观看中文 | 久久无码精品一区二区三区 | 色婷婷国产精品 | 国产无套精品久久久久久 | 在线黄色国产 | 热久久99这里有精品 | av中文字幕在线观看网站 | 亚洲区另类春色综合小说校园片 | 亚洲 欧洲 国产 日本 综合 | 伊人久久精品久久亚洲一区 | 国产91电影在线观看 | 少妇自拍av| 天天草天天草 | 91免费视频黄| 国产精品18久久久久久久 | 99精品视频精品精品视频 | 在线视频99 | 黄色av免费电影 | 五月天久久综合网 | 国产精品 999| 亚洲精品玖玖玖av在线看 | 热久久国产精品 | 97超碰人人看 | 少妇性bbb搡bbb爽爽爽欧美 | 亚洲视频免费在线观看 | 色五月成人 | 欧洲一区二区在线观看 | 婷婷爱五月天 | av中文在线影视 | 亚洲精品h | 99精品久久久久 | 免费a网| 精品国产aⅴ一区二区三区 在线直播av | 免费看成人片 | 欧美精品免费在线 | 人人超碰免费 | 国产亚洲精品免费 | 天天射天天射天天 | 在线观看日韩专区 | 国产91粉嫩白浆在线观看 | 免费看的国产视频网站 | 久久精品牌麻豆国产大山 | 欧洲视频一区 | 午夜精品一区二区三区在线播放 | 日产乱码一二三区别免费 | 欧美日韩国产一区二区在线观看 | 国产视频一区二区在线观看 | 久久99免费观看 | 天天操天天射天天插 | 欧美极品xxxx | 国产成人久 | 久久伦理 | 97夜夜澡人人双人人人喊 | 天天干天天拍天天操天天拍 | 黄色激情网址 | 欧美成人性网 | 免费国产一区二区 | 中文字幕久久精品亚洲乱码 | 在线久久 | 波多野结衣最新 | 国产91粉嫩白浆在线观看 | 欧美久久久久久久久久久久久 | 中文字幕在线视频第一页 | 亚洲乱码中文字幕综合 | 69视频在线 | 丁香六月欧美 | 中文字幕在线看视频国产 | 亚洲成人在线免费 | 国内精品在线观看视频 | 91九色国产 | 超碰在线官网 | 91亚洲精品国偷拍 | 亚洲免费av电影 | 精品亚洲成a人在线观看 | 午夜少妇 | 国内少妇自拍视频一区 | 成人av网页 | 精品久久久久国产 | 中文字幕在线观看网址 | 粉嫩av一区二区三区四区在线观看 | 黄色一级免费网站 | 国产精品黄网站在线观看 | 亚洲最大av网 | 久久电影国产免费久久电影 | 国产一区二区视频在线播放 | 成人午夜片av在线看 | 国产精品igao视频网网址 | 天天操天天射天天爽 | 国产亚洲精品中文字幕 | 国产亚洲日 | 久久久美女 | 中文字幕丝袜制服 | 欧美久久99 | 亚洲成人免费在线观看 | 国产精品美女久久久久久免费 | 午夜视频免费在线观看 | 97色资源 | 国产成人黄色片 | 久久精品毛片基地 | 日韩超碰 | 久久精品成人欧美大片古装 | 日韩成人欧美 | 免费久草视频 | 91亚洲精品乱码久久久久久蜜桃 | www激情网| 天天干天天天天 | 99久久国产免费,99久久国产免费大片 | 韩国中文三级 | 国产麻豆电影在线观看 | 天天翘av | 中文字幕中文字幕在线中文字幕三区 | 欧美日韩大片在线观看 | 午夜视频一区二区 | 天天弄天天干 | 探花视频在线版播放免费观看 | 韩日av一区二区 | 福利视频一区二区 | 欧美日在线观看 | 成 人 黄 色 免费播放 | 国内精品久久久久 | 999久久久久久久久 69av视频在线观看 | av观看网站 | 天天干,夜夜爽 | 国产xvideos免费视频播放 | 免费在线a | 久久精品国产v日韩v亚洲 | 亚洲电影网站 | 人人干人人艹 | 久久a热6 | 国产日韩精品一区二区 | 亚洲国产视频网站 | 日韩在线观看的 | 国产精品久久99综合免费观看尤物 | 色欧美88888久久久久久影院 | 国产福利91精品张津瑜 | 精品中文字幕在线观看 | 欧美日本三级 | 91在线看片 | 国产中文在线视频 | 日韩在线观看精品 | 亚洲国内精品 | 国产无套视频 | 在线观看av的网站 | 色视频网站在线 | 999久久久久久久久 69av视频在线观看 | 欧美一区二区在线看 | 99视频偷窥在线精品国自产拍 | 欧美精品久 | 日韩在观看线 | 免费看黄的视频 | 久久婷婷色 | 久久精品美女视频网站 | 日韩欧美电影网 | av在线播放亚洲 | 一级电影免费在线观看 | 亚洲精品国偷拍自产在线观看 | 欧美激情综合五月色丁香小说 | 国产精品久久久电影 | 久久一级片 | 狠狠狠色| 日本久久久久久久久久 | 伊人亚洲综合网 | 手机在线永久免费观看av片 | 天天操天天操天天爽 | 99热九九这里只有精品10 | 五月天婷婷丁香花 | 又黄又爽又刺激 | 91亚瑟视频 | 99精品久久只有精品 | 久久婷婷综合激情 | 亚洲成色777777在线观看影院 | 三级av片 | 国产理伦在线 | 亚洲天堂精品 | 日韩精品视频免费专区在线播放 | 日韩av三区| 国产日产av | 国产一级免费播放 | 天天操天天干天天操天天干 | 免费看毛片网站 | 亚洲精品久久久蜜臀下载官网 | 精品一二三四视频 | 中文字幕在线影院 | 9在线观看免费高清完整版 玖玖爱免费视频 | 成人在线视频免费观看 | 在线观看aaa| 伊人五月天.com | 一区二区三区在线观看免费视频 | 亚洲国产精品电影在线观看 | 免费久久久久久 | 国产视频精品久久 | 91精品视频免费在线观看 | 精品国产aⅴ一区二区三区 在线直播av | 国产色婷婷在线 | 国产精品丝袜久久久久久久不卡 | 91麻豆国产福利在线观看 | 久久久久成人精品亚洲国产 | av在线播放快速免费阴 | 国内精品久久久久久久影视麻豆 | 97成人啪啪网| 日日干综合 | 久久看片网 | 精品国产成人 | 午夜电影av | 伊香蕉大综综综合久久啪 | 综合国产在线观看 | 黄色三级免费 | 中文字幕在线影院 | 中文字幕高清免费日韩视频在线 | www.黄色网.com | 日韩sese | 亚洲一区美女视频在线观看免费 | 日韩一区二区三区高清免费看看 | 日韩免费在线 | 久久精品这里都是精品 | 久草香蕉在线视频 | 中文字幕一区二区三区乱码在线 | 中文字幕色综合网 | 在线观看一级 | 91观看视频 | 亚洲精品18p| 免费午夜在线视频 | 黄色一级大片在线免费看国产一 | 一区二区三区在线看 | 亚洲色五月 | 99精品久久久久久久 | 天天干天天操天天做 | 97视频资源 | 亚洲精品视频一 | 在线影视 一区 二区 三区 | www91在线| 婷婷色网视频在线播放 | 亚洲人视频在线 | 国内精品视频在线 | 久久精品久久精品久久39 | 最新中文字幕在线播放 | 亚洲国产精品视频在线观看 | 久久久久成人精品免费播放动漫 | 久久精品一区二区三区视频 | 91污在线 | 日本久久久久久 | 日本黄色免费观看 | 私人av | 亚洲精品 在线视频 | 天天夜夜狠狠操 | 九九在线视频免费观看 | 国产美女主播精品一区二区三区 | 日韩黄色免费电影 | 国产精品久久久久av福利动漫 | 91视频在线| 国产欧美日韩精品一区二区免费 | 国产白浆视频 | 久草五月| a电影在线观看 | 国产精品中文字幕在线观看 | 91视频在线自拍 | 99产精品成人啪免费网站 | 在线观看视频黄色 | 97视频在线免费 | 国产小视频免费在线观看 | 国产视频一区精品 | 91精品少妇偷拍99 | 黄色小说视频网站 | 在线观看免费色 | 99亚洲精品在线 | 欧美国产日韩久久 | 2019中文在线观看 | av在线小说| 久草在线电影网 | 黄色日批网站 | 日韩xxx视频| 久久久久国产免费免费 | 日韩激情免费视频 | 亚洲精品在线视频网站 | 亚洲人人爱 | 久久久久久久国产精品影院 | 国产中文字幕在线 | 人人模人人爽 | 欧美日韩91 | 日本精品视频免费观看 | 91最新视频在线观看 | 五月婷婷丁香综合 | 欧美少妇的秘密 | 日日夜夜操av | 欧美一级免费黄色片 | 午夜在线观看影院 | 亚洲电影一区二区 | 最近乱久中文字幕 | 色综合久久五月天 | 亚洲免费av在线 | 亚洲天堂毛片 | а天堂中文最新一区二区三区 | 久久色网站 | 国产精品黄网站在线观看 | 最近中文字幕国语免费高清6 | av成年人电影 | 在线视频你懂 | 天天天色综合 | 91av视频在线免费观看 | 青春草国产视频 | 国产精品久久麻豆 | 国产精品99免费看 | 国产91区| 日韩大陆欧美高清视频区 | www.久草视频 | 欧美国产视频在线 | 国产一区在线不卡 | 中文字幕在线视频免费播放 | 亚洲欧洲av | 久久国产精品久久精品国产演员表 | 免费在线色视频 | 成人动漫精品一区二区 | 国产这里只有精品 | 亚洲精品国产拍在线 | 免费成人av网站 | 国产69精品久久久久99 | 国产明星视频三级a三级点| 日本69hd| av在线观 | 亚洲天堂网视频 | av无限看 | 香蕉视频在线免费 | 黄色1级大片 | 中文字幕频道 | 成人三级av | 国产精品久久久久久久免费观看 | 国产精品 亚洲精品 | 午夜视频播放 | 99精品视频在线看 | 天天综合中文 | 黄色国产区 | 午夜体验区 | 国产又粗又猛又色 | 视频在线观看入口黄最新永久免费国产 | 日日干干夜夜 | 六月丁香婷婷网 | 久久夜夜爽 | 免费视频久久久久 | 免费亚洲精品视频 | 夜夜躁狠狠躁日日躁视频黑人 | 久久国产99| 一区二区三区不卡在线 | 国产精品白丝av | 国产日韩精品一区二区在线观看播放 | 日本黄色一级电影 | 国产视频中文字幕在线观看 | 最新国产在线视频 | 91av手机在线 | 色噜噜噜噜 | 999视频在线播放 | 成人av久久 | 中文字幕在线观看日本 | 99免费看片 | 国产精品一区二区久久久 | 亚洲欧美乱综合图片区小说区 | 97视频在线免费 | 亚洲综合色激情五月 | 国产中文字幕视频 | 操久在线 | 欧美高清视频不卡网 | 亚洲在线a| 在线观看午夜av | 日韩精品在线看 | 美州a亚洲一视本频v色道 | 国产成人精品一区二区三区在线 | 国产精品免费观看国产网曝瓜 | 欧美日韩国产伦理 | 日韩免费视频线观看 | 国产原创91 | wwxxxx日本| 久草在线免费资源站 | 欧美另类xxxx | 亚洲最新合集 | 96国产精品视频 | 在线观看韩国av | 国产亚洲精品中文字幕 | 成人亚洲精品国产www | 久久久久国产精品一区二区 | 久久久久人人 | 天天艹天天 | 国产福利免费在线观看 | 91视频首页 | 五月天婷婷在线视频 | 成人av免费播放 | 婷婷国产在线 | 欧美激情综合色综合啪啪五月 | 精品一区 精品二区 | 国产一级片视频 | 免费人做人爱www的视 | 天天干,夜夜操 | 91免费在线 | 91久久久久久久一区二区 | 精品一区二区综合 | 西西4444www大胆无视频 | 99久久久国产精品美女 | 一级性视频 | 亚洲深夜影院 | 欧美日韩xx| 色综合在| 美女天天操| 国产精品1区2区在线观看 | 在线精品亚洲 | 在线观看深夜福利 | 色播亚洲婷婷 | 日韩电影在线观看一区二区三区 | 日韩欧美久久 | 亚洲精品综合一二三区在线观看 | 91av在| 99热999| 成年人在线免费看片 | 黄色精品一区 | 91av在线国产| 国产裸体永久免费视频网站 | 日韩中文字幕视频在线 | 中文在线a天堂 | 最新精品国产 | 欧美国产亚洲精品久久久8v | 字幕网在线观看 | 亚洲欧美乱综合图片区小说区 | 久久手机精品视频 | 久久成 | 美女黄视频免费看 | 亚洲精品中文在线资源 | 日韩精品中文字幕在线观看 | 涩涩网站在线播放 | www.色就是色| 999视频网站 | 久久久久久久久久久网站 | 人人草在线观看 | 久久免费高清 | 一区二精品 | www.com久久久 | 欧美成年网站 | 国产午夜精品一区二区三区在线观看 | 国产精品久久久久久五月尺 | 91成人在线视频观看 | 国产精品免费观看视频 | www.狠狠| 国产福利免费在线观看 | 久久亚洲综合色 | 97超碰超碰 | 色综合久久中文字幕综合网 | 成人av久久 | 在线观看视频国产 | 免费看污黄网站 | 久草在线手机观看 | 五月婷婷开心中文字幕 | 99热这里只有精品在线观看 | 国产精品美女久久久久久久 | 97色在线观看 | 二区视频在线观看 | 在线免费观看麻豆 | 成人黄色电影视频 | 日韩最新av在线 | 国产精品久久99 | 久久高清片 | 欧美色图一区 | 最新在线你懂的 | 中文有码在线视频 | 偷拍精偷拍精品欧洲亚洲网站 | 免费福利在线视频 | jizz999| 国产精品九九视频 | 亚洲精品xxx | 国产精品99久久免费黑人 | 亚洲最新毛片 | 伊人色综合久久天天 | 亚洲激色| 午夜av影院 | 人人爽人人射 | 狠狠躁日日躁夜夜躁av | 国产精品久久久久久五月尺 | 国产亚洲精品福利 | 久久久网 | 97超碰在| 色综合婷婷| 一区二区三区韩国免费中文网站 | 国产精品日韩久久久久 | 国产精品久久久久久久久毛片 | 91视频在线观看免费 | 国产人成看黄久久久久久久久 | 久草精品视频 | 中文字幕精品在线 | 色国产精品一区在线观看 | 天天草夜夜 | 中文字幕在线播放日韩 | 国产一区福利 | 天天人人 | 日本在线h | 蜜臀av性久久久久av蜜臀三区 | 天天操天天吃 | 蜜臀91丨九色丨蝌蚪老版 | 久久综合成人 | 天天鲁天天干天天射 | 日韩理论视频 | 免费看黄20分钟 | 四川妇女搡bbbb搡bbbb搡 | 国产色视频网站 | 伊色综合久久之综合久久 | 日韩中文字幕亚洲一区二区va在线 | 91中文在线视频 | 国产又粗又猛又黄又爽 | 中文字幕av有码 | 最新av网站在线观看 | 激情网第四色 | 免费手机黄色网址 | 日本在线精品视频 | 亚洲干视频在线观看 | 激情五月婷婷激情 | 亚洲一级黄色片 | 精品在线视频一区二区三区 | 天天天色综合 | 91麻豆精品 | www黄在线| 91 中文字幕 | 日韩欧美在线播放 | 99视频国产在线 | 免费观看日韩 | 亚洲一区二区三区毛片 | 操操日日 | 亚洲精品视频大全 | 欧美激情第八页 | 国产一区二区在线影院 | 99精品欧美一区二区三区黑人哦 | 人人爱人人舔 | 亚洲精品www久久久久久 | 国产精品色婷婷 | 亚洲激情影院 | 中文字幕一区二区三区精华液 | 成年人国产在线观看 | 亚洲一级黄色av | 国产色在线观看 | 国产又粗又猛又色又黄网站 | 在线观看亚洲视频 | 日韩免费福利 | 一区二区精 | 九九免费在线观看 | 97av在线视频免费播放 | 91亚色视频 | 国产精品一区二区吃奶在线观看 | 国产精品免费在线播放 | 一区二区激情 | 麻豆成人精品视频 | 色欧美日韩| 狠狠天天| 少妇超碰在线 | 色婷婷激情网 | 欧美国产精品久久久久久免费 | 国产黄色片一级三级 | 国产午夜不卡 | 亚洲综合激情小说 | 国内综合精品午夜久久资源 | 一区二区三区四区久久 | 久久久久一区二区三区四区 | 天天射天天爱天天干 | 日韩羞羞 | 亚洲黄色成人网 | 91免费高清视频 | 天天干天天射天天爽 | 91香蕉嫩草| 97超在线 | 天天操比| 黄色国产大片 | 日韩理论片中文字幕 | 日韩黄色中文字幕 | 久久久久久久久毛片精品 | 国产精品一区二区久久 | 99热最新 | 欧美久久久久久久久久久久久 | 亚洲在线不卡 | 国产精品刺激对白麻豆99 | 九九九在线观看视频 | 性色av免费在线观看 | 91桃色免费观看 | 国产精品久久久久久久久久不蜜月 | 天天干天天干天天 | 丁香激情综合 | 成年人视频免费在线 | av女优中文字幕在线观看 | 久久超碰99| 国内精自线一二区永久 | 亚洲理论片在线观看 | 欧洲精品码一区二区三区免费看 | 色就色,综合激情 | 亚洲伦理中文字幕 | 国产国产人免费人成免费视频 | 国产黄色片久久久 | 天天爱综合 | 日本成人中文字幕在线观看 | 中文字幕在线观看视频网站 | 国产免费av一区二区三区 | 免费在线看成人av | 日韩一区二区三区高清免费看看 | 日韩欧美在线视频一区二区三区 | 91丨九色丨高潮丰满 | 成人在线免费观看视视频 | 狠狠色丁香婷婷综合橹88 | 亚洲h在线播放在线观看h | 香蕉久久国产 | www激情com| 日韩精品在线视频 | 亚洲成人免费观看 | 中文字幕一区二区在线观看 | 欧美精品在线一区 | 亚洲一区二区三区四区精品 | 亚洲综合少妇 | 亚洲婷婷在线 | 最近最新中文字幕视频 | 成年人在线观看免费视频 | 欧美日韩一区二区三区视频 | 久久伊人精品天天 | 九色视频网 | 麻豆一精品传二传媒短视频 | 黄色资源在线观看 | 久久免费高清 | 国产一级片免费观看 | 91精品国产99久久久久久久 | 超碰国产在线观看 | 麻豆91网站 | 久久成人国产精品一区二区 | 狠狠干综合网 | 五月婷婷毛片 | 亚洲一区二区黄色 | 国产色爽 | 久久免费成人精品视频 | 久久久久久久99 | 国产精品一区二区三区在线免费观看 | 一级黄色毛片 | 伊人久久精品久久亚洲一区 | 少妇bbb搡bbbb搡bbbb′ | 久久久久电影 | 中文字幕 欧美性 | av片在线观看 | 色婷婷中文| 久久国产精品久久久 | 99精品免费久久久久久久久 | 99热国产在线观看 | 久久不卡日韩美女 | 男女啪啪视屏 | 色综合久久久久 | 亚洲精品网站 | 天天操天天操天天操天天 | 中文字幕在线观看av | 亚洲国产精品99久久久久久久久 | 99re6热在线精品视频 | 在线免费观看黄色av | 日韩羞羞 | 97综合网 | 亚洲黄色小说网 | 在线观看播放av | 中文字幕在线观看第一页 | 在线看成人 | 亚洲成人家庭影院 | 欧美成人h版在线观看 | 国产成人在线观看免费 | 日韩二区在线观看 | 在线观看中文 | 成人亚洲精品久久久久 | 青青河边草免费直播 | 粉嫩高清一区二区三区 | 亚洲精品视频在线观看网站 | jizz18欧美18| 99热精品国产一区二区在线观看 | 日韩小视频网站 | 欧美三人交 | 日韩动态视频 | 日韩一区二区三区观看 | 高清国产在线一区 | 午夜精品导航 | 中文字幕在线观看免费 | 99热在线精品观看 | 国产资源av| 91看片在线观看 | 日韩大片在线免费观看 | 成人av电影免费在线播放 | 中文字幕在线观看第一区 | 日韩av一区二区在线播放 | 少妇高潮流白浆在线观看 | 亚洲精欧美一区二区精品 | 天天操天天弄 | 一级成人免费视频 | 婷婷在线播放 | 射射色| 国产亚洲精品久久久久久久久久 | 91你懂的 | 超碰97中文 | 黄色网址国产 | 在线国产能看的 | 中文字幕免费高清在线 | 欧美大香线蕉线伊人久久 | 国产亚洲无 | 亚洲精品美女在线观看 | 麻豆视频在线观看免费 | 中文字幕一区二区三区四区 | 中文字幕高清在线播放 | 欧美人人爱 | 永久黄网站色视频免费观看w | 国产精选在线 | 黄色特级一级片 | 国产不卡精品 | 久久久.com | 欧美一区二区三区在线视频观看 | 国产美女精品 | 日本一区二区三区免费看 | 午夜精品999| 最近最新mv字幕免费观看 | 欧美福利网址 | av色综合网| 免费看黄20分钟 | 国产中年夫妇高潮精品视频 | 亚洲激情 欧美激情 | 夜夜高潮夜夜爽国产伦精品 | 免费污片| 97在线资源| 亚洲国产欧美一区二区三区丁香婷 | 日韩av午夜在线观看 | 欧美了一区在线观看 | 日韩视频中文字幕在线观看 | 国产精品日韩精品 | 国产精品日韩在线 | 麻豆国产在线视频 | 国产伦精品一区二区三区高清 | 九九视频一区 | a级片久久 | 色婷婷成人网 | 深夜精品福利 | 国产精品久久久久影院 | 久久久久国产视频 | 日韩精品中文字幕在线不卡尤物 | 国产91精品在线观看 | 97视频免费看 | 天天干天天干天天干天天干天天干天天干 | 激情网五月天 | 国产精品福利在线观看 | 久久天堂精品视频 | 五月婷在线观看 | 日韩成年视频 | 首页中文字幕 | 91在线操 | 干亚洲少妇 | 国产亚洲视频系列 | 99久久久久成人国产免费 | 国产精品毛片久久久久久久 | 国产一卡久久电影永久 | 久久精品第一页 | 五月婷婷丁香在线观看 | 国产成人精品一区二区三区福利 | 97看片吧| 国产色区 | 国产一级a毛片视频爆浆 | 国产一卡久久电影永久 | 在线观看免费版高清版 | 欧美一区在线观看视频 | 国产女做a爱免费视频 | 伊人久久一区 | 久久精品国产免费看久久精品 | 久久久国产精华液 | 国内免费的中文字幕 | 久久热亚洲 | 国产高清在线永久 | 波多野结衣在线观看一区二区三区 | 日韩在线观看一区二区三区 | 国产精品美女久久久久久久久 | 久热超碰 | 五月黄色 | 一区二区精品在线 | 成人cosplay福利网站 | 免费看污污视频的网站 | 成人一区在线观看 | 九九热精 | 91大神一区二区三区 | 欧美日韩视频观看 | 亚洲乱码久久 | 久久久午夜视频 | 黄色亚洲在线 | 丁香九月婷婷 | 丁香高清视频在线看看 | 国产精品视频久久 | 在线黄频 | 91av视频免费观看 | 久草在线视频免费资源观看 | 日韩大片在线播放 | 亚洲精品乱码久久久久久蜜桃欧美 | 精品国产乱码久久久久久久 | 免费看片成人 | 免费色视频在线 | 午夜免费福利视频 | 日韩精品1区2区 | 超碰在线观看av | 色视频国产直接看 | 婷婷精品视频 | 国产小视频免费在线观看 | 欧美经典久久 | 日韩av电影网站在线观看 | 91.麻豆视频 | 亚洲成人av在线电影 | 麻豆视频国产 | 久久综合久色欧美综合狠狠 | 欧美久久久 | 黄色小说视频网站 | 九九久久影院 | 久久久国际精品 | 久久精品视频3 | 国产精品一区二区三区免费视频 | 精品国产乱码一区二 | 中文字幕高清免费日韩视频在线 | 天天干,天天操 | 免费亚洲一区二区 | 亚洲精品在线免费观看视频 | 黄色性av | 开心激情网五月天 | 久久久人人爽 | 午夜影院一级片 | 欧美黄色成人 | 日日草视频 | 久久视频免费在线观看 | 麻豆网站免费观看 | 国产91丝袜在线播放动漫 | 免费久久片 | 亚洲香蕉在线观看 | 九九热国产视频 | 久久夜靖品| 日韩超碰在线 | 国产精品久久久久久久久久久久久 | 亚洲伊人成综合网 | 亚洲国产中文字幕 | 亚洲精品美女久久久久 | 国产日韩高清在线 | 天天综合网入口 | 成人久久久精品国产乱码一区二区 | 最新日韩电影 | 天天操天天添 | 日韩精品一区二区免费视频 | 久久久久99999 | 午夜精品久久久99热福利 | 国产精品成人一区二区三区 | 色综合激情久久 | 亚洲日本在线视频观看 | 中文字幕 国产视频 | 国产一区二区三区在线免费观看 | 日韩久久久久久久久久久久 | 免费又黄又爽的视频 | 色伊人网| 一区二区三区免费在线观看 | 91视频链接 | 在线观看mv的中文字幕网站 | 91视频在线观看大全 | 成人影片在线免费观看 | 国产美女在线观看 | 在线91色| 曰本三级在线 | 成人av视屏| 久久久久久久久久久久久影院 | 91伊人久久大香线蕉蜜芽人口 | 亚洲精品免费在线视频 | 精品久久久精品 | 久久图| 亚洲在线成人精品 | 久久综合精品国产一区二区三区 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 亚洲视频999 | 日本性xxxxx| 99久久久久成人国产免费 | 人人爽久久久噜噜噜电影 | 色婷婷色 | 国产又粗又猛又黄视频 | 日韩av资源在线观看 | 永久免费毛片在线观看 | 国产成人久久精品77777综合 | 国产精品1000 | 久久久久久久久久影院 | 天天艹 | 日本黄色片一区二区 | 亚洲精品91天天久久人人 | 久久久午夜精品福利内容 | 亚洲欧美激情精品一区二区 | av大全在线看 | 91在线免费观看网站 | 欧美在线视频免费 | 日韩欧美国产免费播放 | 日韩成人在线一区二区 | 久久爽久久爽久久av东京爽 | 天堂av免费看 | www.色爱| 99久高清在线观看视频99精品热在线观看视频 | 国产一区视频免费在线观看 | 中文在线8新资源库 | 日韩高清一二三区 | 精品xxx| 免费国产在线视频 | 精品久久久免费 | 国产麻豆精品在线观看 | 国产精品11 | 久草观看视频 | 精品视频免费播放 | 国产黄色在线看 | 51久久成人国产精品麻豆 | 91久久人澡人人添人人爽欧美 | 天堂在线一区 | 91大神电影 | av电影在线免费观看 | 欧美亚洲国产一卡 | 97精品国产一二三产区 | 亚州精品一二三区 | 99视频一区 | 黄色片软件网站 | 天天色.com | 在线性视频日韩欧美 | 欧美日韩一级视频 | 最近高清中文在线字幕在线观看 | 欧美日韩一区二区在线观看 | 欧美性免费 | 中文字幕一区二区三区视频 | 欧美精品你懂的 | 91高清免费在线观看 | 911精品视频 | 国产高清在线不卡 | 欧美激情在线网站 | 四虎免费在线观看视频 | 91精品国产综合久久婷婷香蕉 | 中文字幕久久精品亚洲乱码 | a黄色片| 国产伦精品一区二区三区四区视频 | 丝袜+亚洲+另类+欧美+变态 | 国产精品va在线播放 | 正在播放一区二区 | 中文字幕成人一区 | 久久成年人视频 | 久久国产精品久久精品 | 午夜的福利 | 天天综合网在线观看 | 日韩欧美国产成人 | www.久久免费视频 | 午夜一级免费电影 | 国模视频一区二区三区 | 黄色av电影免费观看 | 在线观看一区二区视频 | 麻豆影视网 | 日日夜夜噜噜噜 | 欧美一级片在线播放 | 五月天com | av一级在线 | 国产精品一区二区三区久久久 | 狠狠色丁香婷婷综合基地 | 日韩精品一区在线播放 | 精品影院一区二区久久久 | 日本爽妇网| 91热视频| 亚洲国产精品成人女人久久 |