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

fsx 簡介:適用于 JavaScript 的現(xiàn)代文件系統(tǒng) API

開發(fā) 前端
JavaScript 運行時中的文件系統(tǒng) API 已經(jīng)很久沒有這么好了,這是我試圖做出一個更好的文件系統(tǒng) API 的嘗試。

JavaScript 運行時中的文件系統(tǒng) API 已經(jīng)很久沒有這么好了,這是我試圖做出一個更好的文件系統(tǒng) API 的嘗試。

我們今天擁有的 JavaScript API 比十年前要好得多。考慮一下從 XMLHttpRequest 到 fetch()的轉(zhuǎn)變:開發(fā)者體驗顯著改善,允許我們編寫更簡潔、功能性更強的代碼來完成同樣的事情。異步編程的 promises 的引入允許了這種變化,以及一系列其他變化,使得 JavaScript 更容易編寫。然而,有一個領域幾乎沒有創(chuàng)新:服務器端 JavaScript 運行時的文件系統(tǒng) API。

Node.js:當今文件系統(tǒng) API 的起源

Node.js 最初發(fā)布于 2009 年,隨之誕生了 fs 模塊。fs 模塊是圍繞 Linux 的核心實用程序構(gòu)建的,其中的許多方法都反映了它們的 Linux 靈感,如 rmdir 、 mkdir 和 stat 。為此,Node.js 成功創(chuàng)建了一個低級文件系統(tǒng) API,可以處理開發(fā)人員希望在命令行上完成的任何事情。不幸的是,這就是創(chuàng)新的終點。

Node.js 文件系統(tǒng) API 最大的改變是引入了 fs/promises ,將整個實用程序從基于回調(diào)的方法移動到基于 promise 的方法。較小的增量變化包括實現(xiàn) web 流和確保 reader 也實現(xiàn)了異步迭代器。該 API 仍然使用專有的 Buffer 類來讀取二進制數(shù)據(jù)。(盡管 Buffer 現(xiàn)在是 Uint8Array 的子類,但仍然存在不兼容性,這使得使用 Buffers 有問題。)

即使是 Ryan Dhal 在 Node.js 上的繼任者 Deno,也沒有在文件系統(tǒng) API 上做太多的改進,它基本上遵循了與 Node.js 中的 fs 模塊相同的模式,盡管它使用了 Uint8Arrays,而 Node.js 使用了 Buffer s,并且在不同的地方使用了異步迭代器,但它仍然采用了與 Node.js 相同的低級 API 方法。

只有 Bun,作為服務器端 JavaScript 運行時生態(tài)系統(tǒng)的最新成員,甚至嘗試使用 Bun.file() 來更新文件系統(tǒng) API,這是受 fetch() 的啟發(fā)。雖然我贊賞這種對如何使用文件的重新思考,但當你處理多個文件時,為每個想要處理的文件創(chuàng)建一個新對象可能會很麻煩(當處理數(shù)千個文件時,會有一個巨大的性能損失)。除此之外,Bun 希望你使用 Node.js fs 模塊進行其他操作。

一個現(xiàn)代的文件系統(tǒng) API 會是什么樣子?

在花費數(shù)年時間在維護 ESLint 的同時與 Node.js fs 模塊斗爭之后,我問自己,一個現(xiàn)代的文件系統(tǒng) API 會是什么樣子?

  • 通常情況下會很簡單。至少 80%的時間,我不是讀取文件就是寫入文件,或者檢查文件是否存在,差不多就是這樣,然而這些操作充滿了危險,因為我需要檢查各種東西以避免錯誤或記住額外的屬性(例如 { encoding: "utf8" } )。
  • 錯誤將很少發(fā)生。我對 fs 模塊最大的抱怨就是它拋出錯誤的頻率。在不存在的文件上調(diào)用 fs.stat() 會拋出錯誤,這意味著你實際上需要將每個調(diào)用包裝在 try-catch 中。為什么?對于大多數(shù)應用程序來說,缺少文件并不是不可恢復的錯誤。
  • 行動將是可觀察的。在測試文件系統(tǒng)操作時,我真的只是想要一種方法來驗證我期望發(fā)生的事情是否確實發(fā)生了。我不想與其他一些實用程序建立間諜網(wǎng)絡,這些實用程序可能會也可能不會改變我正在觀察的方法的實際行為。
  • 模擬很容易。我總是驚訝于模擬文件系統(tǒng)操作的難度。最后我只能使用 proxyquire 之類的東西,否則就需要設置迷宮般的模擬,花上一段時間才能弄好。對于文件系統(tǒng)操作來說,這是一個很常見的需求,竟然還沒有解決方案。

