精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

淺談Nodejs中間層

開發 前端
nodejs的出現為前端行業帶來了無限的可能性,讓很多原來只負責客戶端開發的同學也慢慢開始接觸和使用服務器端技術.

 [[390852]]

前言

nodejs的出現為前端行業帶來了無限的可能性,讓很多原來只負責客戶端開發的同學也慢慢開始接觸和使用服務器端技術.

雖然nodejs帶來了很多的好處,但是它也存在自身的局限性.和那些傳統老牌的編程語言相比,如JAVA,PHP.nodejs并不能成為它們的替代品,而且在可預估的未來,也很難撼動那些老牌編程語言的地位.

目前nodejs主要有以下幾個應用場景.

  •  前端工程化,比如rollup,webpack在工程化方向的探索
  •  nodejs中間層
  •  客戶端集成nodejs,比如electron
  •  市面上一些不太復雜的應用選擇nodejs作為后端編程語言

本文主要講一講nodejs作為中間層的一些實踐,查看下圖.

傳統的的開發模式由瀏覽器直接和Server層直接通信,中間層的加入意味著在瀏覽器和Server層之間額外添加了一層.

原來客戶端直接向Server發送請求,Server層收到請求后經過計算處理將結果返回給瀏覽器.

如今瀏覽器將請求發送給node層,node層經過一輪處理后再向Server層發起請求.Server層處理完畢將響應結果返回給node層,node層最后將數據返回給瀏覽器.

因為node層的出現,Server層可以只用關注業務本身,而不必理會前端對字段的特殊要求。

node層可以向server層獲取數據,再通過對數據的計算整合轉換成符合前端UI要求的數據格式.另外整個應用如果采用微服務架構,那么Server層會有很多臺管理單獨業務模塊的服務器,node層就很好的適配了微服務的架構,它可以向多臺服務器發起請求獲取到不同模塊的數據再整合轉化發送給前端.

下面著重介紹一下nodejs作為中間層的部分實踐.

代理轉發

代理轉發在實際中有很多廣泛的應用.瀏覽器首先將請求發送給node服務器,請求收到后node服務器可以對請求做一些處理,比如將原來的路徑變換一下,請求頭的信息改變一下,再把修改后的請求發送給遠程真實的服務器.

遠程服務器計算出響應結果再返回給node服務器,node服務器仍然可以對響應做選擇性處理再分返回給瀏覽器.

代理轉發可以解決前端日常開發中經常遇到的跨域問題,另外它還屏蔽了遠程真實服務器的細節,讓瀏覽器只與node服務器通信.下面是簡單的實踐. 

  1. const express = require('express');  
  2. const { createProxyMiddleware } = require('http-proxy-middleware');  
  3. const app = express();//創建應用   
  4. app.use("/api",createProxyMiddleware( //設置代理轉發  
  5.   {   
  6.      target: 'http://www.xxx.com', //舉例隨便寫的地址  
  7.      changeOrigin: true, 
  8.      pathRewrite: function (path) {   
  9.        return path.replace('/api', '/server/api');  
  10.      }  
  11.   })  
  12. );  
  13. app.use("*",(req,res)=>{  //不是以'/api'開頭的路由全部返回"hello world"  
  14.   res.send("hello world");  
  15. })  
  16. app.listen(3000); 

http-proxy-middleware是一個第三方依賴包,可以非常方便設置代理轉發,需要通過npm安裝.

如果當前訪問的路徑是以/api開頭,那么該請求就會被http-proxy-middleware攔截.觀察http-proxy-middleware里面配置的參數.

  •  target代表遠程真實服務器的地址.
  •  changeOrigin設置為true,表示將請求轉發到target地址上.
  •  pathRewrite是對請求路徑做一下處理,將/api轉換成/server/api.

