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

Node.js新手上路——動手擼一個靜態資源服務器

開發 前端
本文介紹了一個簡單的靜態資源服務器的實例項目,希望能給Node.js初學者帶來幫助。

 簡介

本文介紹了一個簡單的靜態資源服務器的實例項目,希望能給Node.js初學者帶來幫助。項目涉及到http、fs、url、path、zlib、process、child_process等模塊,涵蓋大量常用api;還包括了基于http協議的緩存策略選取、gzip壓縮優化等;最終我們會發布到npm上,做成一個可以全局安裝、使用的小工具。麻雀雖小,五臟俱全,一想是不是還有點小激動?話不多說,放碼過來。

文中源碼地址在附錄中。

可先行體驗項目效果:

安裝:npm i -g here11

任意文件夾地址輸入命令:here

step1 新建項目

因為我們要發布到npm上,所以我們先按照國際慣例,npm init,走你!在命令行可以一路回車,有些配置會在后面的發布步驟中細說。

目錄結構如下:

bin文件夾存放我們的執行代碼,web作為一個測試文件夾,里面放了些網頁。

step2 碼碼

step2.1 雛形

靜態資源服務器,通俗講就是我們在瀏覽器地址欄輸入形如“http://域名/test/index.html”的一個地址,服務器從根目錄下的對應文件夾找到index.html,讀出文件內容并返回給瀏覽器,瀏覽器渲染給用戶。 

  1. const http = require("http");  
  2. const url = require("url");  
  3. const fs = require("fs");  
  4. const path = require("path");  
  5. const item = (name, parentPath) => {  
  6.     let path = parentPath = `${parentPath}/${name}`.slice(1);  
  7.     return `<div><a href="${path}">${name}</a></div>`;  
  8.  
  9. const list = (arr, parentPath) => {  
  10.     return arr.map(name => item(name, parentPath)).join("");  
  11.  
  12. const server = http.createServer((req, res) => {  
  13.     let _path = url.parse(req.url).pathname;//去掉search  
  14.     let parentPath = _path 
  15.     _path = path.join(__dirname, _path);  
  16.     try {  
  17.         //拿到路徑所對應的文件描述對象  
  18.         let stats = fs.statSync(_path);  
  19.         if (stats.isFile()) {  
  20.             //是文件,返回文件內容  
  21.             let file = fs.readFileSync(_path);  
  22.             res.end(file);  
  23.         } else if (stats.isDirectory()) {  
  24.             //是目錄,返回目錄列表,讓用戶可以繼續點擊  
  25.             let dirArray = fs.readdirSync(_path);  
  26.             res.end(list(dirArray, parentPath));  
  27.         } else {  
  28.             res.end();  
  29.         }  
  30.     } catch (err) {  
  31.         res.writeHead(404, "Not Found");  
  32.         res.end();  
  33.     }  
  34. });  
  35. const port = 2234 
  36. const hostname = "127.0.0.1" 
  37. server.listen(port, hostname, () => {  
  38.     console.log(`server is running on http://${hostname}:${port}`);  
  39. }); 

以上這段code就是我們的核心代碼了,已經實現了核心功能,本地運行即可看到返回了文件目錄,點擊文件名便可瀏覽對應的網頁、圖片、文本啦。

step2.2 優化

功能實現了,但是我們可以在某些方面做做優化,提升實用性,順便多學習幾個api。

1. stream

我們目前讀取文件返回給瀏覽器的操作是通過readFile一次性讀出來,一次性返回,這樣當然可以實現功能,但我們有更好的方式——用stream(流)進行IO操作。stream并不是node.js獨有的概念,而是操作系統最基本的一種操作形式,所以理論上講,任何一門server端語言都實現了stream的API。

為什么講用stream是一種更好的方式?因為一次性讀取、操作大文件,內存和網絡是吃不消的,尤其在用戶訪問量比較大的情況下更為明顯;而借助stream可以讓數據流動起來,一點一點操作,從而提升性能。代碼修改如下: 

  1. if (stats.isFile()) {  
  2.     //是文件,返回文件內容  
  3.     //在createServer時傳入的回調函數被添加到了"request"事件上,回調函數的兩個形參req和res  
  4.     //分別為http.IncomingMessage對象和http.ServerResponse對象  
  5.     //并且它們都實現了流接口  
  6.     let readStream = fs.createReadStream(_path);  
  7.     readStream.pipe(res);  

編碼實現非常簡單,在需要返回文件內容時,我們創建了一個可讀流,并把它直接導向了res對象。

2. gzip壓縮

gzip壓縮帶來的性能(用戶訪問體驗)提升是非常明顯的,開啟gzip壓縮,可以大幅減小js、css等文件資源的體積,提升用戶訪問速度。作為一個靜態資源服務器,我們當然要加上這個功能。

node中有一個zlib的模塊,提供了很多壓縮相關的api,我們就用它來實現: 

  1. const zlib = require("zlib");  
  2. if (stats.isFile()) {  
  3.     //是文件,返回文件內容  
  4.     res.setHeader("content-encoding", "gzip");   
  5.     const gzip = zlib.createGzip();  
  6.     let readStream = fs.createReadStream(_path);  
  7.     readStream.pipe(gzip).pipe(res);  

有了stream的使用經驗,我們再看這段代碼的時候就好理解多了。把文件流先導向gzip對象,再導向res對象。此外,使用gzip壓縮的時候還需要注意一點:需要把響應頭里的content-encoding設置為gzip。否則瀏覽器會把一堆亂碼展示出來。

3. http緩存

緩存這個東西讓人又愛又恨,用得好,可以提升用戶體驗,減輕服務器壓力;用得不好,可能就會面臨各種各樣奇奇怪怪的問題。一般來講瀏覽器http緩存分為強緩存(非驗證性緩存)和協商緩存(驗證性緩存)。

什么叫強緩存呢?強緩存是由cache-control和expires兩個首部字段控制的,現在一般用cache-control。比如我們設置了cache-control: max-age=31536000的響應頭,就是告訴瀏覽器這個資源有一年的緩存期,一年內不用向服務端發送請求,直接從緩存中讀取資源。

而協商性緩存是使用if-modified-since/last-modified、if-none-match/etag等首部字段,配合強緩存,在強緩存沒有命中(或告知瀏覽器no-cache)的時候,向服務器發送請求,確認資源的有效性,決定從緩存中讀取或是返回新的資源。

有了以上概念,我們便可以制定我們的緩存策略: 

  1. if (stats.isFile()) {  
  2.     //是文件,返回文件內容   
  3.      //增加判斷文件是否有改動,沒有改動返回304的邏輯     
  4.     //從請求頭獲取modified時間  
  5.     let IfModifiedSince = req.headers["if-modified-since"];  
  6.     //獲取文件的修改日期——時間戳格式  
  7.     let mtime = stats.mtime;  
  8.     //如果服務器上的文件修改時間小于等于請求頭攜帶的修改時間,則認定文件沒有變化  
  9.     if (IfModifiedSince && mtime <= new Date(IfModifiedSince).getTime()) {  
  10.         //返回304  
  11.         res.writeHead(304, "not modify");  
  12.         return res.end();  
  13.     }  
  14.     //第一次請求或文件被修改后,返回給客戶端新的修改時間  
  15.     res.setHeader("last-modified", new Date(mtime).toString());  
  16.     res.setHeader("content-encoding", "gzip");  
  17.     let reg = /\.html$/;  
  18.     //不同的文件類型設置不同的cache-control  
  19.     if (reg.test(_path)) {  
  20.         //我們對html文件執行每次必須向服務器驗證資源有效性的策略  
  21.         res.setHeader("cache-control", "no-cache");  
  22.     } else {  
  23.         //我們對其余的靜態資源文件采取強緩存策略,一個月內無需向服務器索取  
  24.         res.setHeader("cache-control", `max-age=${1 * 60 * 60 * 24 * 30}`);  
  25.     }    
  26.     //執行gzip壓縮  
  27.     const gzip = zlib.createGzip();  
  28.     let readStream = fs.createReadStream(_path);  
  29.     readStream.pipe(gzip).pipe(res);  

這樣一套緩存策略在現代前端項目體系下還是比較合適的,尤其是對于spa應用來講。我們希望index.html能夠保證每次向服務器驗證是否有更新,而其余的文件統一本地緩存一個月(自己定);通過webpack打包或其他工程化方式構建之后,js、css內容如果發生變化,文件名相應更新,index.html插入的manifest(或script鏈接、link鏈接等)清單會更新,保證用戶能夠實時得到新的資源。

當然,緩存之路千萬條,適合業務才重要,大家可以靈活制定。

4. 命令行參數

作為一個在命令行執行的工具,怎么能不象征性的支持幾個參數呢? 

  1. const config = {  
  2.     //從命令行中獲取端口號,如果未設置采用默認  
  3.     port: process.argv[2] || 2234,  
  4.     hostname: "127.0.0.1"  
  5.  
  6. server.listen(config.port, config.hostname, () => {  
  7.     console.log(`server is running on http://${config.hostname}:${config.port}`);  
  8. }); 

這里就簡單的舉個栗子啦,大家可以自由發揮!

5. 自動打開瀏覽器

雖然沒太大卵用,但還是要加。我就是要讓你們知道,我加完之后什么樣,你們就是什么樣 :-( duang~ 

  1. const exec = require("child_process").exec;  
  2. server.listen(config.port, config.hostname, () => {  
  3.     console.log(`server is running on http://${config.hostname}:${config.port}`);  
  4.     exec(`open http://${config.hostname}:${config.port}`);  
  5. }); 

6. process.cwd()

用process.cwd()代替__dirname。

我們最終要做成一個全局并且可以在任意目錄下調用的命令,所以拼接path的代碼修改如下: 

  1. //__dirname是當前文件的目錄地址,process.cwd()返回的是腳本執行的路徑  
  2. _path = path.join(process.cwd(), _path); 

step3 發布

基本上我們的代碼都寫完了,可以考慮發布了!

step3.1 package.json

得到一個配置類似下面所示的json文件: 

  1.  
  2.     "name": "here11",  
  3.     "version": "0.0.13",  
  4.     "private": false,  
  5.     "description": "a node static assets server",  
  6.     "bin": {  
  7.         "here": "./bin/index.js"  
  8.     },  
  9.     "repository": {  
  10.         "type": "git",  
  11.         "url": "https://github.com/gww666/here.git"  
  12.     },  
  13.     "scripts": {  
  14.         "test": "node bin/index.js"  
  15.     },  
  16.     "keywords": [  
  17.         "node"  
  18.     ],  
  19.     "author": "gw666",  
  20.     "license": "ISC"  

其中bin和private較為重要,其余的按照自己的項目情況填寫。

bin這個配置代表的是npm i -g xxx之后,我們運行here命令所執行的文件,“here”這個名字可以隨意起。

step3.2 聲明腳本執行類型

在index.js文件的開頭加上:#!/usr/bin/env node

否則linux上運行會報錯。

step3.3 注冊npm賬號

勉強貼一手命令,還不清楚自行百度:

沒有賬號的先添加一個,執行:

npm adduser

然后依次填入

Username: your name

Password: your password

Email: yourmail

npm會給你發一封驗證郵件,記得點一下,不然會發布失敗。

執行登錄命令:

npm login

執行發布命令:

npm publish

發布的時候記得把項目名字、版本號、作者、倉庫啥的改一下,別填成我的。

還有readme文件寫一下,好歹告訴別人咋用,基本上和文首所說的用法是一樣的。

好了,齊活。

step3.4

還等啥啊,趕快把npm i -g xxx 這行命令發給你的小伙伴啊。什么?你沒有小伙伴?告辭!

本文項目源碼地址:https://github.com/gww666/here

 

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2022-06-05 13:52:32

Node.jsDNS 的原理DNS 服務器

2011-06-17 10:29:04

Nodejavascript

2020-10-29 16:00:03

Node.jsweb前端

2010-08-16 15:04:00

DIV入門

2010-07-26 11:19:19

Perl入門手冊

2010-07-29 17:11:03

Flex

2020-10-12 08:06:28

HTTP 服務器證書

2010-08-23 11:41:13

路由器IOS

2010-08-10 13:52:31

路由器IOS簡介

2010-06-25 15:41:49

IPX SPX協議

2010-05-28 14:25:20

SVN基本操作

2009-10-22 09:59:50

CLR程序集教程

2019-02-15 10:49:37

Node.jsweb服務器

2018-10-22 17:57:28

汽車互聯

2011-10-25 09:28:30

Node.js

2020-08-07 10:40:56

Node.jsexpress前端

2010-05-17 17:54:44

Subversion1

2010-08-16 09:19:04

DIVCSS

2011-07-26 11:07:08

JavaScript

2010-05-26 13:32:16

SVN簡易使用手冊
點贊
收藏

51CTO技術棧公眾號

欧美xxxx在线观看| 亚洲h动漫在线| 国产在线观看91精品一区| 婷婷伊人五月天| 加勒比久久高清| 欧美日韩一区小说| 97超碰在线人人| 77导航福利在线| 国产精品99久| 国产国语videosex另类| 少妇影院在线观看| 国产99亚洲| 欧美丰满少妇xxxxx高潮对白 | 肉丝美足丝袜一区二区三区四| 国产精品电影| 亚洲色图制服丝袜| 欧美日韩日本网| 国产成人三级在线播放| 日韩av在线播放中文字幕| 久久久久久久久综合| 99在线视频免费| 日韩在线黄色| 欧美v国产在线一区二区三区| 黑人粗进入欧美aaaaa| 肉体视频在线| 亚洲精品视频在线看| 日本在线观看一区| 视频在线不卡| 不卡的电视剧免费网站有什么| 91老司机在线| 中文字幕av久久爽| 日日摸夜夜添夜夜添亚洲女人| 欧美乱大交xxxxx| 懂色av蜜臀av粉嫩av永久| 丝袜美腿综合| 亚洲激情电影中文字幕| 四川一级毛毛片| 伊人久久综合网另类网站| 在线观看中文字幕不卡| 日韩在线一级片| √8天堂资源地址中文在线| 亚洲精品久久久蜜桃| 一道精品一区二区三区| а天堂8中文最新版在线官网| 99视频超级精品| 国内精品一区二区| 囯产精品久久久久久| 国产成人免费在线观看不卡| 亚洲一区二区三区sesese| 国产精品自产拍| 久久99久久99| 成人免费午夜电影| 国产一区二区三区视频免费观看| 麻豆国产精品一区二区三区| 国产精品影片在线观看| 一卡二卡在线视频| 久久99国产精品免费网站| 成人a级免费视频| 国产精品欧美激情在线| 国产精品自拍av| www.久久久| 天天摸天天干天天操| 9l国产精品久久久久麻豆| 久久av一区二区三区亚洲| 日本不卡视频一区二区| 国产日韩精品一区二区三区在线| 亚洲国产精品一区在线观看不卡| 日韩美女网站| 亚洲免费av观看| 亚洲熟妇无码一区二区三区导航| 狼人综合视频| 欧美视频在线不卡| 超碰在线超碰在线| 欧美成人午夜77777| 亚洲性生活视频| 美国黄色片视频| 欧美三级小说| 庆余年2免费日韩剧观看大牛| 久久久久久亚洲av无码专区| 麻豆精品一二三| caoporn国产精品免费公开| 三级网站在线看| 国产调教视频一区| 久久免费一级片| 麻豆国产在线| 欧美乱妇23p| 久久久久久久无码| 久久裸体网站| 97热在线精品视频在线观看| 久久精品视频2| 国产福利一区在线| 精品国产电影| av在线网址观看| 日韩欧美高清在线视频| 污视频网址在线观看| 国产欧美啪啪| 久久精品2019中文字幕| 国产超碰人人爽人人做人人爱| 免费视频一区二区| 国产一区二区不卡视频在线观看| 国产黄在线观看免费观看不卡| 亚洲精品老司机| 天天爽天天爽夜夜爽| 精品人人人人| 免费99精品国产自在在线| 69国产精品视频免费观看| 狠狠色综合色综合网络| 欧美日韩喷水| а√天堂8资源中文在线| 欧美疯狂性受xxxxx喷水图片| 添女人荫蒂视频| 欧美日本久久| 国产一区二区丝袜| 国产在线视频网站| 午夜av电影一区| 性色av浪潮av| 日本不卡免费一区| 欧美专区中文字幕| 亚洲精品久久久狠狠狠爱 | 亚洲va久久久噜噜噜久久狠狠| 午夜羞羞小视频在线观看| 欧美群妇大交群的观看方式| 大地资源二中文在线影视观看| 激情六月综合| 114国产精品久久免费观看| av大片在线播放| 色综合天天综合网天天看片| 美女黄色一级视频| 亚洲午夜极品| 91九色在线观看| 老司机福利在线视频| 欧美色爱综合网| 波多野结衣片子| 久久动漫亚洲| 欧美动漫一区二区| 中文字幕色婷婷在线视频| 精品国产伦一区二区三区观看体验 | 激情网站五月天| 噜噜噜狠狠夜夜躁精品仙踪林| 欧美激情第6页| 午夜精品一区二区三| 亚洲欧美日韩中文播放| www.五月天色| 欧美成人久久| 国产精品亚洲不卡a| 欧美人与禽性xxxxx杂性| 日韩三级免费观看| 精品爆乳一区二区三区无码av| 国产盗摄精品一区二区三区在线 | 日韩和的一区二区| 欧美一级爽aaaaa大片| 玛雅亚洲电影| 这里只有精品视频在线| 亚洲天堂中文在线| 亚洲欧美日韩在线不卡| 毛片毛片毛片毛片毛| 欧美福利电影在线观看| 国产精品久久九九| 伊人久久综合一区二区| 国产亚洲成av人片在线观看桃| 国产精品xxxxxx| 国产精品灌醉下药二区| 北条麻妃亚洲一区| aa国产精品| 日韩精品电影网站| 日韩三级成人| 久久久久久成人| 日本免费一区二区三区最新| 欧美最猛性xxxxx直播| 一区二区三区影视| 成人av在线资源网| 欧美性猛交xxx乱久交| 91一区在线| 国产精品免费在线| 台湾佬中文娱乐久久久| 久久久av亚洲男天堂| 丁香六月天婷婷| 色噜噜狠狠色综合中国| 天天做夜夜爱爱爱| 成人av先锋影音| 国产视频在线视频| 欧美成人亚洲| 欧美日韩亚洲综合一区二区三区激情在线| 欧美影视资讯| 色综合老司机第九色激情| 国产成人亚洲综合91| www.com在线观看| 午夜精品视频在线观看| x88av在线| 国产精品中文字幕日韩精品| 欧美成人三级在线视频| 国产一区二区三区电影在线观看 | 亚洲深夜福利在线| 国产视频一区二区三区四区五区| 五月天国产精品| 美女三级黄色片| wwwwxxxxx欧美| 四虎1515hh.com| 日韩av一级片| 午夜免费福利小电影| 成人综合专区| 好吊妞www.84com只有这里才有精品| 国产一区二区三区朝在线观看| 欧美国产日韩一区二区在线观看| 精品美女视频在线观看免费软件| 日韩精品中文字幕一区二区三区| 亚洲 日本 欧美 中文幕| 亚洲综合在线五月| 欧美xxxooo| 久久精品亚洲麻豆av一区二区 | av免费观看网址| 色8久久人人97超碰香蕉987| 中文字幕第28页| 日韩一区在线免费观看| 亚洲av无码国产精品麻豆天美| 国产成人自拍在线| 天天看片天天操| 日韩高清欧美激情| 成人av一级片| 国内自拍一区| 国产免费xxx| 99成人在线视频| 色综合666| 蜜桃成人av| 精品伦理一区二区三区| 中文字幕日韩在线| 成人做爽爽免费视频| 国产黄色一区| 国产精品久久久久久久久借妻 | 色哟哟无码精品一区二区三区| 国内精品免费**视频| 亚洲欧美视频二区| 日韩电影在线观看网站| 亚洲人成无码www久久久| 一区二区三区四区五区在线 | 日本.亚洲电影| 国产成人一区二区三区电影| 中文字幕资源网在线观看免费| 777精品视频| 亚洲女同av| 国产www精品| 亚州一区二区三区| 日韩av不卡在线| 唐人社导航福利精品| 国产精品激情自拍| 成人午夜sm精品久久久久久久| 国产精品久久久久免费a∨大胸| 亚洲天堂一区二区| 国产精品久久久久久超碰| 成人精品高清在线视频| 国产精品中文字幕在线| 国产精品亚洲综合在线观看| 亚洲iv一区二区三区| 精品视频国内| 国产精品乱子乱xxxx| 日韩在线麻豆| 日本不卡一区| 五月天激情综合网| 国产青草视频在线观看| 999亚洲国产精| 日韩精品一区二区三区色欲av| 日韩高清不卡在线| 亚洲av无日韩毛片久久| 高清成人在线观看| 中文字幕在线免费看线人| 国产欧美日本一区视频| 91传媒免费观看| 天天影视网天天综合色在线播放| 国产高清中文字幕| 欧美日韩国产一区二区三区地区| 国产色视频在线| 亚洲国产天堂久久综合网| 福利片在线看| 欧美老女人在线视频| 日韩激情电影免费看| 国产精品日韩在线一区| 清纯唯美激情亚洲| 欧美黄色直播| 亚洲国产不卡| 狠狠干 狠狠操| 久久精品国产99国产| 麻豆tv在线观看| 国产午夜亚洲精品不卡| 青草草在线视频| 色老汉一区二区三区| 99免费在线视频| 亚洲视频在线视频| 人妖欧美1区| 国产精品久久婷婷六月丁香| h视频久久久| 亚洲欧美精品| 99在线观看免费视频精品观看| 国内国产精品天干天干| av一区二区三区| 亚洲综合视频网站| 日韩欧美主播在线| www三级免费| 视频在线观看一区二区| 超级白嫩亚洲国产第一| 91免费精品国偷自产在线| 亚洲免费成人av在线| 国产激情在线看| 日韩高清不卡一区| 五月婷婷综合在线观看| 亚洲精品国产视频| 一区二区久久精品66国产精品| 亚洲国产精品中文| 人妖欧美1区| 91久久国产综合久久91精品网站 | 一级黄色免费网站| 日韩视频永久免费| 无遮挡的视频在线观看 | 日本一区二区三区四区在线视频 | 日韩亚洲欧美中文三级| 91在线不卡| 日韩**中文字幕毛片| 日韩免费电影在线观看| 国产一二三区在线播放| 九色|91porny| 任你操精品视频| 在线观看日韩高清av| 免费av在线电影| 欧美一级淫片丝袜脚交| 国内精品偷拍| av在线观看地址| 国产成人99久久亚洲综合精品| 91精品一区二区三区蜜桃| 欧美无砖砖区免费| 成人精品一区二区三区校园激情| 国产69久久精品成人看| 精品视频在线你懂得| 久久国产精品网| www.视频一区| 日韩久久精品视频| 亚洲精品www久久久| 成人ssswww在线播放| 动漫精品视频| 亚洲调教视频在线观看| 亚洲丝袜在线观看| 亚洲综合免费观看高清在线观看| 性欧美8khd高清极品| 欧美乱大交做爰xxxⅹ性3| 综合伊人久久| 黄色大片在线免费看| 91在线一区二区三区| 国产成人在线免费视频| 日韩精品久久久久久久玫瑰园| 女厕盗摄一区二区三区| 免费一区二区三区在在线视频| 欧美亚洲网站| 亚洲欧美va天堂人熟伦| 欧美午夜片在线看| 麻豆最新免费在线视频| 91社区国产高清| 国产精品mm| 一级国产黄色片| 欧美亚洲高清一区二区三区不卡| 日本中文字幕在线观看| 成人免费福利在线| 亚洲午夜91| 少妇真人直播免费视频| 欧美日韩欧美一区二区| 麻豆传媒在线观看| 成人午夜影院在线观看| 国产情侣一区| 五月天精品在线| 欧美一级高清片在线观看| h片视频在线观看| 欧美日韩亚洲一区二区三区在线观看| 日本美女一区二区| 欧美日韩大片在线观看| 亚洲国产日韩欧美在线图片| 欧美123区| 久久久久久久香蕉| 26uuu国产电影一区二区| 中文字幕乱码视频| 欧美激情视频在线免费观看 欧美视频免费一 | 欧美视频一区二区三区…| 搞黄视频免费在线观看| 91免费高清视频| 亚洲一区二区三区免费在线观看 | 亚洲人午夜射精精品日韩| 国产精品久久久久av| 欧美精品成人| 性欧美一区二区| 精品嫩草影院久久| www.成人在线视频| 免费特级黄色片| 日本一区二区久久| 可以免费观看的毛片| 国产精品入口日韩视频大尺度| 欧美欧美天天天天操| 在线观看国产精品一区| 精品国产乱码久久久久久图片 | 日韩电影免费在线| 国产亚洲成人av| xxxxx91麻豆| 亚洲国产欧美日韩在线观看第一区 | 亚洲网站免费| caopor在线视频|