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

五月激情综合色| 成人高清免费观看| 欧美成人小视频| 先锋资源av在线| 成人亚洲网站| 午夜精品久久久| 在线电影看在线一区二区三区| 亚洲福利在线观看视频| 美女国产一区| 久久91精品国产| 日本一级免费视频| a级日韩大片| 欧美日韩在线不卡| 国产精品自拍片| а√天堂资源地址在线下载| 91在线精品秘密一区二区| 成人h猎奇视频网站| 国产奶水涨喷在线播放| 91精品1区| 一本色道久久88综合亚洲精品ⅰ| 老司机av网站| 日韩欧美三区| 色成人在线视频| 亚洲av首页在线| 成人免费在线观看| 26uuu色噜噜精品一区| 91嫩草视频在线观看| 伊人网视频在线| 性xx色xx综合久久久xx| 欧美激情视频三区| 卡通动漫亚洲综合| 成人影视亚洲图片在线| 国产视频在线一区二区| zjzjzjzjzj亚洲女人| 精品国产第一国产综合精品| 欧美三级日本三级少妇99| www.玖玖玖| 91超碰在线| 亚洲自拍欧美精品| 一本色道久久88亚洲精品综合| 99青草视频在线播放视| 久久精品水蜜桃av综合天堂| 久久99久久精品国产| 免费国产黄色片| 国产成+人+日韩+欧美+亚洲| 亚洲综合大片69999| 亚洲视频在线免费播放| 日本aⅴ免费视频一区二区三区 | 亚洲国产精品一区在线观看不卡 | 成人av第一页| 国产成人女人毛片视频在线| 精品人妻av一区二区三区| 国产一区二区精品久久| 成人免费在线视频网址| 国产又爽又黄免费软件| 精品在线你懂的| 国产专区欧美专区| 国产伦精品一区二区三区四区| 琪琪一区二区三区| 成人黄色av播放免费| 国产精品毛片久久久久久久av| 国产在线看一区| 91中文精品字幕在线视频| 99视频在线观看免费| 国产高清精品网站| 国产精品久久久对白| 天天干天天干天天干| 久久综合999| 久久综合一区| 国产h在线观看| 国产精品国产三级国产aⅴ中文 | 久久影院午夜精品| 日韩欧美亚洲成人| 色哟哟精品视频| 大胆国模一区二区三区| 欧美成人video| 一出一进一爽一粗一大视频| 精品99在线| 日韩午夜在线视频| 免费人成年激情视频在线观看| 影院欧美亚洲| 日本欧美在线视频| 亚洲天堂自拍偷拍| 岛国精品在线播放| 日韩av电影免费播放| 黄色网址免费在线观看| 午夜电影网亚洲视频| 国产麻花豆剧传媒精品mv在线| av成人在线观看| 欧美成人a∨高清免费观看| 成人午夜精品无码区| 国产免费av一区二区三区| 久久影视电视剧免费网站| 日本学生初尝黑人巨免费视频| 欧美亚洲在线| 51午夜精品| 日本在线丨区| 亚洲精品videosex极品| 国产91对白刺激露脸在线观看| **欧美日韩在线| 日韩黄在线观看| 99久久99久久精品国产| 免费看的黄色欧美网站| 91夜夜未满十八勿入爽爽影院| 午夜视频在线播放| 中文字幕中文在线不卡住| 黄色一级视频片| 欧美高清一级片| 国产亚洲视频在线观看| 国产真实乱偷精品视频| 久久成人久久鬼色| 欧美日韩精品免费看| 99福利在线| 欧美日韩视频在线第一区| 中国免费黄色片| 亚洲乱码精品| 国产精品久久久久久av下载红粉 | chinese国产精品| 国产成人av电影在线播放| 先锋影音亚洲资源| 在线日韩影院| 亚洲国产天堂久久综合网| 一级黄色片日本| 蜜臀av性久久久久蜜臀av麻豆| 久热这里只精品99re8久| 尤物yw193can在线观看| 欧美日韩极品在线观看一区| 精品人妻无码一区二区三区换脸| 亚洲精品日本| 国产精品久久久久久免费观看| 国产在线激情| 欧美日韩1区2区| 国产亚洲精品熟女国产成人| 亚洲一区欧美二区| 狠狠色狠狠色综合人人| 免费看电影在线| 欧美一区二区视频在线观看| www.99re6| 麻豆国产精品一区二区三区| 日韩aⅴ视频一区二区三区| 日本免费久久| 亚洲欧美日韩直播| 亚洲欧美精品一区二区三区| 成人av一区二区三区| 人妻互换免费中文字幕| 亚洲精品一区在线| 欧美激情视频网站| 黄色av小说在线观看| 亚洲一区二区在线观看视频 | 久久综合九色综合97婷婷女人| 波多野结衣之无限发射| 亚洲国产最新| 国产99视频精品免视看7| 免费黄色片在线观看| 在线视频你懂得一区| 亚洲AV无码成人精品区明星换面| 久久婷婷麻豆| 天堂精品一区二区三区| h1515四虎成人| 日韩中文字幕在线视频| 国产免费的av| 亚洲一区二区欧美激情| 国产又粗又猛又色| 性高湖久久久久久久久| 日韩视频在线播放| 久久女人天堂| 欧美xxxx做受欧美| 日韩一级片免费在线观看| 狠狠色狠狠色综合日日五| 30一40一50老女人毛片| 日韩精品久久久久久| 一区二区不卡视频| 欧美大片91| 日本中文字幕成人| 午夜免费福利在线观看| 日韩精品一区二区三区老鸭窝 | 超碰个人在线| 亚洲国产成人爱av在线播放| 黄瓜视频在线免费观看| 亚洲少妇最新在线视频| 性欧美18—19sex性高清| 久久av在线| 免费成人深夜夜行网站视频| 精品中国亚洲| 国产欧美一区二区三区四区| 欧美6一10sex性hd| 亚洲欧洲成视频免费观看| 国产精品热久久| 岛国精品视频在线播放| 免费成人深夜蜜桃视频| 成人激情综合网站| 91欧美视频在线| 91久久久久| 一区二区三区四区国产| 久久婷婷国产| 国产综合香蕉五月婷在线| 韩国成人二区| 久久久成人精品视频| 麻豆app在线观看| 日韩欧美高清dvd碟片| 国产污视频网站| 亚洲国产日韩精品| 成年人网站在线观看视频| 99re热这里只有精品免费视频| 国产福利在线免费| 午夜一区在线| 欧美图片激情小说| 97精品一区| 欧美成人一区二区在线| 日韩精品一区二区三区中文| 国产精品国产自产拍高清av水多 | 香蕉av福利精品导航| 91ts人妖另类精品系列| 国产亚洲一区字幕| 久久久久国产精品无码免费看| 国产呦萝稀缺另类资源| 日韩欧美黄色大片| 99成人精品| japanese在线播放| 亚洲天天影视网| 一级做a爰片久久| 国产成人ay| 免费在线成人av| 欧美成a人免费观看久久| 97中文在线观看| 精品国产第一国产综合精品| 国产精品自产拍在线观看| 三上悠亚激情av一区二区三区| 国内久久久精品| 免费污视频在线观看| 欧美成人亚洲成人日韩成人| 欧美猛烈性xbxbxbxb| 中文欧美在线视频| 岛国在线大片| 夜夜嗨av色综合久久久综合网| 日韩精品视频在线观看一区二区三区| 精品88久久久久88久久久| 亚洲精品成人电影| 精品欧美乱码久久久久久1区2区| 国产三级伦理片| 欧美一级片在线观看| 一级片在线免费观看视频| 欧美体内she精视频| 亚洲精品国产精品乱码视色| 在线亚洲人成电影网站色www| 97人妻一区二区精品视频| 欧美色视频日本版| www.国产com| 色综合久久中文字幕| 黄色片视频免费| 日本高清无吗v一区| 色婷婷久久综合中文久久蜜桃av| 在线免费观看不卡av| 中文字幕一级片| 91精品久久久久久久99蜜桃| 国产ts人妖调教重口男| 日韩一区二区精品葵司在线| 亚洲成人中文字幕在线| 亚洲电影免费观看高清| 污污的视频网站在线观看| 亚洲精品一区二区在线| 成人福利在线| 久久伊人精品天天| a级片免费在线观看| 91av在线播放视频| 国产精品亚洲d| 91色视频在线观看| 综合激情网...| 久久免费99精品久久久久久| 精品久久网站| 国产免费xxx| 99国产一区| 国产高潮免费视频| 国产成人午夜精品5599| 日韩精品卡通动漫网站| 国产精品乱码一区二区三区软件| 无码人妻精品一区二区三区夜夜嗨| 亚洲午夜羞羞片| 欧美一区二区三区久久久| 555夜色666亚洲国产免| 亚洲av片一区二区三区| 中文字幕亚洲一区二区三区五十路 | 精品久久在线| 国产区二精品视| 日韩一区自拍| 日韩免费视频播放| 蜜芽一区二区三区| 蜜臀av粉嫩av懂色av| 国产精品视频一二| 国产精品第56页| 欧美日韩一区二区三区在线看| 刘玥91精选国产在线观看| 国产亚洲欧美一区| 欧美14一18处毛片| 国产日韩欧美在线播放| 久久男人av| 欧美性受黑人性爽| 老牛影视一区二区三区| 男男受被啪到高潮自述| 久久精品男人的天堂| 久久久精品国产sm调教网站| 欧美午夜一区二区| 熟妇人妻av无码一区二区三区| 日韩在线欧美在线| 中文在线资源| 风间由美久久久| 午夜片欧美伦| 男人插女人下面免费视频| 99国产精品久久久| 69av.com| 欧美老年两性高潮| 国产精品久久久久久久龚玥菲 | 久久精品国产免费观看| 超碰aⅴ人人做人人爽欧美| 999日本视频| 91综合久久| 91看片在线免费观看| 91首页免费视频| 久久精品免费在线| 91精品国产综合久久香蕉的特点 | 久久久久久999| 在线高清欧美| 亚洲一二三区在线| 日韩高清一级片| mm131美女视频| 欧美性猛交xxxx富婆| 日本高清视频www| 欧美激情在线观看视频| 国产一区二区三区精品在线观看 | 91精品国产自产| 亚洲成人av免费| 亚洲精品视频91| 欧美激情一二区| 国产精品国产三级在线观看| 一本色道久久99精品综合| 日本人妖一区二区| 日韩av片在线| 欧美午夜寂寞影院| 成年人视频在线看| 国产精品国产自产拍高清av水多 | 97国产精东麻豆人妻电影| 成人av免费在线| 日本中文字幕免费观看| 亚洲福利视频免费观看| 丁香花在线观看完整版电影| 国产精品福利视频| 亚洲精品视频啊美女在线直播| 成熟妇人a片免费看网站| 亚洲第一成年网| 亚洲av成人精品日韩在线播放| 98精品国产自产在线观看| 日本久久成人网| 毛片一区二区三区四区| 国产欧美精品一区二区三区四区 | 亚洲跨种族黑人xxx| 日韩欧美看国产| 中文字幕中文字幕一区三区| 国产乱对白刺激视频不卡| 欧美xxxx黑人xyx性爽| 精品国产乱码久久久久久图片| 黄色在线网站噜噜噜| 欧美在线播放一区| 麻豆国产精品777777在线| 性色av无码久久一区二区三区| 精品国产电影一区二区| 欧美aa免费在线| 偷拍视频一区二区| 国产呦萝稀缺另类资源| 日本三级午夜理伦三级三| 亚洲欧美成人网| 亚洲男女网站| 亚洲人精品午夜射精日韩 | 亚洲成人中文字幕| 美脚恋feet久草欧美| 亚洲一二三区在线| 懂色中文一区二区在线播放| 少妇太紧太爽又黄又硬又爽| 一区二区三区美女xx视频| 91精品亚洲一区在线观看| 轻点好疼好大好爽视频| 久久久精品tv| 国产福利第一视频| 欧美一级片一区| 91久久电影| 久久人人妻人人人人妻性色av| 欧美在线小视频| 欧美14一18处毛片| 神马影院我不卡午夜| 丁香激情综合五月| 怡红院男人天堂| 性色av一区二区三区| 久久影视一区| 菠萝菠萝蜜网站| 91精品国产手机| 色香欲www7777综合网| 黄色三级中文字幕| 国产精品色呦呦| 丝袜视频国产在线播放| 91免费人成网站在线观看18| 久久成人亚洲|