上面的案例意思很明顯,假如當前瀏覽器訪問http://localhost:3000/api/list.因為這個路徑以/api開頭所以會被攔截,從而觸發pathRewrite函數修改訪問路徑.最終訪問路徑就變成了http://www.xxx.com/server/api/list,然后就會向這個路徑發起請求,得到響應后再返回給瀏覽器.

接口聚合

上面介紹的接口轉發在實踐中很少會單獨應用,如果僅僅只是為了轉發一下數據,那還不如直接用nginx配置一下,轉發就搞定了.

如果接口聚合和接口轉發都需要,那么從代碼層面去解決還是優先考慮的方式.

接口聚合是什么意思呢?假設現在企業有兩個銷售體系,一個是線上的電商平臺銷售,另一個是線下實體店.它們分別屬于不同的團隊運營,維護著不同的數據系統.

如果當前請求只是想查詢一下電商平臺某款商品的信息,只需要將接口轉發給電商平臺系統即可.同理如果僅僅只是查詢線下實體店某一天的銷售業績,可以直接把請求轉發給線下數據系統查詢,再把響應數據返回.上面介紹的插件http-proxy-middleware支持配置多個代理路徑,詳細可查詢文檔.

現在有這么一個需求,目標是查詢本周某款商品在線上和線下銷售數據的對比.那么這個時候就需要node層向兩個遠程服務器發送請求分別獲取線上銷售數據和線下銷售數據,將這兩部分數據聚合處理后再返回給前端.簡單實踐如下. 

  1. const express = require('express');  
  2. const { createProxyMiddleware } = require('http-proxy-middleware');  
  3. const app = express();//創建應用  
  4. //偽代碼  
  5. app.get("/getSaleInfo",async (req,res)=>{   
  6.    const online_data =  await getOnline(); //獲取線上數據  
  7.    const offline_data = await getOffline(); //獲取線下數據  
  8.    res.send(dataHanlder(online_data,offline_data)); //對數據處理后返回給前端  
  9. })  
  10. proxyHanlder(app);//偽代碼,將代理轉發的邏輯封裝起來  
  11. app.use("*",(req,res)=> 
  12.   res.send("hello world");  
  13. })  
  14. app.listen(3000); 

/getSaleInfo代表著將兩條數據聚合的自定義路由,如果需要聚合數據的需求比較多,這塊邏輯要單獨封裝到路由模塊中管理,并且要寫在代理轉發的前面.

這樣就確保了需要轉發的接口就交給轉發的邏輯處理,需要個性化處理數據的接口就單獨編寫路由操作數據.

數據緩存

緩存對于提升系統性能,減小數據庫壓力起到了無足輕重的作用.一般常用的緩存軟件是redis,它可以被理解成數據存儲在內存當中的數據庫.由于數據放在內存中,讀寫速度非常快,能極快的響應用戶的請求.

在node層部署redis管理緩存數據,可以提升整體應用性能.但不是什么數據都建議存放在redis中,只有那些不經常變動的數據應該設置成緩存.

比如商品的信息數據,瀏覽器對某個商品發起請求,想查看該商品的詳情.請求第一次到達node層,redis此時是空的.那么node開始請求server層得到響應結果,此時在將響應結果返回給瀏覽器之前,將該次請求的訪問路徑作為key值,響應結果作為value存儲到redis中.這樣之后再有相同的請求發來時,先查看redis有沒有緩存該請求的數據,如果緩存了直接將數據返回,如果沒有緩存再去請求server層,把上述流程再走一遍.

redis還可以對緩存數據設置過期時間和清除,可以根據具體的業務操作.簡單實踐如下. 

  1. const express = require('express');  
  2. const app = express();//創建應用  
  3. //偽代碼  
  4. app.use("*",(req,res,next)=> 
  5.    const path = req.originalUrl; //獲取訪問路徑  
  6.    if(redisClient.getItem(path)){ //查看redis中有沒有緩存該條接口的數據  
  7.      res.send(redisClient.getItem(path)); // 返回緩存數據  
  8.    }else{  
  9.      next(); //不執行任何操作,直接放行   
  10.    }  
  11. })  
  12. aggregate(app); //偽代碼,將接口聚合的邏輯封裝起來  
  13. proxyHanlder(app);//偽代碼,將代理轉發的邏輯封裝起來  
  14. app.use("*",(req,res)=> 
  15.   res.send("hello world");  
  16. })  
  17. app.listen(3000); 