帶著這些想法,我開始設計 fsx。

FSX 基礎知識

fsx庫是我圍繞現(xiàn)代高級文件系統(tǒng) API 應該是什么樣子的想法的結(jié)晶。在這一點上,它專注于支持最常見的文件系統(tǒng)操作,而把較少使用的操作(例如 chmod )拋在后面。(我并不是說這些操作在將來不會被添加,但對我來說,從最常見的情況開始,然后以與初始方法相同的謹慎方式構(gòu)建更多的功能是很重要的。)

使用 fsx 運行時包

首先,fsx API 在三個運行時包中可用。這些包都包含相同的功能,但綁定到不同的底層 API。這些包是:

  • fsx-node - Node.js 中 fsx API 的綁定
  • fsx-deno - fsx API 的 Deno 綁定
  • fsx-memory - 適用于任何運行時(包括 web 瀏覽器)的內(nèi)存實現(xiàn)

所以,開始時,你需要使用最適合你用例的運行時包。為了本文的目的,我將專注于 fsx-node ,但相同的 API 存在于所有運行時包中. 所有運行時包都導出一個 fsx 單例,你可以以類似于 fs的方式使用它。

import { fsx } from "node-fsx";

使用 fsx 讀取文件

文件是通過使用返回特定數(shù)據(jù)類型的方法來讀取的:

  • fsx.text(filePath) 讀取給定的文件并返回一個字符串。
  • fsx.json(filePath) 讀取給定的文件并返回一個 JSON 值。
  • fsx.arrayBuffer(filePath) 讀取給定的文件并返回一個 ArrayBuffer 。

這里有一些例子:

// read plain text
const text = await fsx.text("/path/to/file.txt");

// read JSON
const json = await fsx.json("/path/to/file.json");

// read bytes
const bytes = await fsx.arrayBuffer("/path/to/file.png");

如果文件不存在,每個方法都會返回 undefined 而不是拋出錯誤。這意味著您可以使用 if 語句而不是 try-catch,并且可以選擇使用 nullish 合并運算符來指定默認值,如下所示:

// read plain text
const text = (await fsx.text("/path/to/file.txt")) ?? "default value";

// read JSON
const json = (await fsx.json("/path/to/file.json")) ?? {};

// read bytes
const bytes =
  (await fsx.arrayBuffer("/path/to/file.png")) ?? new ArrayBuffer(16);

我覺得這種方法在 2024 年比不斷擔心不存在的文件出錯更有 JavaScript 風格。

使用 fsx 寫文件

要寫文件,調(diào)用 fsx.write() 方法。這個方法接受兩個參數(shù):

  • filePath:string - 寫入的路徑
  • value:string|ArrayBuffer - 寫入文件的值

這里有一個例子:

// write a string
await fsx.write("/path/to/file.txt", "Hello world!");

const bytes = new TextEncoder().encode("Hello world!").buffer;

// write a buffer
await fsx.write("/path/to/file.txt", buffer);

作為額外的好處,fsx.write() 將自動創(chuàng)建任何尚不存在的目錄。這是我經(jīng)常遇到的另一個問題,我認為它應該在現(xiàn)代文件系統(tǒng) API 中“正常工作”。

使用 fsx 檢測文件

