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

像Vue-Router一樣配置Node路由?

開發(fā) 前端 商務(wù)辦公
前后端分離后,前端童鞋會需要處理一些node層的工作,比如模板渲染、接口轉(zhuǎn)發(fā)、部分業(yè)務(wù)邏輯等,比較常用的框架有koa、koa-router等。

 [[440238]]

本文轉(zhuǎn)載自微信公眾號「前端胖頭魚」,作者前端胖頭魚 。轉(zhuǎn)載本文請聯(lián)系前端胖頭魚公眾號。

前言

前后端分離后,前端童鞋會需要處理一些node層的工作,比如模板渲染、接口轉(zhuǎn)發(fā)、部分業(yè)務(wù)邏輯等,比較常用的框架有koa、koa-router等。

現(xiàn)在我們需要實現(xiàn)這樣一個需求:

  • 用戶訪問/fe的時候,頁面展示hello fe
  • 用戶訪問/backend的時候,頁面展示hello backend

你是不是在想,這需求俺根本不用koa、koa-router,原生的node模塊就可以搞定。

  1. const http = require('http'
  2. const url = require('url'
  3. const PORT = 3000 
  4.  
  5. http.createServer((req, res) => { 
  6.   let { pathname } = url.parse(req.url) 
  7.   let str = 'hello' 
  8.  
  9.   if (pathname === '/fe') { 
  10.     str += ' fe' 
  11.   } else if (pathname === '/backend') { 
  12.     str += ' backend' 
  13.   } 
  14.  
  15.   res.end(str) 
  16. }).listen(PORT, () => { 
  17.   console.log(`app start at: ${PORT}`) 
  18. }) 

確實是,對于很簡單的需求,用上框架似乎有點浪費,但是對于以上的實現(xiàn),也有缺點存在,比如

  • 需要我們自己去解析路徑。
  • 路徑的解析和邏輯的書寫耦合在一塊。如果未來有更多更復(fù)雜的需求需要實現(xiàn),那就gg了。

所以接下來我們來試試用koa和koa-router怎么實現(xiàn)

app.js

  1. const Koa = require('koa'
  2. const KoaRouter = require('koa-router'
  3.  
  4. const app = new Koa() 
  5. const router = new KoaRouter() 
  6. const PORT = 3000 
  7.  
  8. router.get('/fe', (ctx) => { 
  9.   ctx.body = 'hello fe' 
  10. }) 
  11.  
  12. router.get('/backend', (ctx) => { 
  13.   ctx.body = 'hello backend' 
  14. }) 
  15.  
  16. app.use(router.routes()) 
  17. app.use(router.allowedMethods()) 
  18.  
  19. app.listen(PORT, () => { 
  20.   console.log(`app start at: ${PORT}`) 
  21. }) 

通過上面的處理,路徑的解析倒是給koa-router處理了,但是整體的寫法還是有些問題。

  • 匿名函數(shù)的寫法沒有辦法復(fù)用
  • 路由配置和邏輯處理在一個文件中,沒有分離,項目一大起來,同樣是件麻煩事。

接下來我們再優(yōu)化一下,先看一下整體的目錄結(jié)構(gòu)

  1. ├──app.js // 應(yīng)用入口 
  2. ├──controller // 邏輯處理,分模塊 
  3. │   ├──hello.js 
  4. │   ├──aaaaa.js 
  5. ├──middleware // 中間件統(tǒng)一注冊 
  6. │   ├──index.js 
  7. ├──routes // 路由配置,可以分模塊配置 
  8. │   ├──index.js 
  9. ├──views // 模板配置,分頁面或模塊處理,在這個例子中用不上 
  10. │   ├──index.html 

預(yù)覽一下每個文件的邏輯

app.js 應(yīng)用的路口

  1. const Koa = require('koa'
  2. const middleware = require('./middleware'
  3. const app = new Koa() 
  4. const PORT = 3000 
  5.  
  6. middleware(app) 
  7.  
  8. app.listen(PORT, () => { 
  9.   console.log(`app start at: ${PORT}`) 
  10. }) 

routes/index.js 路由配置中心

  1. const KoaRouter = require('koa-router'
  2. const router = new KoaRouter() 
  3. const koaCompose = require('koa-compose'
  4. const hello = require('../controller/hello'
  5.  
  6. module.exports = () => { 
  7.   router.get('/fe', hello.fe) 
  8.   router.get('/backend', hello.backend) 
  9.  
  10.   return koaCompose([ router.routes(), router.allowedMethods() ]) 

controller/hello.js hello 模塊的邏輯

  1. module.exports = { 
  2.   fe (ctx) { 
  3.     ctx.body = 'hello fe' 
  4.   }, 
  5.   backend (ctx) { 
  6.     ctx.body = 'hello backend' 
  7.   } 

middleware/index.js 中間件統(tǒng)一注冊

  1. const routes = require('../routes'
  2.  
  3. module.exports = (app) => { 
  4.   app.use(routes()) 

寫到這里你可能心里有個疑問?一個簡單的需求,被這么一搞看起來復(fù)雜了太多,有必要這樣么?

答案是:有必要,這樣的目錄結(jié)構(gòu)或許不是最合理的,但是路由、控制器、view層等各司其職,各在其位。對于以后的擴展有很大的幫助。

不知道大家有沒有注意到路由配置這個地方

routes/index.js 路由配置中心

  1. const KoaRouter = require('koa-router'
  2. const router = new KoaRouter() 
  3. const koaCompose = require('koa-compose'
  4. const hello = require('../controller/hello'
  5.  
  6. module.exports = () => { 
  7.   router.get('/fe', hello.fe) 
  8.   router.get('/backend', hello.backend) 
  9.  
  10.   return koaCompose([ router.routes(), router.allowedMethods() ]) 

每個路由對應(yīng)一個控制器去處理,很分離,很常見啊!!!這似乎也是我們平時在前端寫vue-router或者react-router的常見配置模式。

但是當模塊多起來的來時候,這個文件夾就會變成

  1. const KoaRouter = require('koa-router'
  2. const router = new KoaRouter() 
  3. const koaCompose = require('koa-compose'
  4. // 下面你需要require各個模塊的文件進來 
  5. const hello = require('../controller/hello'
  6. const a = require('../controller/a'
  7. const c = require('../controller/c'
  8.  
  9. module.exports = () => { 
  10.   router.get('/fe', hello.fe) 
  11.   router.get('/backend', hello.backend) 
  12.   // 配置各個模塊的路由以及控制器 
  13.   router.get('/a/a', a.a) 
  14.   router.post('/a/b', a.b) 
  15.   router.get('/a/c', a.c) 
  16.   router.get('/a/d', a.d) 
  17.  
  18.   router.get('/c/a', c.c) 
  19.   router.post('/c/b', c.b) 
  20.   router.get('/c/c', c.c) 
  21.   router.get('/c/d', c.d) 
  22.  
  23.   // ... 等等     
  24.   return koaCompose([ router.routes(), router.allowedMethods() ]) 

有沒有什么辦法,可以讓我們不用手動引入一個個控制器,再手動的調(diào)用koa-router的get post等方法去注冊呢?

比如我們只需要做以下配置,就可以完成上面手動配置的功能。

routes/a.js

  1. module.exports = [ 
  2.   { 
  3.     path: '/a/a'
  4.     controller: 'a.a' 
  5.   }, 
  6.   { 
  7.     path: '/a/b'
  8.     methods: 'post'
  9.     controller: 'a.b' 
  10.   }, 
  11.   { 
  12.     path: '/a/c'
  13.     controller: 'a.c' 
  14.   }, 
  15.   { 
  16.     path: '/a/d'
  17.     controller: 'a.d' 
  18.   } 

routes/c.js

  1. module.exports = [ 
  2.   { 
  3.     path: '/c/a'
  4.     controller: 'c.a' 
  5.   }, 
  6.   { 
  7.     path: '/c/b'
  8.     methods: 'post'
  9.     controller: 'c.b' 
  10.   }, 
  11.   { 
  12.     path: '/c/c'
  13.     controller: 'c.c' 
  14.   }, 
  15.   { 
  16.     path: '/c/d'
  17.     controller: 'c.d' 
  18.   } 

然后使用pure-koa-router這個模塊進行簡單的配置就ok了

  1. const pureKoaRouter = require('pure-koa-router'
  2. const routes = path.join(__dirname, '../routes') // 指定路由 
  3. const controllerDir = path.join(__dirname, '../controller') // 指定控制器的根目錄 
  4.  
  5. app.use(pureKoaRouter({ 
  6.   routes, 
  7.   controllerDir 
  8. })) 

這樣整個過程我們的關(guān)注點都放在路由配置上去,再也不用去手動require一堆的文件了。

簡單介紹一下上面的配置

  1.   path: '/c/b'
  2.   methods: 'post'
  3.   controller: 'c.b' 

path: 路徑配置,可以是字符串/c/b,也可以是數(shù)組[ '/c/b' ],當然也可以是正則表達式/\c\b/

methods: 指定請求的類型,可以是字符串get或者數(shù)組[ 'get', 'post' ],默認是get方法,

controller: 匹配到路由的邏輯處理方法,c.b 表示controllerDir目錄下的c文件導(dǎo)出的b方法,a.b.c表示controllerDir目錄下的/a/b 路徑下的b文件導(dǎo)出的c方法

源碼實現(xiàn)

接下來我們逐步分析一下實現(xiàn)邏輯

可以點擊查看源碼

整體結(jié)構(gòu)

  1. module.exports = ({ routes = [], controllerDir = '', routerOptions = {} }) => { 
  2.   // xxx 
  3.  
  4.   return koaCompose([ router.routes(), router.allowedMethods() ]) 
  5. }) 

pure-koa-router接收

1.routes

  • 可以指定路由的文件目錄,這樣pure-koa-router會去讀取該目錄下所有的文件 (const routes = path.join(__dirname, '../routes'))
  • 可以指定具體的文件,這樣pure-koa-router讀取指定的文件內(nèi)容作為路由配置 const routes = path.join(__dirname, '../routes/tasks.js')
  • 可以直接指定文件導(dǎo)出的內(nèi)容 (const routes = require('../routes/index'))

2.controllerDir、控制器的根目錄

3.routerOptions new KoaRouter時候傳入的參數(shù),具體可以看koa-router

這個包執(zhí)行之后會返回經(jīng)過koaCompose包裝后的中間件,以供koa實例添加。

參數(shù)適配

  1. assert(Array.isArray(routes) || typeof routes === 'string''routes must be an Array or a String'
  2. assert(fs.existsSync(controllerDir), 'controllerDir must be a file directory'
  3.  
  4. if (typeof routes === 'string') { 
  5.   routes = routes.replace('.js'''
  6.  
  7.   if (fs.existsSync(`${routes}.js`) || fs.existsSync(routes)) { 
  8.     // 處理傳入的是文件 
  9.     if (fs.existsSync(`${routes}.js`)) { 
  10.       routes = require(routes) 
  11.     // 處理傳入的目錄   
  12.     } else if (fs.existsSync(routes)) { 
  13.       // 讀取目錄中的各個文件并合并 
  14.       routes = fs.readdirSync(routes).reduce((result, fileName) => { 
  15.         return result.concat(require(nodePath.join(routes, fileName))) 
  16.       }, []) 
  17.     } 
  18.   } else { 
  19.     // routes如果是字符串則必須是一個文件或者目錄的路徑 
  20.     throw new Error('routes is not a file or a directory'
  21.   } 

路由注冊

不管routes傳入的是文件還是目錄,又或者是直接導(dǎo)出的配置的內(nèi)容最后的結(jié)構(gòu)都是是這樣的

routes內(nèi)容預(yù)覽

  1.   // 最基礎(chǔ)的配置 
  2.   { 
  3.     path: '/test/a'
  4.     methods: 'post'
  5.     controller: 'test.index.a' 
  6.   }, 
  7.   // 多路由對一個控制器 
  8.   { 
  9.     path: [ '/test/b''/test/c' ], 
  10.     controller: 'test.index.a' 
  11.   }, 
  12.   // 多路由對多控制器 
  13.   { 
  14.     path: [ '/test/d''/test/e' ], 
  15.     controller: [ 'test.index.a''test.index.b' ] 
  16.   }, 
  17.   // 單路由對對控制器 
  18.   { 
  19.     path: '/test/f'
  20.     controller: [ 'test.index.a''test.index.b' ] 
  21.   }, 
  22.   // 正則 
  23.   { 
  24.     path: /\/test\/\d/, 
  25.     controller: 'test.index.c' 
  26.   } 

主動注冊

  1. let router = new KoaRouter(routerOptions) 
  2. let middleware 
  3.  
  4. routes.forEach((routeConfig = {}) => { 
  5.   let { path, methods = [ 'get' ], controller } = routeConfig 
  6.   // 路由方法類型參數(shù)適配 
  7.   methods = (Array.isArray(methods) && methods) || [ methods ] 
  8.   // 控制器參數(shù)適配 
  9.   controller = (Array.isArray(controller) && controller) || [ controller ] 
  10.  
  11.   middleware = controller.map((controller) => { 
  12.     // 'test.index.c' => [ 'test''index''c' ] 
  13.     let controllerPath = controller.split('.'
  14.     // 方法名稱 c 
  15.     let controllerMethod = controllerPath.pop() 
  16.  
  17.     try { 
  18.       // 讀取/test/index文件的c方法 
  19.       controllerMethod = require(nodePath.join(controllerDir, controllerPath.join('/')))[ controllerMethod ] 
  20.     } catch (error) { 
  21.       throw error 
  22.     } 
  23.     // 對讀取到的controllerMethod進行參數(shù)判斷,必須是一個方法 
  24.     assert(typeof controllerMethod === 'function''koa middleware must be a function'
  25.  
  26.     return controllerMethod 
  27.   }) 
  28.   // 最后使用router.register進行注冊 
  29.   router.register(path, methods, middleware) 

源碼的實現(xiàn)過程基本就到這里了。

結(jié)尾

pure-koa-router將路由配置和控制器分離開來,使我們將注意力放在路由配置和控制器的實現(xiàn)上。希望對您能有一點點幫助。

 

責任編輯:武曉燕 來源: 前端胖頭魚
相關(guān)推薦

2023-04-05 14:19:07

FlinkRedisNoSQL

2022-02-02 21:29:39

路由模式Vue-Router

2022-09-09 18:59:28

Vue類型枚舉

2023-05-23 13:59:41

RustPython程序

2013-12-17 09:02:03

Python調(diào)試

2022-12-21 15:56:23

代碼文檔工具

2013-12-31 09:19:23

Python調(diào)試

2021-11-11 08:20:47

Vue 技巧 開發(fā)工具

2021-05-20 08:37:32

multiprocesPython線程

2013-08-22 10:17:51

Google大數(shù)據(jù)業(yè)務(wù)價值

2015-03-16 12:50:44

2015-02-05 13:27:02

移動開發(fā)模塊SDK

2011-01-18 10:45:16

喬布斯

2012-06-08 13:47:32

Wndows 8Vista

2021-09-07 10:29:11

JavaScript模塊CSS

2017-05-22 10:33:14

PythonJuliaCython

2025-09-12 00:00:00

DevToolsJavaScript調(diào)試術(shù)

2012-03-21 10:15:48

RIM越獄

2011-10-24 13:07:00

2015-04-09 11:27:34

點贊
收藏

51CTO技術(shù)棧公眾號

亚洲国产精品狼友在线观看| 欧洲久久久久久| 亚洲综合网在线| 一区二区日韩| 岛国av一区二区三区| 日韩在线三区| 国内毛片毛片毛片毛片| 亚洲少妇自拍| 久久精品男人天堂| 国产女人18毛片水真多18| 成人va天堂| 一区二区三区免费网站| 日本一区二区不卡高清更新| 97超碰资源站| 国产欧美日韩一级| www国产91| 亚洲午夜久久久久久久久红桃 | 国产高清一区日本| 亚洲免费视频在线观看| 婷婷中文字幕在线观看| 日韩影院在线| 亚洲欧美乱综合| 人偷久久久久久久偷女厕| wwwav在线播放| 美国欧美日韩国产在线播放| 91av在线国产| 国产精品二区一区二区aⅴ| 日韩片欧美片| 亚洲人a成www在线影院| 国产免费a级片| 一区在线不卡| 欧美视频三区在线播放| 久久精品视频16| 羞羞的视频在线看| 国产精品色呦呦| 欧美成人免费在线| 人妻少妇一区二区三区| 国产福利精品一区二区| 成人a在线观看| 中文字幕福利视频| 日韩精品1区2区3区| 欧美在线亚洲在线| 亚洲精品1区2区3区| 国内久久视频| 久久99久久亚洲国产| 91传媒免费观看| 日韩精品久久| 三级精品视频久久久久| 91无套直看片红桃在线观看| 精品国产中文字幕第一页| 亚洲精品丝袜日韩| 添女人荫蒂视频| 日韩欧美ww| 亚洲免费av电影| 久久精品国产亚洲av麻豆| 神马香蕉久久| 国产偷亚洲偷欧美偷精品| 伊人久久一区二区三区| 欧美日韩导航| 99亚洲一区二区| 国产视频在线一区二区| free性中国hd国语露脸| 欧美电影在线观看免费| 亚洲精品国产电影| www.免费av| 妖精一区二区三区精品视频| 亚洲欧洲偷拍精品| 亚洲第一综合网| 久久国产电影| 久久国产精品久久精品| 久久黄色免费视频| 国产欧美日本| 国产精品久久久| 91禁在线观看| 国产不卡在线一区| 精品国产一区二区三区四区vr | 国产99久久精品| 国产激情美女久久久久久吹潮| 韩国av免费在线观看| 99精品视频一区二区三区| 久久综合中文色婷婷| 成人在线视频成人| 亚洲精品综合在线| 国产午夜大地久久| 黄色成人小视频| 日韩欧美在线一区二区三区| 国产成人av无码精品| 欧美亚洲精品在线| 欧美成aaa人片在线观看蜜臀| 日本一区二区欧美| 日本不卡中文字幕| 成人看片视频| 国产区在线视频| 亚洲视频每日更新| 成人在线免费观看av| 欧美系列精品| 亚洲精品国产精品国产自| 亚洲AV无码成人精品区明星换面 | 国产情侣免费视频| 国产精品影视在线| 精品亚洲欧美日韩| 国产人妻互换一区二区| 好男人免费精品视频| 亚洲欧美日韩电影| 亚洲精品乱码久久久久久自慰| 9999在线精品视频| 国产婷婷成人久久av免费高清| 久久久久久久久久97| 日韩天天综合| 成人网址在线观看| 加勒比一区二区三区在线| 亚洲精品高清在线| 另类小说色综合| 国产在线播放精品| 久久精品视频在线播放| 亚洲视频 欧美视频| 国产成人午夜电影网| 日韩一区二区三区高清| 超级碰碰不卡在线视频| 欧美人xxxx| 中国美女乱淫免费看视频| 亚洲91久久| 国产精品久久久久久久天堂| 性生活视频软件| 中文字幕亚洲精品在线观看| 9久久9毛片又大又硬又粗| 91精品麻豆| 中文字幕成人精品久久不卡| 国产高潮久久久| 国产成人午夜高潮毛片| 男插女免费视频| 成人久久网站| 亚洲欧美日韩一区二区在线| 日韩xxxxxxxxx| 成人综合婷婷国产精品久久 | 亚洲深夜av| 国产经品一区二区| 在线观看a级片| 91超碰这里只有精品国产| 天天干天天舔天天操| 免费在线播放第一区高清av| 精品国产日本| 日韩影院在线| 亚洲精品视频中文字幕| 亚洲婷婷综合网| 99国产精品99久久久久久| 亚洲精品suv精品一区二区| 国产毛片视频网站| 一区二区三区视频播放| 欧美人在线视频| 国产视频在线观看免费| 国产精品传媒入口麻豆| 亚洲欧美国产中文| 日韩欧美一区免费| 国产一区视频在线播放| 婷婷五月在线视频| 欧美色网站导航| 极品色av影院| 国产曰批免费观看久久久| 9l视频自拍9l视频自拍| av日韩一区| 精品自在线视频| 亚洲国产成人精品一区二区三区| 亚洲永久精品国产| 国产女人18毛片水真多18 | 日韩a在线播放| 久久99视频| 国产精品在线看| 黄视频在线观看网站| 日韩西西人体444www| 久久黄色免费视频| 91美女片黄在线观看| 国产真实乱子伦| 日本在线电影一区二区三区| 91久久国产婷婷一区二区| 18videosex性欧美麻豆| 亚洲精品99999| 免费视频网站在线观看入口| 国产精品国产自产拍高清av王其 | 日本男女交配视频| 欧美电影在线观看完整版| 日韩av电影在线免费播放| √天堂资源地址在线官网| 91麻豆精品国产91久久久久| 国产极品在线播放| 久久先锋影音av| 一本色道久久亚洲综合精品蜜桃| 欧美黄色一区| 玛丽玛丽电影原版免费观看1977| 成人在线观看免费播放| 欧美久久久精品| 日本人妖在线| 91 com成人网| 精品成人av一区二区在线播放| www在线观看黄色| 8v天堂国产在线一区二区| 国产一级av毛片| 国产视频在线观看一区二区三区| 精品亚洲视频在线| 性高湖久久久久久久久| 综合操久久久| 亚洲欧洲色图| 99在线观看视频网站| 99精品国自产在线| 欧美极品少妇xxxxⅹ免费视频| 国产中文字幕在线播放| 精品噜噜噜噜久久久久久久久试看| 91精品国产高清一区二区三密臀| 亚洲色图清纯唯美| 欧洲美一区二区三区亚洲| 国产精品一卡二卡在线观看| 国产精品乱码久久久久| 极品中文字幕一区| 在线丝袜欧美日韩制服| 日韩有码一区| 成人免费视频网站入口| 国产成人77亚洲精品www| 国产91成人在在线播放| 伊人精品影院| 久久精品久久久久| 极品白浆推特女神在线观看 | 午夜久久久久久久| 另类小说一区二区三区| 精品一卡二卡三卡| 亚洲精品孕妇| 日本人妻伦在线中文字幕| 成人区精品一区二区婷婷| 久久青青草综合| 国产精品网在线观看| 91久久爱成人| 四虎精品在线观看| 国产精品久久久久久久久久ktv | 日本精品一区二区三区高清 | 久久只有精品| 国产a级一级片| 日韩午夜黄色| 国产日韩欧美精品在线观看| 欧美va天堂| 2019中文字幕免费视频| 69视频在线观看免费| 麻豆精品一区二区av白丝在线| aa在线免费观看| 亚洲一区自拍| 红桃av在线播放| 亚洲一区区二区| 日韩中文字幕三区| 西西人体一区二区| 日韩精品视频一区二区在线观看| 国产欧美短视频| 玩弄中年熟妇正在播放| 国产农村妇女精品一区二区| 黄色免费福利视频| 亚洲永久视频| 成年人在线看片| 日日夜夜一区二区| 在线免费av播放| 极品少妇xxxx精品少妇偷拍| 中文字幕亚洲影院| 国产一区视频网站| 黄页网站在线看| 成人午夜看片网址| 亚洲啪av永久无码精品放毛片| 99re热视频这里只精品| 精品少妇一区二区三区免费观| 久久久久久久久99精品| 免费成人深夜天涯网站| 亚洲欧洲www| 永久免费看黄网站| 午夜精品福利一区二区蜜股av | 亚洲第一成人网站| 国产午夜亚洲精品羞羞网站| 精品人体无码一区二区三区| 国产精品久久久一本精品| 杨钰莹一级淫片aaaaaa播放| 亚洲午夜在线视频| 日韩熟女一区二区| 欧美老肥妇做.爰bbww| 亚洲AV无码成人片在线观看| 日韩av最新在线| 国产69精品久久app免费版| 日韩在线观看成人| 青青草原av在线| 日韩免费在线看| 国产色99精品9i| 精品国产免费人成电影在线观...| 国产精品午夜一区二区三区| 综合久久国产| 国产欧美另类| 国产又粗又长又爽又黄的视频| 国产98色在线|日韩| 我和岳m愉情xxxⅹ视频| 亚洲日本在线a| 亚洲精品77777| 欧美久久一区二区| 日韩一级片免费在线观看| 尤物九九久久国产精品的分类| 在线观看国产中文字幕| 99riav国产精品| 欧美成人三级在线播放| 成人一级黄色片| 99久久久无码国产精品不卡| 午夜精品一区二区三区免费视频 | 91精品国产综合久久精品麻豆| 成人午夜精品福利免费| 国产亚洲xxx| 国内在线免费视频| 国产伦精品免费视频| 久久99国产精品久久99大师 | 国产69精品久久久久9999apgf| 伊人久久大香线蕉综合网站| 欧洲金发美女大战黑人| 爽爽淫人综合网网站| 精品国产乱码久久久久夜深人妻| 国产精品麻豆视频| 五月天综合激情| 日韩精品一区二区三区中文不卡 | 欧美日韩国产91| 国产一区二区三区影视| 国产一区二区高清视频| 亚洲欧美偷拍自拍| 亚洲少妇久久久| 91视视频在线观看入口直接观看www | 热久久这里只有| 久久夜色电影| 国产激情片在线观看| 精品一区二区在线视频| 免费看日本黄色片| 日韩欧美一区二区三区| 成人无码一区二区三区| 欧美裸身视频免费观看| 粉嫩av国产一区二区三区| 日韩欧美精品一区二区| 久久精品91| 亚洲啪av永久无码精品放毛片 | 天天爽夜夜爽夜夜爽精品| 日韩一区二区三区免费观看| 亚洲成人三级| 国产精品久久久久久久美男 | 91伊人久久大香线蕉| 国产午夜福利一区二区| 精品少妇一区二区三区日产乱码| 日本高清在线观看wwwww色| 国产精品入口尤物| 日韩精品一区二区久久| 欧美三级理论片| 国产日产欧美精品一区二区三区| 在线视频福利一区| 亚洲区欧美区| 人妖粗暴刺激videos呻吟| 亚洲国产wwwccc36天堂| 亚洲精品一区二区三区四区| 欧美精品一本久久男人的天堂| 精品一区二区三区免费看| 日韩视频在线免费播放| 黄色资源网久久资源365| 日韩欧美国产成人精品免费| 在线不卡免费欧美| 国产视频一区二区| 92国产精品久久久久首页 | 欧美日本高清一区| eeuss鲁片一区二区三区| 日本人体一区二区| www.99精品| 69国产精品视频免费观看| 亚洲性生活视频| 欧美三级电影网址| 一级特黄妇女高潮| 成人在线视频一区| 国产又黄又猛又粗又爽| 亚洲夜晚福利在线观看| 九七电影院97理论片久久tvb| 91制片厂免费观看| 国产91露脸合集magnet| 久久视频免费在线观看| 亚洲精品永久免费| 国产91在线播放精品| 天天干天天色天天爽| av亚洲产国偷v产偷v自拍| 成人a v视频| 久久久精品一区| 久久亚州av| 一级黄色特级片| 亚洲主播在线观看| 蜜桃视频在线观看网站| 成人久久精品视频| 最新国产乱人伦偷精品免费网站| 日韩乱码人妻无码中文字幕久久| 欧美日韩中文国产| 牛牛电影国产一区二区| 日本日本精品二区免费| 国产伦精品一区二区三区视频青涩 | 国产视频网址在线| 91久久精品视频| 国产日韩亚洲| 99久久久免费精品| 日韩av最新在线观看| av日韩一区| 成人在线观看黄| 亚洲一区二区三区国产| yourporn在线观看视频|