接口限流

node做中間層可以對前端無節制的訪問做限制.比如有些惡意的腳本循環訪問接口,一秒鐘訪問幾十次增大了服務器的負載.

redis可以幫助我們實現這一功能.用戶第一次訪問,解析出本次請求的ip地址,將ip作為key值,value置為0存到redis中.

用戶第二次訪問,取出ip找到redis中對應的value,然后自增1.如果是相同的人重復大量訪問,value在短期內就自增到了很大的數字,我們可以每次獲取這個數字判端是否超過了設定的預期標準,超過則拒絕本次請求.簡單實踐如下. 

  1. const express = require('express');  
  2. const app = express();//創建應用  
  3. //偽代碼  
  4. app.use("*",(req,res,next)=> 
  5.   const ip = req.ip;  
  6.   let num = 0 
  7.   if(redisClient.getItem(ip)){ //是否緩存了當前的ip字段 
  8.     num = redisClient.incr(ip); //每訪問一下,計數加1  
  9.   }else{  
  10.     redisClient.setItem(ip,0);  
  11.     redisClient.setExpireTime(5); //設置過期時間為5秒,5秒后再獲取該ip為空  
  12.   }  
  13.   if(num > 20){   
  14.     res.send("非法訪問");  
  15.   }else{  
  16.     next();//放行  
  17.   }  
  18. })  
  19. cacheData(app)//偽代碼.緩存接口數據   
  20.  
  21. aggregate(app); //偽代碼,將接口聚合的邏輯封裝起來  
  22. proxyHanlder(app);//偽代碼,將代理轉發的邏輯封裝起來  
  23. app.use("*",(req,res)=> 
  24.   res.send("hello world");  
  25. })  
  26. app.listen(3000); 

在應用的前面設置一層限流中間件,每次訪問來臨先判端是否緩存過.第一次訪問肯定沒有緩存,就將當前ip對應的值設置為0并添加過期時間為5秒鐘.下一次相同的用戶再訪問時就會將value自增1.

最后的效果就達到了5秒內調用接口的次數超過20次便拒絕訪問.

日志操作

系統沒有日志,相當于人沒有雙眼.日志可以幫助我們發現分析定位線上系統出現的錯誤.另外通過日志數據也可以進行統計計算得出某些結論和趨勢.

node層能夠承擔起管理日志的功能,以接口訪問日志為例.在系統中新建一個日志文件夾,每次有請求訪問時,首先解析請求的路徑、當前的訪問時間以及攜帶的參數和終端數據信息.然后在日志文件夾創建一個txt文件存放當天日志情況,將上述數據和該請求的響應結果組合成一條記錄插入txt文件中.下一次訪問繼續走上面流程往txt文件添加訪問日志.像上面介紹的代理轉發,插件http-proxy-middleware支持配置如何返回響應結果,那么在相應的事件函數鉤子里就可以同時得到請求和響應,有了這兩塊數據就可以存放到日志中.

這里還能制定很多的配置策略.可以選擇一天一個日志文本,如果訪問量巨大也可以選擇一個小時一個日志文本,依據實際情況而定.

另外隨著時間的延長,日志文件夾的文件內容會越來越多.這就需要編寫linux操作系統定時任務來遷移和備份這些日志數據.