要確定一個文件是否存在,使用 fsx.isFile(filePath) 方法,如果給定的文件存在,則返回 true ,否則返回 false 。

if (await fsx.isFile("/path/to/file.txt")) {
  // handle the file
}

與 fs.stat() 不同,如果文件不存在,這個方法會返回 false ,而不是拋出錯誤。

try {
  const stat = await fs.stat(filePath);
  return stat.isFile();
} catch (ex) {
  if (ex.code === "ENOENT") {
    return false;
  }

  throw ex;
}

刪除文件和目錄

fsx.delete() 方法接受一個參數(shù),即要刪除的路徑,并且對文件和目錄都有效。

// delete a file
await fsx.delete("/path/to/file.txt");

// delete a directory
await fsx.delete("/path/to");

fsx.delete() 方法故意過于激進:它會遞歸地刪除目錄,即使它們不是空的(實際上是 rmdir -r)。

fsx 日志

fsx 的一個關鍵特性是,由于其內(nèi)置的日志系統(tǒng),很容易確定哪些方法被調(diào)用,并使用了哪些參數(shù)。要啟用 fsx 實例的日志記錄,請調(diào)用 logStart() 方法并傳入一個日志名稱。當你完成日志記錄時,請調(diào)用 logEnd() 并傳入相同的名稱來檢索日志條目的數(shù)組。

fsx.logStart("test1");

const fileFound = await fsx.isFile("/path/to/file.txt");

const logs = fsx.logEnd("test1");

每個日志條目都是一個包含以下屬性的對象:

  • timestamp - 創(chuàng)建日志的數(shù)字時間戳
  • type - 描述日志類型的字符串
  • data - 與日志相關的附加數(shù)據(jù)

對于方法調(diào)用,日志條目的 type 是 call ,而 data 屬性是一個對象,包含:

  • methodName - 被調(diào)用的方法的名稱
  • args - 傳遞給方法的參數(shù)數(shù)組。

對于前面的例子, logs 將包含一個條目:

// example log entry

{
    timestamp: 123456789,
    type: "call",
    data: {
        methodName: "isFile",
        args: ["/path/to/file.txt"]
    }
}

了解這一點后,您可以輕松地在測試中設置日志記錄,然后檢查調(diào)用了哪些方法,而無需使用第三方間諜庫。

使用 fsx impls

fsx 的設計是這樣的,抽象的核心功能包含在 fsx-core 包中,每個運行時包都擴展了該功能,使用特定于運行時的文件系統(tǒng)操作實現(xiàn),這些操作被包裝在一個稱為 impl 的對象中。

  1. fsx 單例
  2. 一個構(gòu)造函數(shù),可以創(chuàng)建 fsx 的另一個實例(比如 fsx-node 中的 NodeFsx )
  3. 一個構(gòu)造函數(shù),可以創(chuàng)建運行時包的 impl 實例(如 node-fsx 中的 NodeFsxImpl )。

這可以讓您只使用所需的功能。

fsx 中的 base impls 和 active impls

每個 fsx 實例都有一個 base 類實現(xiàn),它定義了 fsx 對象在生產(chǎn)環(huán)境中的行為。active impls 是在任何給定時間使用的實現(xiàn),它可能也是 base 類實現(xiàn),也可能不是。你可以調(diào)用 fsx.setImpl()來改變 active impls。

import { fsx } from "fsx-node";

fsx.setImpl({
  json() {
    throw Error("This operation is not supported");
  },
});

// somewhere else

await fsx.json("/path/to/file.json"); // throws error

在此示例中,基本實現(xiàn)被替換為自定義實現(xiàn),該自定義實現(xiàn)在調(diào)用 fsx.json() 方法時會引發(fā)錯誤。這使得您可以輕松地模擬測試方法,而不必擔心它可能如何影響整個包含的 fsx 對象。

交換 impls 進行測試

