精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美极品色图| 日韩亚洲欧美中文高清在线| 日本www在线视频| 天天操天天干天天操| 亚洲女同同性videoxma| 日韩精品极品在线观看| 大肉大捧一进一出好爽动态图| 国产特黄在线| 韩国v欧美v日本v亚洲v| 97精品国产97久久久久久免费 | 欧美成人性网| 国产精品天干天干在观线| 97人人香蕉| 在线精品免费视| 午夜激情久久| 日韩精品极品视频免费观看| www.成年人| xx欧美xxx| 一区二区三区久久久| 奇米视频888战线精品播放| av中文字幕免费| 日韩成人av影视| 久久免费在线观看| chinese全程对白| 女人av一区| 精品国产一区二区三区av性色| 别急慢慢来1978如如2| 日本在线观看高清完整版| 欧美激情中文不卡| 久久五月天婷婷| 亚洲第一成人av| 精品一区二区三区免费视频| 国产成人精品在线播放| 日本三级黄色大片| 欧美一区二区三区久久精品| 中文字幕亚洲欧美| 欧美丰满少妇人妻精品| 超碰精品在线| 日韩欧美亚洲另类制服综合在线| 日韩爱爱小视频| 一区二区三区四区日本视频| 亚洲制服丝袜一区| 欧洲精品视频在线| 黄色在线免费网站| 国产精品美女久久久久av爽李琼| 欧美另类网站| 天堂在线中文| 波多野结衣亚洲一区| 99re在线观看视频| 国产婷婷在线视频| 极品美女销魂一区二区三区 | 成人在线视频www| 欧洲精品在线观看| 国产黄色特级片| 国产精品迅雷| 在线视频欧美精品| www.xxx亚洲| 成人看片网页| 在线观看免费成人| 手机视频在线观看| 四虎国产精品永久在线国在线| 欧美中文字幕一二三区视频| www.激情小说.com| 久久久加勒比| 欧美精品乱码久久久久久| 日韩av在线中文| 伊人久久大香线蕉综合影院首页| 欧美丰满一区二区免费视频| 亚洲欧美天堂在线| 人人爱人人干婷婷丁香亚洲| 精品国产1区二区| caopor在线| 秋霞蜜臀av久久电影网免费| 亚洲天堂av女优| 色婷婷国产精品免| 亚洲91视频| 欧美激情女人20p| 日韩欧美三级在线观看| 欧美亚洲三级| 国产精品视频资源| 国产超碰人人模人人爽人人添| 国产寡妇亲子伦一区二区| 99三级在线| 天天干视频在线| 国产婷婷色一区二区三区在线| 亚洲一区二区三区加勒比| 国产传媒在线播放| 午夜精品福利一区二区三区av | 厕沟全景美女厕沟精品| 91福利在线播放| 亚洲一级片网站| 亚洲视频国产精品| 亚洲精品在线视频| 国产免费嫩草影院| 欧美91福利在线观看| 91精品国产91| 中文字幕有码视频| 高清国产一区二区| 欧美日韩高清免费| 精品自拍一区| 欧美日韩激情小视频| 国产又黄又猛又粗| 国产精品jk白丝蜜臀av小说 | 久操视频在线观看| 亚洲成人手机在线| 一本色道久久亚洲综合精品蜜桃| 日本一区二区三区视频在线看| 日韩精品视频在线免费观看| 992在线观看| 亚洲国产日韩欧美一区二区三区| 国产成人精品一区二区| 亚洲精品国产精| 欧美国产综合色视频| 日本wwwcom| 成人18视频在线观看| 亚洲高清久久网| 三级黄色录像视频| 久久国产精品99国产| 3d精品h动漫啪啪一区二区| 欧美18xxxxx| 亚洲风情在线资源站| 久久久久国产一区| 亚欧洲精品视频在线观看| 久久天天躁狠狠躁老女人| 成人a v视频| 成人黄色网址在线观看| 亚洲一区美女| 午夜日韩成人影院| 日韩av影视在线| 九九九免费视频| 久久激情五月婷婷| 日韩av高清在线播放| 欧美精品久久久久久久自慰| 免费在线视频你懂得| 亚洲午夜久久久久久久久电影院| 国产3p在线播放| 久久av免费看| 45www国产精品网站| 亚洲AV无码一区二区三区少妇| 中文字幕国产精品一区二区| 99色精品视频| 日韩av影院| 久久免费视频在线| 丰满熟妇人妻中文字幕| 亚洲卡通欧美制服中文| 在线看免费毛片| 日本精品黄色| 国产成人精品一区二区| 国内三级在线观看| 欧美日韩亚洲天堂| 成人免费无码大片a毛片| 国产精品porn| 91精品国产综合久久久久久丝袜| 看黄网站在线| 欧美精品日韩综合在线| 国产精品久久久免费看| 麻豆91精品91久久久的内涵| 亚洲精品中文字幕在线| 国产综合色激情| 中文字幕在线日韩| 中文字幕一区二区人妻| 国产精品全国免费观看高清| 一路向西2在线观看| 欧美国产一区二区三区激情无套| 国产精品国语对白| 97在线观看免费观看高清| 欧美日韩亚洲丝袜制服| 羞羞在线观看视频| 欧美精品乱码视频一二专区| 亚洲欧美在线专区| 97av自拍| 91白丝在线| 亚洲欧美中文日韩在线| 这里只有久久精品视频| 一色桃子久久精品亚洲| 亚洲av无码久久精品色欲| 亚洲视频福利| 精品一区国产| 素人一区二区三区| 久久久电影免费观看完整版| 精品国产亚洲av麻豆| 亚洲成人av电影| 日本高清www| 久久成人免费日本黄色| 欧美国产视频一区| 羞羞答答一区二区| 成人网址在线观看| 丁香花高清在线观看完整版| 亚洲精品视频在线观看视频| 91影院在线播放| 亚洲一区二区三区中文字幕在线 | 久久众筹精品私拍模特| 一区二区三区 日韩| 午夜精品婷婷| 欧美精品一区三区在线观看| 激情久久99| 久久久久久久久中文字幕| 黄色视屏网站在线免费观看| 777精品伊人久久久久大香线蕉| 日本少妇全体裸体洗澡| 中文字幕第一区二区| 九九九久久久久久久| 国产精品美女久久久浪潮软件| 亚洲精品久久久久久一区二区| 日本少妇精品亚洲第一区| 日本一欧美一欧美一亚洲视频 | 高清欧美性猛交xxxx| 国产h在线观看| 欧美zozo另类异族| 中文字幕一区二区三区免费看| 亚洲韩国一区二区三区| 在线观看日本黄色| 9l国产精品久久久久麻豆| 欧洲一区二区在线| 国产麻豆一区二区三区| 97国产精品视频| 蜜桃久久一区二区三区| 欧美性生活影院| 日韩欧美亚洲国产| 日韩一区欧美一区| 国产精品无码电影| 久久激情综合网| 亚洲中文字幕无码中文字| 日韩一区二区在线免费| 久久资源av| 午夜视频一区二区在线观看| 国产精品久久久久久网站 | 国产欧美日韩精品一区二区免费 | 天天综合久久综合| 夜夜嗨av一区二区三区中文字幕| 日韩视频在线观看免费视频| 成人avav在线| 精产国品一区二区三区| 日韩电影一二三区| 国产黄色片免费在线观看| 68国产成人综合久久精品| 日本一区二区三区四区在线观看 | 九九精品在线观看视频| 国产精品嫩草99a| 国产高潮呻吟久久| 99久久精品国产导航| 免费看的av网站| 国产在线精品国自产拍免费| 91插插插插插插插插| 久久高清国产| 99精品视频在线看| 99av国产精品欲麻豆| 日本黄大片在线观看| 欧美国产免费| 一区二区三区四区免费观看| 日韩在线看片| 亚洲电影一二三区| 国产精品欧美日韩一区| 欧美二区三区| 精品日韩在线| 欧美日韩一区二区三区免费| 伊人春色之综合网| 久久亚洲国产精品日日av夜夜| 欧美日韩另类图片| 精品国产综合久久| 日日狠狠久久偷偷综合色| 精品国产一区二区三区四区精华| 另类图片第一页| 精品一区久久| 2019中文字幕在线视频| 美女视频网站黄色亚洲| 青青青国产在线视频| 午夜一级久久| 天堂在线资源视频| 麻豆freexxxx性91精品| 中文字幕资源在线观看| 国产在线精品一区二区| 日本成人在线免费| 成人精品小蝌蚪| 国产精品1000部啪视频| 久久久影院官网| 日本一级免费视频| 国产精品久久久久影视| 99久久久免费精品| 亚洲一区二区在线免费观看视频| 中文字幕一区二区三区手机版| 欧美丝袜第一区| 中文字幕乱伦视频| 69p69国产精品| 亚洲AV午夜精品| 日韩精品久久久久久福利| 成人在线观看一区| 久久久精品视频成人| 俄罗斯一级**毛片在线播放| 国产精品88a∨| 日本成人精品| 欧美性xxxx69| 欧美大片一区| 成人在线免费在线观看| 久久丁香综合五月国产三级网站| 99免费观看视频| 国产三级精品在线| 免费在线黄色网| 精品久久久久久久久久ntr影视| 国语对白做受69按摩| 日韩一区二区高清| 污污的视频网站在线观看| 伊人青青综合网站| 亚洲小说区图片区都市| 国产精品成人播放| 亚洲精选av| 麻豆国产精品va在线观看不卡| 青青操国产视频| 一本一道久久a久久精品| 国产精品女同一区二区| 日韩精品极品在线观看| 国产调教视频在线观看| 欧美一级片久久久久久久| 久久免费资源| 久久人人爽爽人人爽人人片av| 香蕉av一区二区 | 日韩成人伦理电影在线观看| 黑人无套内谢中国美女| 欧美国产精品一区二区| 日本一区二区欧美| 91精品在线免费| 天堂在线资源库| 欧美老女人性生活| 久久69成人| 精品一区久久久久久| 中文字幕一区二区三区乱码图片| 美女一区二区三区视频| www..com久久爱| 欧美激情一区二区视频| 欧美日本免费一区二区三区| 黄视频在线观看免费| 欧美精品激情在线观看| 欧美成人福利| 欧美亚洲一级二级| 99视频+国产日韩欧美| 欧美性受xxxx黒人xyx性爽| 欧美激情资源网| 中文字幕免费高清网站| 亚洲黄色片网站| 国产福利电影在线播放| 岛国视频一区| 午夜日韩av| 亚洲欧美日韩中文字幕在线观看| 中文字幕亚洲区| 中文字幕乱伦视频| 亚洲人成在线一二| 国产高清不卡| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 日本一级片在线播放| 亚洲男人的天堂网| 国产又粗又猛又爽| 日韩一区二区三区xxxx| 另类一区二区| 亚洲制服中文| 精品一区免费av| 免费看一级大片| 91精品欧美综合在线观看最新| 黄色一级大片在线免费看产| 国产乱人伦真实精品视频| 日本一本不卡| 国模私拍视频在线观看| 一区免费观看视频| 国产剧情久久久| 欧美国产日韩xxxxx| 99re8这里有精品热视频8在线 | 男人的天堂在线视频免费观看| 国产精品视频网| 91亚洲国产成人久久精品| 中文字幕线观看| 亚洲黄色录像片| 免费a级片在线观看| 国产69精品久久久久9| 欧洲亚洲一区二区三区| 国产亚洲综合视频| 国产喂奶挤奶一区二区三区| 一级α片免费看刺激高潮视频| 久久精品久久精品亚洲人| 国产日本亚洲| 91丨porny丨探花| 久久亚洲一级片| 在线观看免费视频a| 操91在线视频| 亚洲一区二区三区在线免费| 免费看欧美黑人毛片| 91一区二区在线观看| 最新国产中文字幕| 日韩最新中文字幕电影免费看| 伊人精品综合| 青青草av网站| 亚洲精品一卡二卡| 午夜黄色小视频| 国产精品视频区| 在线观看视频日韩| 91中文字幕永久在线| 欧美人牲a欧美精品| 免费在线中文字幕| 免费国产在线精品一区二区三区| 久久成人久久鬼色| 日韩精品手机在线| 亚洲影院一区二区三区|