日志操作簡單實踐如下. 

  1. //偽代碼  
  2. app.use("/getList",async (req,res)=> 
  3.   const list = await getProductList(); //獲取商品數據  
  4.   const { 訪問時間,訪問路徑,參數 } = req;  
  5.   logger.log('info',`${訪問時間}-${訪問路徑和參數}:${list}`);//將數據存儲到日志文件中   
  6.   res.send(list);//將結果返回給客戶端  
  7. }) 

結尾

中間層另外還可以做很多其他事情,比如監控、鑒權和服務器端渲染(SSR).這部分由于內容比較多可以單獨成章,網絡上也有大量如何實踐的文章,可搜索查閱學習.

其實上面所談到的所有功能其他編程語言都可以做到,這也成為了很多人質疑是否需要在架構上額外再加一層的顧慮.

添加nodejs中間層,對于前端同學來說肯定是好消息.因為它能讓前端承擔更多的工作任務,讓前端的業務比重變大.另外后端從此只需要關注自身業務,前端繼續干著自己擅長的事,從整體上是能提升開發效率.

但從宏觀角度上看,架構額外增加一層勢必會造成整個應用性能上的損耗,另外在部署,測試層面都會增大運維成本.

當下前后端分離已經成為了主流的開發模式,很多類型的應用需要seo的支持以及首屏加載速度,因此服務器端渲染不可或缺.前端項目目前大多采用react或vue框架開發,如果用nodejs承擔服務器端渲染的任務,那么可以確保一套代碼既可以做客戶端渲染也能支持服務器端渲染,而這些工作都可以讓前端程序員獨立來完成.服務器端渲染技術非常重要,后面會開一個小節單獨講解.

綜上來看,nodejs做中間層最有價值的功能是服務器端渲染和接口數據聚合.如果企業應用數量較少業務簡單還沒有規模化,不建議添加中間層,那樣反而讓簡單的事情變得復雜. 

 

責任編輯:龐桂玉 來源: 前端大全
相關推薦

2021-12-02 06:58:01

中間頁中間層編程

2019-01-30 08:14:28

協議區塊鏈堆棧

2024-08-08 14:50:00

模型數據

2009-07-30 13:07:49

ASP.NET中的三層

2022-09-19 08:01:13

美團Leaf發號

2017-11-27 06:01:37

數據庫中間件中間層

2024-11-25 07:00:00

RedisMySQL數據庫

2025-04-29 09:10:00

2016-11-01 20:26:47

前端模板underscoreWeb

2022-01-04 20:34:00

數據安全Relay

2019-07-04 15:00:32

PythonHTTP服務器

2025-02-27 09:49:32

2017-10-17 09:15:06

Web服務器區別

2018-02-07 10:08:02

應用服務器網絡數據庫

2009-10-12 12:46:55

Linux內核SCSI IO

2009-08-10 15:20:00

構建JSP Servl

2023-01-04 15:24:46

ACE組件UI布局

2015-08-14 09:31:55

開源Python服務器

2025-11-03 07:47:12

2021-08-10 14:10:02

Nodejs后端開發
點贊
收藏

51CTO技術棧公眾號

