国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

用 Nuxt.js 搭建一個(gè)服務(wù)端渲染(SSR)應(yīng)用

網(wǎng)絡(luò) 通信技術(shù)
Nuxt.js 是使用 Webpack 和 Node.js 進(jìn)行封裝的基于 Vue 的 SSR 框架,使用它,你可以不需要自己搭建一套 SSR 程序,而是通過其約定好的文件結(jié)構(gòu)和API就可以實(shí)現(xiàn)一個(gè)首屏渲染的 Web 應(yīng)用。

[[397018]]

客戶端渲染(CSR)的含義

客戶端渲染模式下,服務(wù)端把渲染的靜態(tài)文件給到客戶端,客戶端拿到服務(wù)端發(fā)送過來的文件自己跑一遍 JS,根據(jù)  JS運(yùn)行結(jié)果,生成相應(yīng) DOM,然后渲染給用戶。

前端渲染的方式起源于 JavaScript 的興起,ajax 的大熱更是讓前端渲染更加成熟,前端渲染真正意義上的實(shí)現(xiàn)了前后端分離,前端只專注于 UI 的開發(fā),后端只專注于邏輯的開發(fā),前后端交互只通過約定好的API來交互,后端提供 json 數(shù)據(jù),前端循環(huán) json 生成 DOM 插入到頁面中去。

大多數(shù)平臺(tái)采用的是客戶端渲染,查看首頁的源代碼會(huì)發(fā)現(xiàn)代碼里的 html 結(jié)構(gòu)只有簡(jiǎn)單的幾句。當(dāng)請(qǐng)求首頁面時(shí),返回的 body 為空,之后執(zhí)行 js 將 html 結(jié)構(gòu)注入到 body 里,結(jié)合 css 顯示出來;

  1. <body> 
  2.     <div id=app></div> 
  3.     <script type=text/javascript src=/static/js/manifest.9476fbe0d0f0fe7c5038.js></script> 
  4. </body> 

客戶端渲染(CSR)的優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn):網(wǎng)絡(luò)傳輸數(shù)據(jù)量小、減少了服務(wù)器壓力、前后端分離、局部刷新,無需每次請(qǐng)求完整頁面、交互好可實(shí)現(xiàn)各種效果
  • 缺點(diǎn):不利于SEO、爬蟲看不到完整的程序源碼、首屏渲染慢(渲染前需要下載一堆js和css等)

服務(wù)端渲染(SSR)的含義

服務(wù)端渲染: 當(dāng)用戶第一次請(qǐng)求頁面時(shí),由服務(wù)器把需要的組件或頁面渲染成 HTML 字符串,然后把它返回給客戶端。客戶端拿到手的,是可以直接渲染然后呈現(xiàn)給用戶的 HTML 內(nèi)容,不需要為了生成 DOM 內(nèi)容自己再去跑一遍 JS 代碼。使用服務(wù)端渲染的網(wǎng)站,可以說是“所見即所得”,頁面上呈現(xiàn)的內(nèi)容,我們?cè)?html 源文件里也能找到。如下,我們查看網(wǎng)頁源碼的時(shí)候,可以看到全部?jī)?nèi)容。

服務(wù)端渲染(SSR)的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):首屏渲染快、利于SEO、可以生成緩存片段,生成靜態(tài)化文件、節(jié)能(對(duì)比客戶端渲染的耗電)

缺點(diǎn):服務(wù)端壓力較大

什么情況下使用服務(wù)端渲染

通過服務(wù)端渲染的概念以及它的兩個(gè)特點(diǎn):首屏加載速度快、SEO優(yōu)化。我們知道,服務(wù)端渲染其實(shí)就是由瀏覽器做的一些事情,我們放到了服務(wù)端去做。關(guān)于在 server 端還是在 browser 端渲染的選擇,更多的是要看業(yè)務(wù)場(chǎng)景。

常用框架介紹

服務(wù)端渲染框架應(yīng)用有Nuxt.js 、Beidou(北斗) 等。

Nuxt.js 是一個(gè)基于 Vue.js 的輕量級(jí)應(yīng)用框架,可用來創(chuàng)建服務(wù)端渲染 (SSR) 應(yīng)用,也可充當(dāng)靜態(tài)站點(diǎn)引擎生成靜態(tài)站點(diǎn)應(yīng)用,具有優(yōu)雅的代碼結(jié)構(gòu)分層和熱加載等特性。