假設你有一個名為 readConfigFile() 的函數(shù),它使用了來自 node-fsx 的 fsx 單例來讀取名為 config.json 的文件,當測試這個函數(shù)時,你不想讓它實際訪問文件系統(tǒng),你可以把 fsx 的實現(xiàn)換成 fsx-memory 提供的內(nèi)存文件系統(tǒng)實現(xiàn),如下:

import { fsx } from "fsx-node";
import { MemoryFsxImpl } from "fsx-memory";
import { readConfigFile } from "../src/example.js";
import assert from "node:assert";

describe("readConfigFile()", () => {

    beforeEach(() => {
        fsx.setImpl(new MemoryFsxImpl());
    });

    afterEach(() => {
        fsx.resetImpl();
    });

    it("should read config file", async () => {

        await fsx.write("config.json", JSON.stringify({ found: true });

        const result = await readConfigFile();

        assert.isTrue(result.found);
    });

});

這就是使用 fsx 在內(nèi)存中模擬整個文件系統(tǒng)是多么容易。您不必像模塊加載器攔截那樣擔心導入所有測試模塊的順序,也不需要經(jīng)歷包含模擬庫的過程以確保一切正常。您只需更換測試的 impl,然后再重置它。通過這種方式,您可以以更高性能且不易出錯的方式測試文件系統(tǒng)操作。

命名注意事項

不幸的是,在我發(fā)布 fsx 的時候,亞馬遜發(fā)布了一款名為 FSx[2] 的產(chǎn)品。如果它獲得任何支持,我可能會重命名這個庫,歡迎提出建議。

希望得到結(jié)論和反饋

長期以來,我們一直在使用 JavaScript 運行時中笨拙的低級文件系統(tǒng) API。fsx 庫是我嘗試重新想象現(xiàn)代文件系統(tǒng) API 的樣子,如果我們花一些時間關注最常見的情況,并改進 JavaScript 語言目前提供的人體工學設計。通過從頭開始重新思考,我認為 fsx 為我們提供了一種更愉快的文件系統(tǒng)體驗。

基礎庫只關注我最常用的方法,但我計劃在了解和思考用例后添加更多方法。您今天就可以試用,歡迎反饋。我很想知道你的想法!

責任編輯:華軒 來源: 獨立開發(fā)者張張
相關推薦

2018-10-24 10:43:13

2021-03-18 10:46:00

Linux監(jiān)控工具命令

2022-03-14 08:00:00

KoolKits工具開發(fā)

2009-11-29 17:10:01

NetgearLinux系統(tǒng)路由器

2022-09-02 17:47:46

Linux筆記應用

2022-11-17 10:45:46

Linux文件備份系統(tǒng)

2010-04-30 15:51:48

Unix系統(tǒng)

2023-11-30 08:55:15

LinuxLibreOffic

2011-12-08 09:43:56

虛擬化vmwareVMware Fusi

2020-05-14 17:54:54

查看器 Linux 系統(tǒng)

2019-08-15 15:48:30

Linux系統(tǒng)軟件

2012-09-12 14:40:19

Lustre文件系統(tǒng)

2020-10-10 09:19:58

JavaScript開發(fā)技術(shù)

2021-12-13 12:56:26

Linux瀏覽器

2011-05-13 09:56:23

Ubuntu 11.0

2013-02-21 10:13:25

2021-11-03 10:14:31

PowerEdge

2018-06-13 09:00:00

2023-03-08 12:35:59

綜合布線

2019-08-23 11:00:00

云計算網(wǎng)絡安全
點贊
收藏

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

无码人妻丰满熟妇区五十路百度| 加勒比在线一区二区三区观看| 亚洲黄色网址大全| 国产美女视频一区二区 | 人妻精品久久久久中文| 另类一区二区三区| 亚洲777理论| 少妇免费毛片久久久久久久久 | 日韩精品免费在线| 九九热99视频| 亚洲精品永久免费视频| 亚洲人成伊人成综合网小说| 久久国产精品 国产精品| 在线观看视频二区| 国产日韩欧美一区二区三区在线观看| www.欧美免费| www.狠狠爱| 狠狠一区二区三区| 91精品一区二区三区久久久久久| 97在线播放视频| 亚洲卡一卡二| 国产精品国产a| 欧美成人蜜桃| 欧美特黄一级视频| 国产精品中文有码| 国产日韩欧美在线播放| 成人公开免费视频| 9国产精品视频| 色综合老司机第九色激情| 99精品欧美一区二区| 噜噜噜天天躁狠狠躁夜夜精品 | 91传媒理伦片在线观看| 亚洲日日夜夜| 欧美日韩一区在线| 午夜dv内射一区二区| 性欧美ⅴideo另类hd| 国产精品天干天干在观线 | 91久久国产| 在线观看亚洲区| 亚洲精品一区二区三区影院忠贞| 亚洲色图美女| 亚洲欧美日韩国产中文专区| 私密视频在线观看| 成人自拍在线| 亚洲精品一区二区在线观看| 在线免费看污网站| 91精品亚洲一区在线观看| 在线观看视频一区二区| 一级黄色香蕉视频| 欧美va在线观看| 在线视频综合导航| 亚洲男人天堂色| 美女色狠狠久久| 欧美男生操女生| 国产成人美女视频| 国产色99精品9i| 日韩小视频在线观看专区| 日本少妇一区二区三区| 亚洲一区二区三区中文字幕在线观看| 日韩一级片网站| 9191在线视频| 欧美jizz19性欧美| 亚洲精品中文字幕有码专区| 国产女主播喷水高潮网红在线| 蜜桃一区二区三区| 这里只有精品在线观看| 欧美美女性生活视频| 综合av在线| 韩国19禁主播vip福利视频| 日韩精品视频免费播放| 午夜影院日韩| 国产精品劲爆视频| 91精品国产综合久| 国产宾馆实践打屁股91| 国产在线精品二区| yw193.com尤物在线| 国产精品久久久久久久久免费丝袜 | 亚洲经典一区| 97香蕉超级碰碰久久免费软件| 久久不卡免费视频| 蜜桃视频免费观看一区| 91手机在线观看| 欧洲一级在线观看| 中文字幕中文字幕中文字幕亚洲无线| 国产精品av免费观看| 国产盗摄——sm在线视频| 欧美亚洲一区二区三区四区| 欧美精品色视频| 日韩在线你懂的| 俺也去精品视频在线观看| 国产乡下妇女做爰| 蜜桃视频在线一区| 国产在线精品二区| 免费a在线看| 狠狠爱在线视频一区| 国产九九热视频| 精品网站aaa| 色爱av美腿丝袜综合粉嫩av| 日本一二三区不卡| 蜜臀精品久久久久久蜜臀 | 成人黄色免费视频| 久久久精品黄色| 91网站在线观看免费| 日韩三区在线| 亚洲第一精品自拍| www.xx日本| 久久久精品网| 国产精品加勒比| 日本中文在线| 色综合视频一区二区三区高清| 五月天丁香花婷婷| 中日韩免视频上线全都免费| 欧美精品成人91久久久久久久| 国产精品成人无码| 99精品久久只有精品| 国产日韩第一页| 91精品影视| 日韩精品在线观看视频| 日韩欧美中文字幕视频| 免费av网站大全久久| 欧美日韩亚洲一区二区三区四区| brazzers在线观看| 日韩欧美综合一区| 亚洲天堂av中文字幕| 久久亚洲电影| 免费av在线一区二区| 国产经典三级在线| 日韩欧美中文字幕一区| 欧洲第一无人区观看| 免费观看在线综合色| 日韩av一级大片| 三级成人黄色影院| 亚洲欧美制服第一页| 久久午夜免费视频| 不卡影院免费观看| 久久精品无码中文字幕| 午夜免费欧美电影| 欧美精品videosex性欧美| www.看毛片| 亚洲精品国产高清久久伦理二区| 污网站在线免费| 国产精品久久久久久麻豆一区软件| 国产精品精品久久久| 黄视频在线播放| 在线视频欧美精品| 中文字幕第4页| 日韩黄色片在线观看| 日韩伦理一区二区三区av在线| 日韩性xxx| 中文字幕日韩欧美| 中文字幕日本人妻久久久免费 | 亚洲精品视频网上网址在线观看| 日本少妇吞精囗交| 97久久超碰精品国产| 欧美精品一区免费| 久久综合影院| 国产美女久久精品香蕉69| 在线免费看黄网站| 欧美一区二区三区免费| 激情五月婷婷在线| www.爱久久.com| 国产黄色特级片| 日本精品三区| 亚洲精品欧美极品| 丰满的护士2在线观看高清| 精品视频在线观看日韩| 神马久久久久久久| 国产精品污网站| 一卡二卡三卡四卡五卡| 国产主播一区| 鲁片一区二区三区| 国产一区二区色噜噜| 欧美成人性色生活仑片| 色综合视频在线| 欧美偷拍一区二区| 老湿机69福利| 91免费看视频| 911福利视频| 最新国产乱人伦偷精品免费网站| 日韩经典在线视频| 欧美激情三级| 欧美中文字幕第一页| 三级外国片在线观看视频| 欧美成人性福生活免费看| 毛片视频网站在线观看| 亚洲欧洲国产日韩| 中文字幕在线播放一区| 免费成人av在线播放| 日本手机在线视频| 日韩欧美视频| 国语精品免费视频| 欧美激情啪啪| 18久久久久久| 色欧美激情视频在线| 日韩欧美亚洲国产另类| 久久精品视频5| 樱花影视一区二区| 国产精品免费无码| 成人免费视频视频在线观看免费| 天天操天天爽天天射| 亚洲黄色免费| av电影一区二区三区| 国产欧美高清视频在线| 丁香五月网久久综合| 亚洲男男av| 奇米4444一区二区三区| 亚洲wwwww| 久久精品电影一区二区| 欧美zzoo| 亚洲国产欧美自拍| 99久久亚洲精品日本无码 | 亚洲黄色在线免费观看| 欧美三级中文字幕| 欧美日韩综合在线观看| 亚洲欧美aⅴ...| 少妇愉情理伦三级| 久久伊人蜜桃av一区二区| jjzz黄色片| 国产一区二区三区av电影| 91插插插插插插插插| 久久国产精品久久久久久电车| 国产高清不卡无码视频| 欧美电影一区| 日本不卡一区二区三区在线观看 | 波多野结衣激情| 超碰成人久久| 日本一区高清在线视频| 在线日韩一区| 热re99久久精品国99热蜜月| 亚洲成aⅴ人片久久青草影院| 国产精品久久国产三级国电话系列 | a天堂中文在线| 夜夜嗨av色一区二区不卡| 日本在线视频1区| 日韩av在线影院| 日本美女一级片| 亚洲第一国产精品| 日日夜夜精品免费| 亚洲国产精品久久久久秋霞不卡| 国产美女裸体无遮挡免费视频| 欧美日韩国产免费| 怡红院男人的天堂| 欧美人牲a欧美精品| 亚洲天堂手机版| 欧美日本在线看| 国产麻豆91视频| 日韩一区二区高清| 开心激情综合网| 亚洲国产精彩中文乱码av在线播放| 国产91麻豆视频| 日韩精品免费在线观看| 青青色在线视频| 一色桃子一区二区| 香港伦理在线| 久久精品视频导航| 欧美人与牲禽动交com| 欧美精品激情blacked18| 精灵使的剑舞无删减版在线观看| 久久久久五月天| 亚洲福利影院| 国产精品嫩草视频| 国产精品一区二区美女视频免费看 | 久久久日本电影| 在线观看特色大片免费视频| 国产aⅴ夜夜欢一区二区三区| 成人黄色视屏网站| 亚洲伊人一本大道中文字幕| 99香蕉久久| 欧美亚洲另类久久综合| 日韩久久电影| 大胆欧美熟妇xx| 久久精品主播| 深爱五月综合网| 91色.com| 在线观看黄网址| 亚洲成人免费观看| 免费在线不卡av| 日韩欧美黄色影院| 久久久久久青草| 啊v视频在线一区二区三区| 国产网红在线观看| 国产91在线播放九色快色| 97色婷婷成人综合在线观看| 国产精品一区二区三区在线| 国产一区二区在线| 福利网在线观看| 亚洲一区二区三区高清| 777一区二区| xnxx国产精品| 中文字幕在线有码| 一本色道久久综合精品竹菊| 99久久99久久久精品棕色圆| 日韩电视剧免费观看网站| 日韩黄色影院| 日韩av大片免费看| 亚洲性视频在线| 亚洲在线播放电影| 国产精品日韩久久久| 毛片毛片毛片毛片毛| 久久久亚洲午夜电影| 丝袜美腿小色网| 91久久一区二区| 五月婷婷综合久久| 欧美成人免费在线观看| 欧美aaa视频| 国产一区免费在线| 亚洲区综合中文字幕日日| 一本久道中文无码字幕av| 国产99精品视频| 亚洲 欧美 变态 另类 综合| 一本高清dvd不卡在线观看| 亚洲精品久久久久久久久久| 中文字幕精品国产| 久久爱91午夜羞羞| 国产一区二区三区四区五区在线| 91成人国产| 亚洲综合日韩欧美| 久久精品视频网| 西西44rtwww国产精品| 88在线观看91蜜桃国自产| 国产二区视频在线观看| 国产91精品不卡视频| 亚洲综合影院| 国产又粗又大又爽的视频| 青青草精品视频| 无码人妻丰满熟妇啪啪欧美| 黄色成人av在线| 三级在线观看网站| 欧美激情一区二区三区成人| 日韩三级久久| www国产无套内射com| 国产毛片精品一区| 爱爱视频免费在线观看| 欧美精品在欧美一区二区少妇| 精品999视频| 国产精品h在线观看| 久久99视频| 国产视频在线视频| 久久精品一区蜜桃臀影院| 日韩综合在线观看| 亚洲网站视频福利| 成人免费av电影| 五月婷婷综合色| 久久草av在线| 麻豆明星ai换脸视频| 日韩欧美一区二区免费| 欧美xxxx黑人又粗又长| 国产99在线免费| 国产欧美日韩一级| 91精品人妻一区二区| 在线视频综合导航| 999国产在线视频| 成人黄色网免费| 欧美成人69| 69亚洲乱人伦| 欧美性猛交xxxx免费看漫画| 蜜桃视频在线免费| 国产一区二区丝袜| 亚洲精彩视频| 欲求不满的岳中文字幕| 一本色道久久综合亚洲aⅴ蜜桃 | 国产精品嫩草影院com| 一区二区国产欧美| 精品综合久久久久久97| 国产亚洲成av人片在线观黄桃| 日本欧美黄色片| 国产欧美日韩视频在线观看| 97caocao| 欧美国产日韩中文字幕在线| 老汉色老汉首页av亚洲| 久久黄色免费看| 亚洲欧美另类小说| 亚洲av无码国产精品久久不卡| 97在线视频免费看| 残酷重口调教一区二区| 三级网站免费看| 日韩人体视频一二区| 精品国产白色丝袜高跟鞋| 国产一区二区高清不卡 | 婷婷一区二区三区| av免费在线一区二区三区| wwwxx欧美| 日本少妇一区二区| 青青草手机在线视频| 亚洲美女中文字幕| 久久在线观看| 91蝌蚪视频在线观看| 亚洲色图19p| 免费毛片在线| 91九色蝌蚪成人| 久久亚洲视频| 久操视频免费在线观看| 伊人伊成久久人综合网小说| 中文字幕视频精品一区二区三区| 日日摸日日碰夜夜爽av| 一区二区三区在线视频免费| 第三区美女视频在线| 国产亚洲福利社区| 狠狠色丁香久久婷婷综| 色老头一区二区|