亚洲视屏在线观看| a级大片在线观看| 国产天堂在线播放视频| 成人免费高清在线观看| 欧美中文在线视频| 美女av免费看| av毛片精品| 91成人国产精品| 亚洲天堂第一区| 久草福利在线视频| 国产成人综合视频| 青草成人免费视频| 青青操视频在线播放| 美女网站色精品尤物极品姐弟| 色婷婷久久综合| 国产美女视频免费| 无码国产精品一区二区色情男同| 日韩精品一二三四| 欧美激情欧美狂野欧美精品| 鲁丝一区二区三区| 一本一道久久a久久| 色av成人天堂桃色av| 免费看黄色a级片| 欧美午夜黄色| 国产一区二区美女诱惑| 日本一区二区在线免费播放| 人与动物性xxxx| 亚洲精品aaaaa| 日韩精品一区在线| 可以看污的网站| 综合另类专区| 一区二区三区丝袜| 亚洲视频在线观看日本a| 五月婷婷久久久| 国产主播一区二区三区| 国产成人亚洲精品| av大片免费在线观看| 欧美福利视频| 久久精品视频va| 中文字幕第24页| 国产成人久久| 亚洲人永久免费| 日本xxxx裸体xxxx| silk一区二区三区精品视频| 91精品国产91综合久久蜜臀| 男女污污的视频| 中文在线资源| 欧美日韩激情小视频| 免费看日b视频| 好吊日视频在线观看| 国产精品乱码一区二区三区软件| 蜜桃在线一区二区三区精品| 天堂av中文在线资源库| 成人av网站免费观看| 粉嫩av四季av绯色av第一区| www.国产欧美| 懂色av中文一区二区三区| 亚洲一区二区三区在线视频| 国产熟女一区二区三区四区| 精品在线免费视频| 成人午夜黄色影院| 一级片aaaa| 精品一区二区久久| 91精品视频大全| 精品黑人一区二区三区在线观看| 国产成人啪午夜精品网站男同| 91影院在线免费观看视频| 国产日韩免费视频| 国产精品亚洲一区二区三区妖精| 亚洲影影院av| 黄色片一区二区三区| 成人美女视频在线观看| 久久99精品久久久久久秒播放器| 色视频在线观看免费| 久久精品人人做人人综合| 日韩精品成人一区二区在线观看| aⅴ在线视频男人的天堂| 日韩一区欧美一区| 黄黄视频在线观看| 波多野结衣在线高清| 精品女同一区二区三区在线播放| 红桃av在线播放| 欧美一级免费| 欧美tk—视频vk| 超碰97人人干| 欧美hentaied在线观看| 欧美国产日本在线| 免费观看一区二区三区毛片| 日韩电影免费在线观看网站| 亚洲自拍另类欧美丝袜| 天天操天天舔天天干| 国产欧美日韩激情| 欧美在线观看黄| 都市激情亚洲一区| 91精品午夜视频| 日韩综合第一页| 日韩成人精品一区| 欧美激情中文字幕乱码免费| 日韩在线视频不卡| 国产原创一区二区| 美日韩免费视频| 欧美尤物美女在线| 懂色av一区二区三区| 中文字幕在线观看日 | 亚洲一区二区三区在线免费观看| 日韩中文字幕观看| 国产精品国产三级国产| 日韩中字在线观看| 伊人久久大香线蕉综合影院首页| 亚洲国产精品99久久| 黑人と日本人の交わりビデオ| 国产精品激情| 国产欧美日韩精品丝袜高跟鞋| 色婷婷av一区二区三| 国产精品久久久久久亚洲毛片 | 亚洲成年人在线播放| 摸摸摸bbb毛毛毛片| 91久久亚洲| 91系列在线播放| 九色在线观看视频| 亚洲超丰满肉感bbw| 污污的视频免费| 尤物tv在线精品| 午夜精品久久久久久久99热| 精品人妻无码一区二区| 国产精品高潮呻吟| 久久婷婷国产91天堂综合精品| 久久中文资源| 欧美黄色片在线观看| 亚洲网站在线免费观看| 国产婷婷一区二区| 欧美国产亚洲一区| 加勒比久久高清| 色综合久久天天综线观看| 中文字幕在线2019| 国产亚洲精品7777| 妺妺窝人体色www在线小说| 国产日韩在线观看视频| 日韩最新中文字幕电影免费看| www五月天com| 91美女片黄在线| 欧美亚洲国产成人| 日韩福利视频一区| 国外视频精品毛片| 好男人www在线视频| 亚洲在线免费播放| 岛国精品一区二区三区| 欧美啪啪一区| 亚洲综合小说区| 在线电影福利片| 日韩一级黄色大片| 加勒比av在线播放| 高清成人在线观看| 女人色极品影院| 哺乳挤奶一区二区三区免费看| 欧美高清视频在线观看| 嫩草影院一区二区| 狠狠躁夜夜躁久久躁别揉| 亚洲熟女乱综合一区二区三区| 亚洲国产免费看| 国产精品入口免费| 日本乱码一区二区三区不卡| 亚洲欧美激情视频| 五月天中文字幕| 国产精品欧美经典| 亚洲精品mv在线观看| 欧美韩日精品| 国产九色91| 欧美xx视频| 自拍偷拍免费精品| 国产免费黄色大片| 亚洲一区二区三区中文字幕| 波多野结衣先锋影音| 日韩高清在线不卡| 天天做天天爱天天高潮| 国产精品tv| 人人爽久久涩噜噜噜网站| 波多野结衣一区二区| 欧美一区二区三区日韩视频| 国产亚洲第一页| 久久蜜桃av一区二区天堂| 最新天堂中文在线| 欧美91福利在线观看| 久久久综合香蕉尹人综合网| 成人午夜一级| 欧美激情视频播放| 欧美少妇另类| 日韩视频中午一区| 欧美在线观看不卡| 亚洲日穴在线视频| 中文字幕丰满孑伦无码专区| 久久av资源网| 欧美黄网站在线观看| 91成人影院| 久久综合入口| 免费看一区二区三区| 欧美一区二区三区免费视| 黄色av网站在线播放| 亚洲精品影视在线观看| 99精品在线视频观看| 欧美午夜精品久久久久久人妖| 草久久免费视频| 欧美大人香蕉在线| 国产伦精品一区二区三区四区免费 | 激情小说亚洲| 亚洲91av视频| 国产鲁鲁视频在线观看特色| 亚洲精品自拍第一页| 国产欧美熟妇另类久久久| 色综合久久久久综合99| 国产黄色小视频网站| 久久久久久久一区| 又大又长粗又爽又黄少妇视频| 日韩高清欧美激情| 欧美人与动牲交xxxxbbbb| 凹凸成人精品亚洲精品密奴| 精品国产综合久久| 欧美视频二区欧美影视| 国产日韩精品在线| 色综合亚洲图丝熟| 色综合久久88色综合天天看泰| 在线观看的av| 亚洲欧美中文另类| 免费观看黄色一级视频| 欧美一区二区人人喊爽| 中文字幕日韩三级| 在线视频综合导航| www.国产成人| 亚洲线精品一区二区三区| 国产又粗又猛又爽又黄的视频四季 | 最新国产乱人伦偷精品免费网站| 男同互操gay射视频在线看| jlzzjlzz亚洲女人| 免费在线观看91| 六月丁香久久丫| 粉嫩高清一区二区三区精品视频| 国产一区一区| 91视频-88av| а天堂中文最新一区二区三区| 国产精品久久久久久久久久久久久| 不卡一二三区| 国产成人久久久精品一区| 在线男人天堂| 欧美制服第一页| 日韩三级影视| 国产97免费视| 日韩中文视频| 国产精品99久久99久久久二8| 成人欧美一区二区三区的电影| 97色在线视频| 深夜在线视频| 日本成人免费在线| 色8久久影院午夜场| 国产精品久久久久免费a∨| 99精品国自产在线| 91精品久久久久| 亚洲精品a区| 国产一区二区高清不卡| 任你弄精品视频免费观看| 免费观看国产成人| 成人在线免费观看91| 一区二区免费在线视频| 综合精品久久| 18禁裸男晨勃露j毛免费观看| 亚洲激情精品| 无码人妻丰满熟妇区五十路百度| 日韩精品一区第一页| 九九热免费在线观看| 国产成人日日夜夜| 加勒比精品视频| 国产区在线观看成人精品| 亚洲一二三四五六区| 亚洲一区二区在线免费观看视频| 国产精品久久久久久99| 欧美综合亚洲图片综合区| 国产又粗又猛视频| 精品少妇一区二区三区日产乱码 | 自拍偷拍亚洲区| 中国av在线播放| 日本乱人伦a精品| 成人国产一区| 国产精品制服诱惑| 欧美精品一二| 青青青在线观看视频| 性色av一区二区怡红| 欧美伦理片在线观看| 国产传媒一区在线| 亚洲精品色午夜无码专区日韩| 中文字幕一区不卡| 亚洲一区 视频| 欧美日韩的一区二区| 黑人精品一区二区三区| 伊人精品在线观看| gogo高清在线播放免费| 国产精品丝袜白浆摸在线| 高清一区二区三区| 亚洲狠狠婷婷综合久久久| 国产精品分类| 激情黄色小视频| 久久亚洲精品小早川怜子| 欧美日韩三级在线观看| 在线观看精品一区| 日批免费在线观看| 久久精品一本久久99精品| 综合毛片免费视频| 国产精品免费在线播放| 久久人体视频| 日日摸日日碰夜夜爽av| 国产精品1区2区3区| а天堂中文在线资源| 欧美三级免费观看| www.桃色av嫩草.com| 中文字幕av日韩| 国产三级电影在线播放| 亚洲专区在线视频| 日本高清免费电影一区| 97在线播放视频| 成人福利视频在线| 成人免费毛片东京热| 欧美日韩激情在线| 成人精品一区二区三区免费| 2019av中文字幕| 国内精品国产成人国产三级粉色 | 成人欧美大片| 国产欧美欧洲| 韩日精品视频| 日韩精品xxx| 亚洲蜜臀av乱码久久精品| 波多野结衣日韩| 亚洲欧洲一区二区三区久久| 久草在线中文最新视频| 国产成人看片| 欧美日韩国产亚洲一区| aaa一级黄色片| 亚洲欧洲精品成人久久奇米网| 中国黄色一级视频| 尤物yw午夜国产精品视频明星| 欧美成人黑人| 日本高清久久一区二区三区| 免费视频一区| 免费一级做a爰片久久毛片潮| 日韩欧美在线视频观看| 三级av在线播放| 欧美综合在线观看| 精品在线91| www.色偷偷.com| 亚洲国产高清在线| 中文字幕+乱码+中文乱码91| 最近2019中文字幕mv免费看| 激情久久99| 久久久久久久久影视| 国产91色综合久久免费分享| 精品肉丝脚一区二区三区| 亚洲成av人片在线观看香蕉| sm捆绑调教国产免费网站在线观看 | 久99久在线视频| 亚洲性视频在线| 国产真人做爰毛片视频直播| 99精品久久99久久久久| 日韩色图在线观看| 亚洲最新中文字幕| 超碰国产精品一区二页| 男人日女人的bb| 99re热这里只有精品视频| 亚洲成人第一网站| 在线观看国产精品日韩av| av一级久久| 成人性生活视频免费看| 久久久久久电影| 国产一区二区三区中文字幕| 欧美另类高清videos| 久久激情av| 性欧美极品xxxx欧美一区二区| 亚洲欧美怡红院| 秋霞av鲁丝片一区二区| 国产成人一区二区| 99九九热只有国产精品| 中文在线观看免费视频| 在线精品视频小说1| 国产视频在线播放| 狠狠色狠狠色综合人人| 日韩电影在线免费| 麻豆亚洲av熟女国产一区二 | 国产精品免费一区二区三区| 美女久久网站| 婷婷色中文字幕| 亚洲欧美国产一本综合首页| 成人午夜888| 日本www在线播放| 亚洲欧美日韩久久| 天堂中文字幕在线| 91香蕉亚洲精品| 久久黄色网页| 欧美精品一区二区蜜桃| 国产亚洲美女久久| 日韩高清在线观看一区二区| 午夜视频在线瓜伦| 亚洲影视在线观看| 成人av一区| 精品视频一区二区|