Beidou(北斗) 是 NodeJS & React 同構(gòu)框架,基于Egg.js開發(fā)。

嘗試了這兩個(gè)框架,對(duì)比覺得Nuxt.js更簡(jiǎn)單易上手,下面就用Nuxt.js搭建一個(gè)服務(wù)端渲染應(yīng)用來介紹下 Nuxt.js 的用法。

創(chuàng)建一個(gè) SSR 項(xiàng)目

為了快速入門,Nuxt.js團(tuán)隊(duì)創(chuàng)建了腳手架工具 create-nuxt-app。

  1. npx create-nuxt-app nuxtdemo 

它會(huì)讓你進(jìn)行一些選擇,比如集成的服務(wù)器端框架、喜歡的UI框架、測(cè)試框架、添加 axios、Eslint、 Prettier 等。根據(jù)項(xiàng)目需求進(jìn)行選擇就好了。這里以服務(wù)器框架選擇None (Nuxt默認(rèn)服務(wù)器),UI框架選擇Element UI為例進(jìn)行講解。

勾選完畢后,它將安裝所有依賴項(xiàng),因此下一步是直接啟動(dòng)項(xiàng)目:

  1. cd nuxtdemo 
  2. npm run dev 

這時(shí)候我們可以看到一個(gè)默認(rèn)簡(jiǎn)易的項(xiàng)目搭建完成啦,如下所示:

接下來,我們來看下整個(gè)項(xiàng)目的目錄結(jié)構(gòu):

  1. ├── assets               未編譯的靜態(tài)資源如 LESS、SASS 或 JavaScript 
  2. ├── components           組件,不會(huì)像頁面組件那樣有 asyncData 方法的特性 
  3. ├── layouts              布局目錄 layouts 用于組織應(yīng)用的布局組件 
  4. ├── middleware           用于存放應(yīng)用的中間件 
  5. ├── nuxt.config.js       用于組織Nuxt.js 應(yīng)用的個(gè)性化配置,以便覆蓋默認(rèn)配置 
  6. ├── package.json         用于描述應(yīng)用的依賴關(guān)系和對(duì)外暴露的腳本接口 
  7. ├── pages                用于組織應(yīng)用的路由及視圖 
  8. ├── plugins              存放需要在根vue.js應(yīng)用實(shí)例化之前需要運(yùn)行的JS插件 
  9. ├── static               用于存放應(yīng)用的靜態(tài)文件(不會(huì)被webpack編譯處理) 
  10. ├── store                應(yīng)用的 Vuex 狀態(tài)樹 

了解了每個(gè)文件的作用,我們來用Nuxt.js搭一個(gè)簡(jiǎn)單的網(wǎng)站吧。用一個(gè)簡(jiǎn)單的網(wǎng)站,講解下 Nuxt.js 的基礎(chǔ)用法。

Nuxt.js 入門

我們用 Nuxt.js 來搭一個(gè)常用的網(wǎng)頁框架,包括公共頭部、底部、動(dòng)態(tài)路由、嵌套路由,錯(cuò)誤頁面,以及在 Nuxt.js 框架下如何引用公共樣式、公共方法、路由校驗(yàn)等。先放上網(wǎng)站成品圖:

下載鏈接:

  1. git clone git@code.aliyun.com:echomaps/nuxtdemo.git 

這是個(gè)簡(jiǎn)易的網(wǎng)站,包括公共頭部跟尾部。首頁是一個(gè)文章列表,采用了動(dòng)態(tài)路由,點(diǎn)進(jìn)去可以跳到對(duì)應(yīng)的文章。人員介紹頁面采用了嵌套路由。在左側(cè)點(diǎn)擊人員,右側(cè)可以相應(yīng)出來人員的信息。好,讓我們來開始吧。

布局

一般網(wǎng)站都有公共的頭部、底部。在之前的項(xiàng)目中,我們都得手動(dòng)去引入頭部、尾部組件。如下:

  1. import header from '@/publicResource/components/header.vue' 
  2. import footer from '@/publicResource/components/footer.vue' 
  3.  
  4. export default { 
  5.     components: { 
  6.         'v-header': header, 
  7.         'v-footer': footer 
  8.     } 
  9. } :

但在 Nuxt.js 中就不用這么麻煩。我們直接在 layout 目錄下創(chuàng)建自定義的布局。修改 layouts/default.vue 文件來擴(kuò)展應(yīng)用的默認(rèn)布局:

  1. <template> 
  2.     <div> 
  3.         <v-header></v-header> 
  4.         <nuxt /> 
  5.         <v-footer></v-footer> 
  6.     </div> 
  7. </template> 
  8.  
  9. <script> 
  10. import Header from '~/components/Header.vue' 
  11. import Footer from '~/components/Footer.vue' 
  12. export default { 
  13.     components: { 
  14.         'v-header': Header, 
  15.         'v-footer': Footer 
  16.     }, 
  17.     data () { 
  18.         return { } 
  19.     } 
  20. </script> 

<nuxt/> 組件用于顯示頁面的主體內(nèi)容。這樣所有的頁面都會(huì)自動(dòng)帶上頭部、尾部,不用特意聲明與引入。如果有些頁面布局不需要頭部、尾部,這也很簡(jiǎn)單,我們只需要告訴頁面使用哪個(gè)自定義布局即可。

  1. <template> 
  2. <!-- Your template --> 
  3. </template> 
  4. <script> 
  5. export default { 
  6.     layout: 'blog' 
  7.     // page component definitions 
  8. </script> 

錯(cuò)誤頁面

我們也可以通過編輯 layouts/error.vue 文件來定制化錯(cuò)誤頁面。這個(gè)布局文件不需要包含 <nuxt/> 標(biāo)簽。可以把這個(gè)布局文件當(dāng)成是顯示應(yīng)用錯(cuò)誤(404,500等)的組件。

  1. <template> 
  2.     <div class="error-wrap"
  3.         <p v-if="error.statusCode === 404" class="info">頁面不存在</p> 
  4.         <p class="info" v-else>應(yīng)用發(fā)生錯(cuò)誤異常</p> 
  5.         <p><nuxt-link to="/">首 頁</nuxt-link></p> 
  6.     </div> 
  7. </template> 
  8.      
  9. <script> 
  10.     export default { 
  11.         props: ['error'], 
  12.     } 
  13. </script> 

基礎(chǔ)路由

Nuxt.js中不用編寫路由配置文件,只需要按照API規(guī)定命名與存放文件,即可自動(dòng)生成路由配置文件。例如,我們需要新增一個(gè)人員介紹頁面users. 只需要在pages下新增users頁面,就可以自動(dòng)生成路由。假設(shè) pages 的目錄結(jié)構(gòu)如下:

  1. pages/ 
  2. --| users.vue 
  3. --| index.vue 

那么,Nuxt.js 自動(dòng)生成的路由配置如下:

  1. router: { 
  2.     routes: [ 
  3.         { 
  4.             name'index'
  5.             path: '/'
  6.             component: 'pages/index.vue' 
  7.         }, 
  8.         { 
  9.             name'users'
  10.             path: '/users'
  11.             component: 'pages/users.vue' 
  12.         } 
  13.     ] 

其它頁面引用的時(shí)候,直接用nuxt-link即可。

  1. <nuxt-link to="/users">人員介紹</nuxt-link> 

同樣地,我們也可以通過框架規(guī)定的命名、存放文件。無需配置路由,可生成動(dòng)態(tài)路由、嵌套路由的配置文件。

動(dòng)態(tài)路由

在 Nuxt.js 里面定義帶參數(shù)的動(dòng)態(tài)路由,需要?jiǎng)?chuàng)建對(duì)應(yīng)的以下劃線作為前綴的 Vue 文件 或 目錄。如下所示:

  1. ├── pages 
  2. ├────── blogs 
  3. │         └─── _blog.vue  博客的詳情頁 
  4. ├────── index.vue         首頁 

假如我們?cè)趇ndex.vue中編寫一個(gè)文章列表并鏈接到對(duì)應(yīng)的文章頁面,如下:

  1. <template> 
  2.     <div class="container"
  3.         <div class="bm-sider"
  4.             {{content}} 
  5.         </div> 
  6.         <div class="bm-con"
  7.             <ul> 
  8.                 <li><nuxt-link to="blogs/1">這是文章1</nuxt-link></li> 
  9.                 <li><nuxt-link to="blogs/2">這是文章2</nuxt-link></li> 
  10.                 <li><nuxt-link to="blogs/3">這是文章3</nuxt-link></li> 
  11.             </ul> 
  12.         </div> 
  13.     </div> 
  14. </template> 

pages/blogs/_blog.vue:

  1. <template> 
  2.     <div class="container"
  3.         這是內(nèi)容{{$route.params.blog}} 
  4.     </div> 
  5. </template> 
  6.  
  7. <script> 
  8.     export default { 
  9.         components: {}, 
  10.         data () { 
  11.             return { } 
  12.         }, 
  13.         validate ({ params }) { 
  14.             return !isNaN(+params.blog) 
  15.         } 
  16.     } 
  17. </script> 

這樣,默認(rèn)首頁的展示如下:

當(dāng)點(diǎn)擊具體文章時(shí)候,展示如下:

我們還可以添加 validate 配置一個(gè)校驗(yàn)方法用于校驗(yàn)動(dòng)態(tài)路由參數(shù)的有效性。如果校驗(yàn)方法返回的值不為 true 或 Promise 中 resolve 解析為 false 或拋出 Error , Nuxt.js 將自動(dòng)加載顯示 404 錯(cuò)誤頁面或 500 錯(cuò)誤頁面。這里我們?cè)O(shè)置只有數(shù)字可以正常訪問,其它路由將跳到錯(cuò)誤頁面。如下所示:

嵌套路由

創(chuàng)建內(nèi)嵌子路由,需要添加一個(gè) Vue 文件,同時(shí)添加一個(gè)與該文件同名的目錄用來存放子視圖組件。在父組件(.vue文件) 內(nèi)增加用于顯示子視圖內(nèi)容。

人員介紹頁面采用了嵌套路由。點(diǎn)擊左側(cè)的人員名單,將出現(xiàn)對(duì)應(yīng)的人員信息,效果如下:

實(shí)現(xiàn)這一效果,我們需要在  pages下添加人員介紹頁面 users.vue:

  1. <template> 
  2.     <div class="container"
  3.         <div class="bm-sider"
  4.             <ul class="players"
  5.                 <li v-for="user in users" :key="user.id"
  6.                     <NuxtLink :to="'/users/'+user.id"
  7.                         {{ user.name }} 
  8.                     </NuxtLink> 
  9.                 </li> 
  10.             </ul> 
  11.         </div> 
  12.         <div class="bm-con"
  13.             <NuxtChild :key="$route.params.id" /> 
  14.         </div> 
  15.     </div> 
  16. </template> 

同時(shí)添加一個(gè)與該文件同名的目錄用來存放子視圖組件。文件如下命名:

  1. ├── users 
  2. │   ├── _id.vue   點(diǎn)擊人員后對(duì)應(yīng)的人員信息組件  
  3. │   └── index.vue 默認(rèn)的視圖組件     
  4. └── users.vue   人員介紹頁面 

users/index.vue:

  1. <template> 
  2.     <h2>Please select an user.</h2> 
  3. </template> 

users/_id.vue:

  1. <template> 
  2.     <div class="player"
  3.         <h1>#{{ number }}</h1> 
  4.         <h2>{{ name }}</h2> 
  5.     </div> 
  6. </template> 
  7.  
  8. <script> 
  9. export default { 
  10.     validate ({ params }) { 
  11.         return !isNaN(+params.id) 
  12.     }, 
  13.     asyncData ({ params, env, error }) { 
  14.         const user = env.users.find(user => String(user.id) === params.id) 
  15.         if (!user) { 
  16.             return error({ message: 'User not found', statusCode: 404 }) 
  17.         } 
  18.         return user 
  19.     }, 
  20.     head () { 
  21.         return { 
  22.             title: this.name 
  23.         } 
  24.     } 
  25. </script> 

這樣,當(dāng)我們未點(diǎn)擊人員時(shí)候,人員介紹默認(rèn)頁面是這樣的:

點(diǎn)擊人員后,人員介紹頁面將展示對(duì)應(yīng)的人員信息內(nèi)容:

全局 css

在 Nuxt 中添加全局 css 也是非常簡(jiǎn)單的。我們?cè)?assets 下新建一個(gè) css 文件 base.css 。然后在 nuxt.config.js 中引用即可。

  1. css: [ 
  2.     '~assets/base.css'
  3. ], 

全局方法

將內(nèi)容注入 Vue 實(shí)例,避免重復(fù)引入,在 Vue 原型上掛載注入一個(gè)函數(shù),所有組件內(nèi)都可以訪問。

  1. import Vue from 'vue' 
  2.  
  3. Vue.prototype.$myInjectedFunction = (string) => console.log("This is an example", string) 

這樣,我們就可以在所有Vue組件中使用該函數(shù)。

  1. export default { 
  2.     mounted(){ 
  3.         this.$myInjectedFunction('test'
  4.     } 

總結(jié)

Nuxt.js 是使用 Webpack 和 Node.js 進(jìn)行封裝的基于 Vue 的 SSR 框架,使用它,你可以不需要自己搭建一套 SSR 程序,而是通過其約定好的文件結(jié)構(gòu)和API就可以實(shí)現(xiàn)一個(gè)首屏渲染的 Web 應(yīng)用。整體上,Nuxt.js 通過各個(gè)文件夾和配置文件的約束來管理我們的程序,而又不失擴(kuò)展性。

 

責(zé)任編輯:武曉燕 來源: 大海我來了
相關(guān)推薦

2023-07-26 10:21:26

服務(wù)端組件客戶端

2019-01-22 15:28:04

Javascriptvue.jsnuxt.js

2022-02-17 07:02:24

開發(fā)

2025-07-04 03:00:00

2017-04-11 16:16:48

HTTPS互聯(lián)網(wǎng)服務(wù)端

2024-01-16 08:05:53

2022-10-08 00:01:00

ssrvuereact

2023-01-26 00:56:41

Nuxt.js存儲(chǔ)庫(kù)開發(fā)

2023-06-14 20:58:05

2024-02-22 13:47:40

2020-04-14 12:53:01

Nuxt.jsVue.js前端

2020-11-03 14:10:29

Vue服務(wù)端渲染前端

2024-01-02 13:58:04

GoREST API語言

2023-09-11 10:53:32

2024-04-01 13:18:15

App架構(gòu)服務(wù)端

2021-04-26 13:20:06

Vue服務(wù)端渲染前端

2024-01-25 09:04:25

2023-03-08 09:06:24

2022-11-17 06:17:41

Nuxt 3.0.0Vue

2023-05-12 07:31:58

NuxtVue.js
點(diǎn)贊
收藏

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

最新亚洲精品| 在线欧美日韩国产| 国产精品二三区| 日本a级片久久久| 在线免费黄色毛片| 亚洲欧洲色图| 精品久久久久一区| 亚洲国产精品www| 男女激情无遮挡| 亚洲精品国产嫩草在线观看| 四虎国产精品免费久久5151| 久久久久久日产精品| 午夜欧美一区二区三区在线播放| 91精品国产欧美一区二区18| 国产欧美中文字幕| 成视频免费观看在线看| 玛雅亚洲电影| 日韩精品三区四区| 欧美日韩午夜精品| 在线看黄色av| av手机免费在线观看| 国产校园另类小说区| 成人观看视频| 91丝袜国产在线播放| 欧美日韩国产乱码电影| 久久久久国产精品免费网站| 欧美激情综合在线| 99久久久久国产精品免费| 在线观看午夜看亚太视频| 久久亚区不卡日本| 精品亚洲va在线va天堂资源站| 成人免费xxxxx在线观看| 初尝黑人巨炮波多野结衣电影| 99久久综合| 91精品国产91久久久久久不卡| 制服丝袜在线91| 久久6免费高清热精品| 国产亚洲成av人片在线观看桃| 亚洲精品国精品久久99热一| 国产精品手机在线| 午夜小视频在线| 99精品热视频| 欧美成人一二三| 欧美精品123| 欧美aaa免费| 欧美在线视频全部完| 欧美成人福利在线观看| 国精一区二区| www.日韩欧美| 青青草免费在线| 蜜臀99久久精品久久久久久软件| 日韩国产中文字幕| 无码中文字幕色专区| 欧美日韩精品| 亚洲第一免费网站| 黄色免费网址大全| 欧美性生活大片免费观看网址| 日韩欧美影院| 国产视频一区在线| 国内外激情在线| 欧美日韩精品在线视频| 红桃一区二区三区| av成人激情| 日本中文不卡| 午夜久久99| 69av视频在线播放| 欧美一区一区| 亚洲成av人影院在线观看| 久久久久久女乱国产| 国产女主播一区| 天堂av在线资源| 精品国产乱码久久久久久虫虫漫画| 嫩模私拍啪啪| 精品中文字幕一区二区| 高清欧美电影在线| 九色综合国产一区二区三区| 亚洲综合电影一区二区三区| 欧美在线视频一区| 亚洲综合色网| 一个色的综合| caoporm免费视频在线| 国产精品视频地址| 影音先锋一区| 手机福利视频欧美| 久久久亚洲综合| 欧美成人免费| 色综合久久六月婷婷中文字幕| 美女的诞生在线观看高清免费完整版中文 | 久久久久久www| 久久精品国产精品亚洲综合| av免费高清观看| 综合色天天鬼久久鬼色| 欧美一区亚洲| 麻豆精品蜜桃| 一区二区国产精品视频| 9l视频自拍蝌蚪9l视频成人| 日日碰狠狠躁久久躁婷婷| www.欧美三级电影.com| 国产精品丝袜久久久久久app| 国产亚洲一卡2卡3卡4卡新区| 黄网站在线观看| 中文精品视频一区二区在线观看| 俺去啦;欧美日韩| 亚洲精品日韩专区silk| 亚洲经典三级| av亚洲一区| 日韩欧美在线一区二区| 亚洲国产精品一区二区尤物区| 77导航福利在线| 四虎永久国产精品| 亚洲资源中文字幕| 国产福利视频在线观看| 国产精品极品美女粉嫩高清在线| 欧美精品影院| 国产成人久久久| 亚洲国产日韩欧美在线| 国产又黄又爽免费视频| 精品一区二区三区的国产在线观看| 91高清视频在线免费观看| 5252色成人免费视频| 精品一区二区电影| 精品电影一区二区三区| 未满十八勿进黄网站一区不卡| 日韩亚洲国产中文字幕欧美| 在线毛片网站| 91精品国产一区二区三区| sese一区| 亚洲成人免费看| 亚洲成人激情社区| 亚洲国产精品久久精品怡红院| 在线天堂中文资源最新版| 欧美大秀在线观看| 久久久9色精品国产一区二区三区| 国产日本韩国在线播放| 岛国av一区二区三区| 欧美寡妇性猛交xxx免费| 91精品国产九九九久久久亚洲| 婷婷丁香综合| 超碰97在线免费| 亚洲福利视频在线| 欧美日韩一区自拍 | 国产精品白丝av嫩草影院| av天在线播放| 青草网在线观看| 亚洲视频第一页| 久久裸体视频| 91成人app| 绯色av一区| 国产午夜精品在线| 欧美精品久久久久久久| 一区二区三区中文在线观看| 高清一区二区三区av| 成人激情av| 欧美aaaaaa| 国产亚洲精品网站| 午夜精品视频在线| 91在线国内视频| 美女18一级毛片一品久道久久综合| 日本欧美在线视频| 色综合久久久久久久久久久| 福利电影一区| 成人免费视频网站在线看| 国产成人精品久久| 国产精品久久久久久久久快鸭 | 精品久久一二三| 蜜臀久久99精品久久久无需会员 | 91日本视频在线| 在线观看视频一区二区欧美日韩| 亚洲第一天堂| 天堂√中文最新版在线| 欧美日本亚洲韩国国产| 久久精品亚洲一区| 高潮在线视频| 国产av熟女一区二区三区| 精品久久久久一区二区国产| 日韩av免费大片| h视频在线观看免费| 亚洲国产成人不卡| 91色中文字幕| 成人网在线播放| 免费成人三级| 久久精品国产精品亚洲色婷婷| 日韩.欧美.亚洲| 三年中文高清在线观看第6集| 91精品免费看| 久久男人av资源网站| 不卡毛片在线看| 亚洲国产91色在线| 男人和女人啪啪网站| 免费大片在线观看www| 91精品国产91久久久久青草| 久久久久久久一区二区三区| 亚洲色图13p| 欧美精品xxxxbbbb| 一区二区三区欧美久久| 亚洲国产精品成人综合| 亚洲婷婷综合色高清在线| 欧美日韩一区二区精品| 欧美韩日一区二区三区| 中文无字幕一区二区三区|