欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

Node.js入門指南:從JavaScript運行環(huán)境到后端服務(wù)開發(fā)基礎(chǔ)

Node.js入門指南:從JavaScript運行環(huán)境到后端服務(wù)開發(fā)基礎(chǔ) 1. 從瀏覽器到服務(wù)器JavaScript 開發(fā)者為什么要學(xué) Node.js很多同學(xué)學(xué)完 JavaScript 基礎(chǔ)之后會陷入一個很常見的困惑JS 明明是在瀏覽器里跑的怎么突然又冒出來一個 Node.js它到底是不是一門新語言我要不要學(xué)學(xué)了能干嘛先直接把結(jié)論擺在這里Node.js 不是一門新語言它就是一個用 C 寫的 JavaScript 運行環(huán)境。瀏覽器能跑 JavaScript是因為瀏覽器內(nèi)置了 V8 引擎來解析和執(zhí)行 JS 代碼Node.js 則是把 V8 引擎從瀏覽器里抽了出來裝進了一個獨立的程序里讓 JavaScript 脫離瀏覽器也能運行而且還能像 PHP、Java 一樣去寫后端服務(wù)。這套 JavaScript 基礎(chǔ)課程講到這里正是從純前端切入后端的關(guān)鍵節(jié)點。之前我們寫的所有 JS 代碼都是跑在瀏覽器里的操作的也是頁面上的 DOM、事件、Ajax。但從這一篇開始你會發(fā)現(xiàn)同樣的語法換一個運行環(huán)境就能去處理文件、連接數(shù)據(jù)庫、寫 HTTP 服務(wù)接口。我見過太多人卡在這個轉(zhuǎn)型節(jié)點上。有人覺得后端是另一套完全不同的知識體系心里發(fā)怵有人一上來就去背 Express 的 API結(jié)果遇到問題完全不知道從哪里排查。其實 Node.js 后端入門遠(yuǎn)沒有想象中那么嚇人關(guān)鍵是先建立起一個完整的認(rèn)知框架它是什么、為什么需要它、它和瀏覽器端 JS 到底有什么不同、它自己獨特的運行機制又是什么。這一篇我就按照我做全棧項目時帶新人的思路把 Node.js 后端基礎(chǔ)拆成幾個核心模塊來拆解。你不需要一次性記住所有 API但學(xué)完之后一定要能獨立從零搭建一個簡單的后端服務(wù)并且能理解它每一步在干什么。這篇內(nèi)容適合基礎(chǔ)篇最后幾章在讀的人也適合已經(jīng)會寫前端但一直沒入門后端的同學(xué)參考。2. 環(huán)境準(zhǔn)備Node.js 安裝與驗證2.1 安裝前先理解版本選擇不管是在 Windows、macOS 還是 Linux 上裝 Node.js本質(zhì)上做的事情都一樣把 Node.js 運行時和 npm 包管理器裝到你電腦上。npm 是 Node.js 自帶的包管理工具后面裝 Express、axios 這些第三方庫全靠它。官網(wǎng)下載地址是 nodejs.org打開之后你會發(fā)現(xiàn)有兩個版本一個寫著 LTS一個寫著 Current。我給你的建議非常簡單粗暴永遠(yuǎn)裝 LTS 版本。LTS 全稱 Long Term Support是長期維護版本生產(chǎn)環(huán)境中大家都在用穩(wěn)定性經(jīng)過了大盤驗證。Current 版本雖然會有一些新特性但迭代太快今天裝完可能過兩周就要升級對于學(xué)習(xí)和做項目來說完全沒必要追新。還有一個很多人會踩的坑去百度搜“node.js 下載”點進一些第三方下載站結(jié)果下載下來是一個被篡改過的安裝包輕則帶一堆捆綁軟件重則有人往里面塞惡意代碼。Node.js 的官方域名就是 nodejs.org認(rèn)準(zhǔn)這個就行盡量不要去第三方站點。2.2 Windows 上完整安裝步驟Windows 上安裝比較簡單下載 .msi 后綴的安裝包雙擊運行一路 Next。但有幾個地方要特別注意。安裝到選擇組件那一步時默認(rèn)會勾選 “Add to PATH”這個必須保留。它的作用是把 Node.js 的可執(zhí)行文件路徑加進系統(tǒng)環(huán)境變量只有這樣才能在命令行里直接敲 node 命令。見過有人手滑把這步取消掉裝完以后在終端里怎么敲 node 都提示“不是內(nèi)部或外部命令”。安裝路徑我建議不要裝在 C 盤默認(rèn)路徑下尤其是你后面要裝很多全局包的時候。比如我會裝到 D:\nodejs這樣重裝系統(tǒng)或者清理空間時不會把環(huán)境一起帶走。當(dāng)然如果你是初學(xué)者這一步也可以先默認(rèn)路徑等后面熟悉了再遷移也不遲。安裝完成之后打開命令行工具Win R輸入 cmd回車輸入下面兩條命令驗證node -v npm -v如果分別輸出了 v20.x.x 和 10.x.x 這樣的版本號那就說明安裝成功了。注意 node -v 前面輸出的一定是 v 開頭如果報錯說找不到命令大概率是 PATH 沒配對重新裝一次把 Add to PATH 勾上就行。2.3 macOS 上的安裝差異macOS 上裝 Node.js 有兩種常規(guī)方式一種是像 Windows 一樣去官網(wǎng)下載 .pkg 安裝包雙擊安裝另外一種是用 Homebrew 命令安裝brew install node我個人更推薦用 Homebrew。原因很簡單后續(xù)升級方便一條 brew upgrade node 就能搞定不用重新去官網(wǎng)下載。而且 Homebrew 裝出來的目錄結(jié)構(gòu)比較統(tǒng)一后面配合 nvmNode 版本管理器管理多版本也更順手。裝完之后同樣用 node -v 和 npm -v 驗證。如果在 macOS 上提示 command not found可能是你的終端會話沒有刷新環(huán)境變量關(guān)掉終端重新開一個或者執(zhí)行 source ~/.zshrc 再試一次。2.4 第一個 Hello World驗證運行環(huán)境安裝驗證通過之后我們來跑第一個 Node.js 程序。新建一個文件夾比如叫 node-basic在文件夾里新建一個文件 hello.js用任意編輯器VS Code 最好輸入下面代碼console.log(Hello, Node.js!);保存之后在命令行里先 cd 到這個文件夾然后執(zhí)行node hello.js如果終端輸出了 Hello, Node.js!恭喜你Node.js 環(huán)境已經(jīng)完全可用了。這一步雖然簡單但它確認(rèn)了一件很重要的事情JavaScript 現(xiàn)在不僅能在瀏覽器里跑也能作為一個獨立程序在操作系統(tǒng)里直接運行了。3. 運行機制拆解Node.js 與瀏覽器端 JS 的核心差異3.1 全局對象完全不同在瀏覽器里我們寫 alert、document、window、localStorage 這些 API它們都是瀏覽器提供的。window 是全局對象下面掛著各種方法和屬性。但是在 Node.js 里沒有 window沒有 document也沒有 alert。Node.js 的全局對象是 global在較新版本中也可以使用 globalThis。同時 Node.js 提供了一些瀏覽器里沒有的全局對象最常用的就是 __dirname當(dāng)前文件所在目錄的絕對路徑、__filename當(dāng)前文件的絕對路徑還有 console 和 setTimeout、setInterval 這些。這一塊最典型的認(rèn)知沖突是很多同學(xué)在剛接觸 Node.js 時下意識敲一個 alert(hello)結(jié)果直接報錯 ReferenceError: alert is not defined。原因很簡單——alert 是瀏覽器提供的彈窗 APINode.js 沒有界面自然也就沒有這個 API。你只需要記住一個核心原則Node.js 是服務(wù)端運行環(huán)境它提供的 API 主要是文件、網(wǎng)絡(luò)、進程相關(guān)的能力瀏覽器提供的 API 主要面向頁面交互和渲染。3.2 模塊化加載的差異瀏覽器中的 JavaScript在 ES6 出現(xiàn)之前都是通過多個 script 標(biāo)簽引入共享全局作用域。這會導(dǎo)致一個典型問題變量污染。a.js 里定義了一個變量b.js 里可能就不小心把它覆蓋了。Node.js 天生就是模塊化的。每個 JS 文件就是一個獨立的模塊模塊內(nèi)的變量默認(rèn)是私有的外部訪問不到。想要暴露出去用 module.exports想要引入別的文件用 require。這是 CommonJS 規(guī)范Node.js 原生的模塊系統(tǒng)。舉個非常直觀的例子。我在 common.js 里定義兩個函數(shù)function add(a, b) { return a b; } function multiply(a, b) { return a * b; } module.exports { add, multiply };然后新建 index.js 引入它const common require(./common.js); console.log(common.add(2, 3)); // 5 console.log(common.multiply(2, 3)); // 6這個模式就非常像后端架構(gòu)里常用的“分層”思路——文件之間職責(zé)分離互不干擾。這對于寫大型項目尤其重要?;叵胍幌略跒g覽器里寫原生 JS 的經(jīng)驗文件之間變量全暴露在全局一次不小心的重命名就能引發(fā)難以排查的 Bug。Node.js 的模塊機制從根源上把這個風(fēng)險降到了零。3.3 事件循環(huán)Node.js 為什么“非阻塞”講到 Node.js 的機制事件循環(huán)是繞不開的概念。但我不打算展開講得太深初學(xué)者只需要掌握一個核心差異Node.js 的 I/O 操作默認(rèn)是異步非阻塞的。什么叫 I/O簡單說就是讀文件、寫文件、網(wǎng)絡(luò)請求、數(shù)據(jù)庫查詢這些需要等待外部設(shè)備響應(yīng)的操作。在同步的編程模型里代碼執(zhí)行到“讀文件”這一行時整個程序會卡住等文件讀取完畢再繼續(xù)往下走。這種模式在服務(wù)器場景下很致命如果同時有 100 個用戶請求但每個請求都要排隊等一個慢速的磁盤操作那 100 個用戶就得串行等待體驗極差。Node.js 的處理方式是事件驅(qū)動。它把耗時操作扔給底層線程池去處理自己則繼續(xù)往下執(zhí)行后面的代碼。等那個耗時操作完成了再通過事件回調(diào)來通知 JavaScript 層。這樣一來同一時刻可以同時發(fā)起多個 I/O 操作程序不會因為等待某個操作完成而阻塞??匆幌聦嶋H例子用 setTimeout 演示異步回調(diào)的執(zhí)行次序console.log(開始); setTimeout(() { console.log(定時器執(zhí)行); }, 0); console.log(結(jié)束);你可能以為“定時器執(zhí)行”會輸出在“結(jié)束”之后因為 setTimeout 延遲是 0 毫秒。但實際上輸出結(jié)果是開始 結(jié)束 定時器執(zhí)行原因就是 setTimeout 的回調(diào)函數(shù)不會立即執(zhí)行而是被放進了“宏任務(wù)隊列”等當(dāng)前代碼執(zhí)行棧清空之后事件循環(huán)才會去取出它來執(zhí)行。這個現(xiàn)象在學(xué)習(xí)前端 JavaScript 時會遇到在后端開發(fā)里更是家常便飯。你寫代碼時必須徹底接受“回調(diào)不一定會按書寫順序執(zhí)行”這件事否則后面寫文件讀取、數(shù)據(jù)庫查詢時就會寫出各種隱藏 Bug。3.4 手動實現(xiàn)一個簡單的事件驅(qū)動機制為了讓你徹底理解事件驅(qū)動的思路我們不用任何黑科技純粹用 JavaScript 實現(xiàn)一個簡化版的事件發(fā)射器class SimpleEventEmitter { constructor() { this.events {}; } on(eventName, callback) { if (!this.events[eventName]) { this.events[eventName] []; } this.events[eventName].push(callback); } emit(eventName, data) { const callbacks this.events[eventName] || []; callbacks.forEach(callback callback(data)); } } const emitter new SimpleEventEmitter(); emitter.on(userLogin, (user) { console.log(${user.name} 登錄成功); }); emitter.emit(userLogin, { name: 張三 });這個代碼雖然簡單但它展示了 Node.js 中 EventEmitter 的核心思想先注冊事件對應(yīng)的回調(diào)函數(shù)然后在某個時機觸發(fā)事件事件對應(yīng)的所有回調(diào)依次執(zhí)行。理解了這段代碼后面你再看到 fs.readFile、http.createServer 這些 API 的回調(diào)函數(shù)就不會覺得它們是什么魔法了——它們都是把“做完事情后要做的事”作為回調(diào)傳了進去。4. 核心模塊實戰(zhàn)模塊系統(tǒng)與 npm 使用詳解4.1 文件操作模塊fs 玩轉(zhuǎn)讀寫fs 是 Node.js 內(nèi)置的文件系統(tǒng)模塊做任何和后端相關(guān)的開發(fā)都離不開它。它同時提供了同步和異步兩套 API比如 readFileSync 和 readFile。初學(xué)者很容易被這兩套搞暈我建議你暫時把同步版本當(dāng)作理解用的輔助實際寫代碼盡量用異步版本因為異步版本不會阻塞事件循環(huán)。先看同步讀取的寫法方便理解邏輯const fs require(fs); try { const data fs.readFileSync(./data.txt, utf8); console.log(data); } catch (err) { console.error(讀取文件失敗:, err.message); }這里有兩個細(xì)節(jié)值得注意。第一個是編碼參數(shù) utf8如果不傳fs.readFileSync 返回的是一個 Buffer 對象也就是二進制數(shù)據(jù)直接 console.log 會輸出一堆十六進制數(shù)字。第二個是 try-catch。同步方法一旦出錯會直接拋出異常所以必須用 try-catch 包住否則程序直接崩潰退出。再來看異步版本也就是實際開發(fā)中更常用的方式const fs require(fs); fs.readFile(./data.txt, utf8, (err, data) { if (err) { console.error(讀取文件失敗:, err.message); return; } console.log(data); });異步 API 的回調(diào)函數(shù)遵循 Node.js 的“錯誤優(yōu)先”約定第一個參數(shù)永遠(yuǎn)是可能的錯誤對象第二參數(shù)才是正常數(shù)據(jù)。這是一種約定俗成的風(fēng)格你會發(fā)現(xiàn) fs 模塊里幾乎所有異步 API 都是這樣設(shè)計的。寫回調(diào)時一定要先檢查 err 是否存在再處理數(shù)據(jù)這是寫 Node.js 代碼的基本素養(yǎng)。文件寫入也有同步和異步兩種。寫入文件更常用的是 fs.writeFileconst fs require(fs); const content 這是要寫入的內(nèi)容; fs.writeFile(./output.txt, content, utf8, (err) { if (err) { console.error(寫入失敗:, err.message); return; } console.log(寫入成功); });需要注意writeFile 默認(rèn)是覆蓋寫入會直接把文件原來的內(nèi)容全部替換成新內(nèi)容。如果你要做日志追加得用 fs.appendFileconst logLine new Date().toISOString() 用戶登錄\n; fs.appendFile(./log.txt, logLine, (err) { if (err) { console.error(追加失敗:, err.message); } });這一小段代碼對應(yīng)了一個非常實際的后端場景日志收集。真實的后端服務(wù)里每個請求的記錄、錯誤信息的追蹤很多都是從這種簡單的 appendFile 開始的。4.2 路徑模塊path 處理跨平臺路徑問題path 模塊你可能覺得它不重要但實際上它幾乎是 fs 的固定搭檔。直接用字符串拼接路徑在 Windows 上用反斜杠 \在 macOS 和 Linux 上用正斜杠 /這就會導(dǎo)致同一個代碼在不同系統(tǒng)上行為不一致在 Windows 上正常在 Linux 上就報路徑找不到。path.join 的作用就是幫你把路徑片段拼成當(dāng)前系統(tǒng)支持的正確格式const path require(path); const fullPath path.join(__dirname, data, user.json); console.log(fullPath); // Windows 輸出類似 D:\node-basic\data\user.json // macOS/Linux 輸出類似 /Users/xxx/node-basic/data/user.json另外一個很常用的方法是 path.resolve它會返回一個絕對路徑。和 path.join 的區(qū)別是resolve 會把相對路徑解析成相對于當(dāng)前工作目錄的絕對路徑。還有一個 path.extname 可以取文件后綴名const path require(path); console.log(path.extname(index.html)); // .html console.log(path.extname(app.js)); // .js4.3 npm前端轉(zhuǎn)后端最容易忽略的一環(huán)剛開始用 Node.js 時很多人的疑問是別人代碼里的 express、axios、jsonwebtoken 這些庫是怎么來的答案就是通過 npm 安裝的。npm 的全稱是 Node Package Manager是 Node.js 自帶的包管理器。它的作用就相當(dāng)于手機上的應(yīng)用商店——想用什么庫一條命令就裝好還能自動處理依賴關(guān)系。最常用的幾個命令你只需要先記住這幾個npm init -y # 初始化項目生成 package.json 文件 npm install express # 在當(dāng)前項目中安裝 express 包 npm install -g nodemon # 全局安裝 nodemon npm uninstall express # 卸載某個包npm install 裝完之后項目目錄下會多出兩個東西node_modules 文件夾和 package-lock.json 文件。node_modules 是第三方庫實際存放的位置package-lock.json 會鎖定每個依賴包的具體版本號保證團隊協(xié)作時大家裝到的版本完全一致。有一個新手很容易犯的錯誤把自己的 node_modules 目錄傳到了 Git 倉庫里。node_modules 體積巨大而且完全可以根據(jù) package.json 重新生成所以正常做法是在 .gitignore 里把 node_modules 排除掉。別人拿到你的代碼后只需要執(zhí)行 npm install就會自動按 package.json 的聲明把所有依賴裝回來。package.json 是 Node.js 項目的核心配置文件。一個最簡化的 package.json 長這樣{ name: node-basic, version: 1.0.0, description: , main: index.js, scripts: { start: node index.js, dev: nodemon index.js }, dependencies: { express: ^4.19.2 } }scripts 字段里可以自定義命令。npm start 對應(yīng) node index.jsnpm run dev 對應(yīng) nodemon index.js。nodemon 是一個監(jiān)聽文件變化自動重啟服務(wù)的工具本地開發(fā)時用它可以大幅提高效率改完代碼不用手動重啟服務(wù)它自動幫你重新運行。5. 從零搭建 HTTP 服務(wù)不用框架先搞懂原理5.1 使用原生 http 模塊創(chuàng)建服務(wù)器很多教程一上來就教 Express 框架導(dǎo)致很多人根本不知道 Express 底層是怎么工作的。遇到問題之后只能復(fù)制粘貼代碼完全沒有排查思路。所以這里我堅持先用 Node.js 原生 http 模塊寫一遍服務(wù)器讓你看清最底層的東西長什么樣。Node.js 內(nèi)置了 http 模塊可以直接創(chuàng)建一個 HTTP 服務(wù)器。下面是實現(xiàn)一個最簡單的服務(wù)器訪問時返回 “Hello World”const http require(http); const server http.createServer((req, res) { res.writeHead(200, { Content-Type: text/plain; charsetutf-8 }); res.end(Hello World); }); server.listen(3000, () { console.log(服務(wù)器已啟動: http://localhost:3000); });在命令行執(zhí)行 node server.js然后打開瀏覽器輸入 http://localhost:3000你會在頁面上看到 “Hello World”。代碼雖然只有幾行但它把 HTTP 服務(wù)的核心要素全部包含了請求對象 req、響應(yīng)對象 res、端口監(jiān)聽。這個例子里有一個非常關(guān)鍵的參數(shù)就是 Content-Type。它告訴瀏覽器響應(yīng)內(nèi)容的類型。如果不設(shè)置 charsetutf-8瀏覽器默認(rèn)按其他編碼解析中文就會變成亂碼。這類問題在后端開發(fā)里極其常見平時開發(fā)接口時返回 JSON 數(shù)據(jù)必須設(shè)置 Content-Type 為 application/json; charsetutf-8這一點以后寫 Express 接口時同樣適用。5.2 處理路由與請求方法上面這個例子不管訪問哪個路徑返回的都是 Hello World。那真實的網(wǎng)站是怎么實現(xiàn)不同網(wǎng)址展示不同內(nèi)容的呢答案就是根據(jù)請求的 URL 和請求方法分別處理。下面這個版本通過判斷 req.url 和 req.method將請求分發(fā)到不同的處理邏輯const http require(http); const server http.createServer((req, res) { const { url, method } req; res.setHeader(Content-Type, application/json; charsetutf-8); if (url / method GET) { res.end(JSON.stringify({ message: 歡迎訪問首頁 })); } else if (url /api/users method GET) { res.end(JSON.stringify({ users: [張三, 李四, 王五] })); } else if (url /api/users method POST) { let body ; req.on(data, (chunk) { body chunk.toString(); }); req.on(end, () { const parsedBody JSON.parse(body); res.end(JSON.stringify({ message: 創(chuàng)建用戶: ${parsedBody.name} })); }); } else { res.statusCode 404; res.end(JSON.stringify({ message: 接口不存在 })); } }); server.listen(3000, () { console.log(服務(wù)器已啟動: http://localhost:3000); });注意 POST 請求的處理方式。HTTP 請求體不是一次性全部到達(dá)的而是像流水一樣分塊到達(dá)的。Node.js 會觸發(fā) data 事件來接收每一塊數(shù)據(jù)最后觸發(fā) end 事件表示請求體接收完畢。所以代碼里用 let body 把每一塊數(shù)據(jù)拼接起來等到 end 事件時再整體解析。這一段代碼把一個簡單的路由分發(fā)邏輯模擬了出來。實際后端的路由處理就是這種思路的擴展但像路由匹配、參數(shù)解析、中間件機制這些事情如果全部自己寫代碼很快就會膨脹到無法維護。于是就有了 Express 這樣的 Web 框架把常見的底層邏輯都封裝好了。5.3 接口什么是接口為什么前端需要它關(guān)于“接口是啥”這個問題網(wǎng)上有很多繞來繞去的解釋我直接用大白話說一次。接口就是你用 HTTP 協(xié)議和后端服務(wù)通信的一組 URL 約定。前端向某個 URL 發(fā)一個請求后端返回一段數(shù)據(jù)就能讓頁面把數(shù)據(jù)展示出來。比如一個典型的前后端分離項目前端是一個 Vue 應(yīng)用跑在 8080 端口后端是一個 Node.js 服務(wù)跑在 3000 端口。前端要在頁面上展示用戶列表只需要向后端請求 /api/users 這個接口后端返回 JSON 格式的數(shù)組前端拿到數(shù)據(jù)之后渲染成列表。從前端發(fā)請求最常用的方式是 fetch。注意這是個瀏覽器和 Node.js 都在不斷完善的 API尤其是較新版本的 Node.js 內(nèi)置了全局 fetch所以前端基礎(chǔ)里學(xué)到的 fetch 技能可以直接遷移到 Node.js 中。舉個例子fetch(http://localhost:3000/api/users) .then(response response.json()) .then(data { console.log(data); }) .catch(err { console.error(請求失敗:, err); });前后端分離項目里的聯(lián)調(diào)本質(zhì)上就是前端發(fā)請求后端返回數(shù)據(jù)兩邊約定好 URL 和 JSON 結(jié)構(gòu)。這個“約定”就是接口。這也是為什么學(xué)習(xí) Node.js 基礎(chǔ)時我們一定要自己動手創(chuàng)建 HTTP 服務(wù)——只有當(dāng)你親手寫過接口、響應(yīng)過請求、思考過返回狀態(tài)碼才能真正理解前后端協(xié)作是怎么一回事。6. 深入 Node.js 模塊機制CommonJS 與回調(diào)函數(shù)6.1 模塊導(dǎo)出與引入的幾種寫法前面已經(jīng)介紹了最基本的 module.exports 和 require。但實際項目里模塊導(dǎo)出會有幾種不同風(fēng)格這里把常見的全部列出來你以后看到別人的代碼就不會發(fā)懵。第一種導(dǎo)出一個對象// utils.js const formatDate (date) date.toISOString().split(T)[0]; const addDays (date, days) { const result new Date(date); result.setDate(result.getDate() days); return result; }; module.exports { formatDate, addDays };第二種直接掛在 exports 上// math.js exports.add (a, b) a b; exports.subtract (a, b) a - b;這兩種寫法在功能上是等價的。但要特別注意一個坑exports 是 module.exports 的一個引用如果直接寫 exports xxx就相當(dāng)于把 exports 指向了另一個對象而 module.exports 仍然指向原來的空對象最后引入的結(jié)果就是空對象。所以如果你要導(dǎo)出一個單獨函數(shù)或類必須用 module.exports而不是直接給 exports 賦值。最簡單的導(dǎo)出函數(shù)寫法// greet.js module.exports function(name) { return 你好, ${name}; };對應(yīng)的引入方寫法const greet require(./greet.js); console.log(greet(小明)); // 你好, 小明6.2 回調(diào)地獄與初級解決方案Node.js 早期的異步操作完全靠回調(diào)函數(shù)串聯(lián)。代碼如果復(fù)雜起來很快就會變成“回調(diào)地獄”。我實際帶項目時見過不少這種代碼層層嵌套縮進越來越深邏輯越來越難看懂fs.readFile(./user.json, utf8, (err, userData) { if (err) { console.error(err); return; } const user JSON.parse(userData); fs.readFile(./order.json, utf8, (err, orderData) { if (err) { console.error(err); return; } const orders JSON.parse(orderData); // 繼續(xù)嵌套... }); });這種寫法的問題一目了然代碼可讀性差、錯誤處理重復(fù)、很難追蹤調(diào)用順序。解決回調(diào)地獄的現(xiàn)代方式是使用 Promise 和 async/await。Node.js 從 8.0 版本開始大規(guī)模支持 async/await現(xiàn)在幾乎已經(jīng)成為后端開發(fā)的標(biāo)準(zhǔn)寫法。比如同樣讀取文件用 fs.promises 加 async/await 就能寫得很清晰const fs require(fs).promises; async function loadData() { try { const userData await fs.readFile(./user.json, utf8); const orderData await fs.readFile(./order.json, utf8); const user JSON.parse(userData); const orders JSON.parse(orderData); console.log(user, orders); } catch (err) { console.error(讀取數(shù)據(jù)失敗:, err.message); } } loadData();async/await 并沒有發(fā)明新東西它就是 Promise 的語法糖。只要你理解了 Promise 的概念——一個尚未完成的異步操作的容器這個容器最終會變成成功狀態(tài)或失敗狀態(tài)async/await 就只是讓代碼看起來像同步寫法而本質(zhì)上還是異步執(zhí)行。6.3 理解 Promise 的三種狀態(tài)Promise 的三種狀態(tài)是學(xué)習(xí) Node.js 異步時繞不開的pending進行中、fulfilled已成功、rejected已失敗。狀態(tài)一旦從 pending 變成 fulfilled 或 rejected就不可再變化。這是理解異步代碼最重要的底層觀念。我給你看一個實際使用的例子。在真實項目中經(jīng)常需要封裝一個數(shù)據(jù)庫查詢函數(shù)返回 Promisefunction queryUserById(id) { return new Promise((resolve, reject) { // 模擬數(shù)據(jù)庫異步查詢 setTimeout(() { if (id 0) { reject(new Error(無效的用戶 ID)); return; } resolve({ id, name: 張三 }); }, 500); }); } async function getUser() { try { const user await queryUserById(1); console.log(查詢成功:, user); } catch (err) { console.error(查詢失敗:, err.message); } } getUser();Promise 內(nèi)部的 resolve 和 reject 就是狀態(tài)切換的開關(guān)。resolve 表示成功reject 表示失敗。async 函數(shù)里的 await 會暫停執(zhí)行直到 Promise 狀態(tài)確定為止但暫停期間并不會阻塞其他代碼執(zhí)行——這就是非阻塞異步和同步代碼最大的區(qū)別。7. 從原生到 Express快速搭建可用后端項目7.1 為什么需要框架前面我們用原生 http 模塊寫了一個很基礎(chǔ)的服務(wù)。真實項目里如果每個接口都像那樣手動判斷 url、method再手動拼接請求體代碼很快就會膨脹到?jīng)]法維護。輪子已經(jīng)有人造好了而且非常成熟沒必要自己重新造。Express 是目前 Node.js 生態(tài)里使用最廣泛的 Web 框架。它做的事情概括起來就是把路由分發(fā)、參數(shù)解析、中間件機制、靜態(tài)文件服務(wù)這些通用能力封裝好讓你專注于寫業(yè)務(wù)邏輯。加上 Express 中間件的設(shè)計非常靈活通過 use 方法可以方便地掛載各種功能模塊。插一句現(xiàn)在也有很多人直接用 Koa 或 Fastify、NestJS 這些新框架。但作為新手初期的核心目標(biāo)不是“用最新最潮的框架”而是理解一個 Web 框架最基礎(chǔ)的長什么樣。Express 的文檔、中間件生態(tài)、學(xué)習(xí)資料都是最全的用它入門是最穩(wěn)的路徑。7.2 用 Express 重寫剛才的服務(wù)先安裝依賴npm init -y npm install express然后創(chuàng)建一個 app.jsconst express require(express); const app express(); app.use(express.json()); app.get(/, (req, res) { res.json({ message: 歡迎訪問首頁 }); }); app.get(/api/users, (req, res) { res.json({ users: [張三, 李四, 王五] }); }); app.post(/api/users, (req, res) { const { name } req.body; res.json({ message: 創(chuàng)建用戶: ${name} }); }); app.listen(3000, () { console.log(服務(wù)器已啟動: http://localhost:3000); });對比一下原生 http 模塊的代碼Express 版本的簡潔程度不是一點點。res.json() 直接返回 JSON 并自動設(shè)置 Content-Typereq.body 直接拿到了解析好的請求體數(shù)據(jù)路由定義只需要寫 HTTP 方法加路徑。這里有一行代碼極其重要app.use(express.json())。它的作用是給請求對象加一個 body 解析能力。如果沒有這一行Express 不會主動解析請求體req.body 就會是 undefined。很多新手遇到“POST 請求為什么拿不到參數(shù)”的問題九成都是因為忘寫這一行。7.3 Express 靜態(tài)資源托管一天學(xué)會Express 還能直接托管靜態(tài)文件。比如你的前端頁面打包之后全部放在 public 目錄只需要一行代碼就能讓瀏覽器直接訪問里面的 HTML、CSS、JS 和圖片const express require(express); const app express(); const path require(path); app.use(express.static(path.join(__dirname, public))); app.listen(3000, () { console.log(靜態(tài)資源服務(wù)器已啟動: http://localhost:3000); });在項目目錄下建一個 public 文件夾里面放一個 index.html瀏覽器打開 http://localhost:3000/index.html 就能直接看到頁面內(nèi)容。這就是最原始的“前后端部署”場景——把前后端放在同一個服務(wù)下用同一個端口對外提供服務(wù)。實際的前后端分離部署會比這個復(fù)雜比如把靜態(tài)文件放在 Nginx后端服務(wù)獨立跑在某個端口再用 Nginx 做反向代理。但邏輯上本質(zhì)都是一樣的靜態(tài)資源給瀏覽器接口給前端應(yīng)用調(diào)。理解了 Express 的靜態(tài)托管你對部署就有了一個基礎(chǔ)概念。7.4 Express 中間件機制通俗解釋中間件是 Express 中一個非常重要的概念。用大白話說中間件就是“請求到達(dá)路由之前要經(jīng)過的一系列處理函數(shù)”。每一個中間件都能訪問請求對象和響應(yīng)對象可以修改它們也可以決定是直接響應(yīng)還是調(diào)用 next() 把控制權(quán)交給下一個中間件。下面是一個日志中間件的例子app.use((req, res, next) { console.log(${req.method} ${req.url} - ${new Date().toISOString()}); next(); });永遠(yuǎn)記得調(diào)用 next()。如果這個中間件不調(diào)用 next()請求就會卡在這里永遠(yuǎn)不會有響應(yīng)。這是初學(xué)者最常犯的錯誤。還有常見的身份驗證中間件function authMiddleware(req, res, next) { const token req.headers[authorization]; if (!token) { res.status(401).json({ message: 未登錄無訪問權(quán)限 }); return; } // 這里可以校驗 token簡單示例略過 req.userId 12345; next(); } app.get(/api/profile, authMiddleware, (req, res) { res.json({ userId: req.userId, name: 張三 }); });這種寫法就是后端接口鑒權(quán)的基礎(chǔ)模型在真實的項目中如 JWT token 驗證、權(quán)限判斷、日志記錄全部都是通過中間件實現(xiàn)的。理解了中間件你就差不多摸到了 Express 的精髓。8. 前后端配合與接口調(diào)試fetch 與跨域處理8.1 前后端分離項目中的數(shù)據(jù)交互前面說過前后端分離是現(xiàn)代 Web 開發(fā)的常見模式。前端是一個獨立項目運行在某個端口或域名下后端是另一個獨立項目提供 API 接口。頁面加載后由前端通過 AJAX 或 fetch 向接口取數(shù)據(jù)再渲染。一個最簡單的前端頁面用 fetch 調(diào)用后端接口!DOCTYPE html html langzh-CN head meta charsetUTF-8 / title用戶列表/title /head body div idapp加載中.../div script fetch(http://localhost:3000/api/users) .then(response response.json()) .then(data { const appDiv document.getElementById(app); const userList data.users.map(user li${user}/li).join(); appDiv.innerHTML ul${userList}/ul; }) .catch(error { document.getElementById(app).textContent 請求失敗請檢查后端服務(wù); console.error(error); }); /script /body /html打開前端頁面頁面會向后端發(fā)送請求拿回用戶列表渲染出來。這是前后端分離項目里前端最基本的交互邏輯。知道這點之后再去理解 Vue、React 里的數(shù)據(jù)請求本質(zhì)上還是同一件事只是在框架中封裝成了更優(yōu)雅的寫法。8.2 跨域問題前端后端最難纏的坑前后端分離開發(fā)時前端跑在 5500 端口或者用 VS Code 的 Live Server 自動分配的端口后端跑在 3000 端口。瀏覽器的同源策略會攔截這兩個不同端口之間的請求。前端頁面里 fetch 一個不同源的后端接口控制臺就會報錯Access to fetch at http://localhost:3000/api/users from origin http://localhost:5500 has been blocked by CORS policy解決這個問題的最直接方法是后端在響應(yīng)頭里主動聲明允許跨域訪問。不需要找什么復(fù)雜工具在 Express 里加一段中間件就能搞定app.use((req, res, next) { res.setHeader(Access-Control-Allow-Origin, *); res.setHeader(Access-Control-Allow-Methods, GET, POST, PUT, DELETE, OPTIONS); res.setHeader(Access-Control-Allow-Headers, Content-Type, Authorization); next(); });Access-Control-Allow-Origin 如果設(shè)置為 *表示允許任意域名訪問。生產(chǎn)環(huán)境一般不建議這樣放開更好的做法是指定具體的前端域名。但開發(fā)階段為了圖省事寫 * 是最常見的方式。如果不想在代碼里手寫這些響應(yīng)頭也可以使用 npm 上現(xiàn)成的中間件 corsnpm install cors然后一行代碼掛載const cors require(cors); app.use(cors());這里我想強調(diào)的是跨域問題不是后端代碼邏輯錯誤而是瀏覽器安全策略。前端和后端代碼本身都沒有問題只是瀏覽器默認(rèn)不允許跨源訪問。理解了這一點你看到這個報錯時就不會慌。8.3 常見運行時報錯排查思路后端開發(fā)中運行時報錯是每天都要面對的。Node.js 的報錯信息比較直白但還是有幾個常見的“新手專屬坑”我列出來你可以提前避雷。第一個是端口被占用。啟動服務(wù)時報錯Error: listen EADDRINUSE: address already in use :::3000原因是 3000 端口已經(jīng)被另一個進程占用了。常見解決辦法要么換一個端口比如 app.listen(3001)要么找到占用端口的進程把它結(jié)束掉。Windows 下查看并結(jié)束端口占用netstat -ano | findstr :3000 # 假設(shè)最后一列是 PID 12345執(zhí)行下面命令結(jié)束進程 taskkill /PID 12345 /FmacOS/Linux 下lsof -i :3000 kill -9 PID第二個是找不到模塊。報錯比如Cannot find module express這個問題幾乎都是因為在錯誤的目錄下執(zhí)行了 node 命令或者項目根本沒有執(zhí)行過 npm install。檢查一下當(dāng)前目錄有沒有 node_modules 文件夾沒有就執(zhí)行 npm install。第三個是 JSON 解析失敗Unexpected end of JSON input這種情況通常是請求體不是合法的 JSON 格式。比如前端傳了一個空字符串或者 JSON 字符串里出現(xiàn)了多余逗號。排查思路是先用 console.log 把 body 打印出來看看實際接收到的是什么內(nèi)容再對照 JSON 格式檢查。8.4 驗證調(diào)試接口的趁手工具開發(fā)接口時直接在瀏覽器里訪問 GET 接口很方便但 POST、PUT、DELETE 這些帶請求體的方法瀏覽器地址欄里沒法直接試。這里推薦兩個工具。第一個是 Postman功能最全面適合復(fù)雜調(diào)試場景從簡單的 GET 到帶 Token 的鑒權(quán)請求都能支持。第二個是 Apifox國內(nèi)團隊用得很多接口文檔管理和測試一體。還有更輕量的方案是 VS Code 里的 Thunder Client 插件界面簡潔不用單獨開一個軟件。我個人的習(xí)慣是平時寫代碼直接瀏覽器加 console.log 做快速驗證聯(lián)調(diào)和測試接口時用 Postman 或者 Apifox。配置一個 POST 請求時需要在 Headers 里加 Content-Type: application/json然后在 Body 里選擇 raw貼一段 JSON點擊 Send 就能看到后端返回的結(jié)果。這一套接口驗證流程是前后端聯(lián)調(diào)的基本功。你把接口調(diào)試熟練了后面配合 Vue 或者 React 做項目時會非常省心。9. 部署起步本地服務(wù)如何跑起來9.1 常見部署思路你本地寫完的后端項目最終要部署到一臺服務(wù)器上才能讓其他人通過公網(wǎng)訪問。這一塊對于剛學(xué)完基礎(chǔ)的同學(xué)可以先不深入但要有一個概念。最常見最省事的方案是在服務(wù)器上安裝 Node.js 環(huán)境把代碼上傳上去npm install 安裝依賴然后啟動服務(wù)。注意生產(chǎn)環(huán)境啟動時要設(shè)置環(huán)境變量為 production并用像 PM2 這樣的進程管理工具來守護服務(wù)讓它在崩潰后自動重啟。一個簡化版本的部署流程是服務(wù)器上先安裝 Node.js推薦用 nvm 或者直接二進制包把項目代碼上傳到服務(wù)器cd 到項目目錄執(zhí)行 npm install --production啟動服務(wù)node app.js 或者使用 PM2pm2 start app.js如果有域名配置一下 Nginx 反向代理把某個域名指向你的服務(wù)端口這一步涉及的知識覆蓋了 Linux 命令、Nginx 配置、防火墻規(guī)則等等剛?cè)腴T時不要求全部掌握但“后端項目是怎么跑起來的”這條鏈路一定要清楚。9.2 本地開發(fā)輔助nodemon 提升效率最后再分享一個非常實用的本地開發(fā)小技巧。你寫代碼時每改一次代碼就要手動 Ctrl C 終止服務(wù)再重新啟動重復(fù)幾十次下來效率很低。安裝 nodemon 之后它會監(jiān)聽項目文件的改動自動幫你重啟服務(wù)npm install -g nodemon啟動方式nodemon app.js之后你每次保存代碼控制臺會自動顯示服務(wù)重啟日志。唯一的坑是nodemon 會忽略 node_modules 目錄的變動不會因為裝了一個新包就重啟服務(wù)。如果你改了路由、改了業(yè)務(wù)代碼它都會自動重啟本地開發(fā)效率是這個提升很明顯。package.json 里建議這樣配置 scriptsscripts: { dev: nodemon app.js, start: node app.js }這樣 npm run dev 就是開發(fā)模式npm start 就是生產(chǎn)模式的啟動命令。10. 個人實操心得三個學(xué)習(xí)坑位與建議到這里Node.js 后端基礎(chǔ)的核心骨架已經(jīng)全部過了一遍。最后用我自己的經(jīng)驗說幾件事。第一一定要“動手敲不要只看”。Node.js 基礎(chǔ)階段的知識點互動性很強讀文件、寫服務(wù)器、調(diào)接口每一步都需要親手運行看到結(jié)果。看十遍教程不如自己在終端里跑一個服務(wù)器再手動用瀏覽器訪問一次。第二建議準(zhǔn)備一個專門用來“折騰”的目錄把課程里所有例子都從零敲一遍尤其是 fs、http、Express 這部分。不要直接復(fù)制粘貼自己一個字一個字打出來。這樣寫出來的錯誤都是你自己的會有更深刻的記憶。踩過坑的知識點后面基本不會再犯同樣的錯。第三學(xué)完 Node.js 基礎(chǔ)后下一步怎么走我建議優(yōu)先完成三個方向一是深入 Promise 和 async/await把異步編程練熟這是后端開發(fā)最大的一道門檻二是選擇一個數(shù)據(jù)庫MongoDB 或者 MySQL 都可以學(xué)習(xí)增刪改查和 Node.js 如何操作數(shù)據(jù)庫三是嘗試做一個完整的增刪改查接口比如一個簡單的待辦事項列表用 Express 加一個數(shù)據(jù)庫實現(xiàn)這是每個后端工程師入門的第一個實戰(zhàn)項目。從我?guī)н^的新人來看能把這三步走完基本上就具備獨立開發(fā)一個小型后端服務(wù)的能力了。下一步再去接觸 NestJS、微服務(wù)、數(shù)據(jù)庫設(shè)計、部署運維這些內(nèi)容就會順暢很多。Node.js 后端基礎(chǔ)這門課是你的第一塊跳板跳上去之后能走多高就看你想做哪個方向了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
五月丁香激情综合六月涩涩爱| 天天天天天色| 另类激情中文| 五月婷婷综合激情| 成人看片网站| 日韩av在线播放综合网| 久久综合人妻| 99久久精彩视频。| 丁香九月激情在线视频| 午夜少妇在线观看视频| 五月色网| 色色色激情| 日韩有码一区| 欧美日韩99| 色五月婷婷成人视频| 天天干一干| 色五月综合网| 色五月综合网| 丁香五月熟女| 无码激情AAAAA片-区区| 久久久久人妻| 五月婷婷激情四季| 免费亚洲成人电影AV| 伊人婷婷大香蕉| 97操在线视频| 久草五月丁香婷婷综合| 伊人91| 九九精品热播| 99热色在线精品| 婷婷色综合中心站| 超碰在线观看caop| 激情5月婷婷| 五月丁香免费看| 香蕉久久国产AV一区二区| 综合AV网| 色五月首页| 日本激情综合| 先锋资源 996| 这里只精品| 狠狠色综合无线观看| 九九色热| 任你躁XXXXX麻豆精品| 婷婷六月丁香五月| 综合伊人久久| 亚洲天天操| 色狠狠激情五月| se色综合网| 成功精品影院| 免费视频WWW在线观看网站| 色色射| 九九久久综合网站| 人人色性网| 丁香六月婷婷综合激情欧美 | 久久99热这里只有精品首| 色婷婷97| 九九AV在线| 97碰碰草| 久草婷婷网 | 91碰碰视频| 欧美噜一噜| 日本欧美在线| 久久婷婷六月综合资源| 人人草人| 五月天色综合| www色色com| 91操人| 大香蕉啪啪网| 97偷拍对白视频| 丁香五月 激情文学| 三年高清大片免费观看国语| A片试看50分钟做受视频| 日韩成人电影在线播放| 色色五月天激情| 色婷婷综合影院| 182TV大香蕉| 91碰| 超碰在线看| 久久婷婷亚洲| 国产3p露脸普通话对白| 亚洲一区二区无遮挡A片| 99色嘟嘟精品网站| 超碰91在线| 激情婷婷五月综合| 99色一| 99热这里只有精品55| 天天操天天操天天操天天操天天操天天操| 婷婷色系婷色| 天天色天天爱天天爽| 黄色笑话深爱激情网丁香五月婷婷啪啪啪啪啪| 九九激情网| 欧美槡BBBB槡BBB少妇| 丁香五月欧美激情| 久久婷婷五月综合色区| 伊人五月天久久| 色婷大香蕉| 91成人电影| 色色色色色色五月婷婷| 天堂婷婷五月色| 综合网视频| 粉嫩av蜜桃av蜜臀av| 日韩成人av在线| 久9久9久9久9久9久9| 丁香婷婷基地| 四川BBB搡BBB爽爽视频| 综合久久首页| 91婷婷五月天综合视频| 婷婷五月天激情文学| 99久久综合| 国产偷人爽久久久久久老妇APP| 亚洲另类AV| 狠狠色狠狠干| 激情婷婷五月| 婷婷五月综合网| 影视av久久久噜噜噜噜噜三级| 97超喷视频在线观看| 久久怡红院| 五月丁香色婷婷熟女| 色五月大| www.激情五月天.com| 另类综合激情| 综合在线网| 99A片| 五月婷婷影院| 在线播放中文字幕| 亚洲情色一区| 综激情网| 婷婷无码视频| 久久99网站| 白度黄视频| 翔田千里aV中文字幕| 91人人操人人爱| 一本色道久久综合狠狠躁一二三| 91网站黄| 丁香五月综合| 天天操天天干天天射| 五月丁香无码| 欧美激情综合| 五月亭大香蕉| 丁香六月视频免费观看| 久久亚洲婷婷| 五月丁香婷婷六月天| 六月丁香啪啪| 丁香六月激情综合网| 色色色图| 五月婷婷天堂| 色五月天丁香| 国产免费av在线| 99精品福利视频| 人妻22p| 婷婷五月综合在线| 中文字幕 码精品视频网站| 狠狠色综合网| 精品色色| 99色在线视频观看| 久久婷婷五月天| 精品人妻伦| 国产成人99久久亚洲综合精品| 日韩黄色网络| 五月丁香婷婷视频| 成人网站在线观看视频| 欧美成人精品A片免费一区99| 五月丁香婷婷爱激情综合网| 国产精品涩涩涩视频网站| 99久久精彩视频。| 九九色网专区| 色色 9| 婷婷五月丁香综合瑟瑟| 九九精品自拍| 久热这里精品免费| www.五月婷| 丁香五月欧美| 碰97久久| 高清视频一区| 婷婷丁香午夜综合影视| 大陆极品少妇内射AAAAAA| 人妻内射麻豆视频| 嫩草极品| 日日夜夜天天| 亚洲中文无码成人| 91AV视频| 亚洲精品V天堂中文字幕| 立川无码av| 亚洲中文字幕网| 色播综合| 婷婷热色| 五月丁香六月婷婷综合网站| 色婷婷丁香| 九九色逼| 99操无码视频观看| 久久婷婷五月综合97色一本| 五月丁香婷婷啪啪| 激情五月婷婷五月| 五月 丁香 欧美| www.夜夜爱.com| 99爽视频| 99亚洲色色| 伊人爱爱日本| 99热在线精品观看| 2025天天日爽| 天天射天天射一道本日本社区 | 色婷婷天堂| 亚洲Va成人| www久久99| α久久| 色婷婷AV在线| 亚洲精品又粗又大又爽A片 | 9热视频在线观看| 久久机热这里只有精品免费视频| 狠狠精品干练久久久无码中文字幕| 婷婷亚洲色| 99 热国产在| 99热xx| 色偷偷五月天| 婷婷五月天开心网| 69午夜成人影片| 欧美天堂久久| 久久婷婷五月综合色丁香| 激情综合五月| 91婷婷五月天嫩女| 五月天玖玖狠狠色色| WWW.99热| 五月丁香激情综合六月涩涩爱| 丝袜大香蕉| 五月丁香婷婷免费视频| 99热99热不卡| 综合图区激情| 26UUU精品一区二区Com| 六月欧美综合色情| 密黄站| 久久婷婷青青| 九色综合网| 99色色视频| 五月婷婷丁香五月婷婷丁香| 欧美成人网99网| 综合激情网五月激情| 非洲一级AV| 色色色宗合网| 99久久人人| 精品夜夜澡人妻无码AV| 伊人久久婷婷| 成人做爰高潮A片免费视频| 超碰99久久| AV操操操| 偷拍91九色| 亚洲色情网站| 五月丁香六月婷婷综合伊人| 精品九九视频| 欧洲免费视频色| 插少妇综合网| 色就是色婷婷五月亚洲激情| 激情五月天激情网| 丁香五月骚喷水视频| 99精品无码视频| 丁香5月激情网| 97操碰在线视频| 婷婷五月无码| 9热视频在线观看| 激情亭亭五月| 久热大香蕉| 91婷婷色五月| A√天堂网在线| 九九国产视频| 99re热视频| 五月丁香六月婷婷a v| 婷婷九月激情| 99在线视频免费| 中文久久久人妻| 久久五月天合网| 亚洲VA欧美VA| 日日操,夜夜撸| 天天爽天天摸| 成人网址在线观看| 99视频| 久久精品一区二区三区四区| 五月丁香婷婷老司机| 婷婷激情五月天小说| 五月天婷婷社区久久综合| 91色九| 99视频色在线观看| 婷婷综合色五月天| 色婷网| 第五色婷婷| 在线观看免费人成视频无码| 4399伦理午夜| 天天上天天爽| 99热99极品观看| 婷婷色色网| 另类少妇人与禽zOZZ0性伦| 狠狠精品干练久久久无码中文字幕| 国产成人AV不卡| 日本玖玖在线| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 丁香五月综合在线播放| 内射综合网| 激情丁香五月| 国产精自产拍久久久久久蜜 | 激情五月天婷婷| 人妻免费网站| 九九这里只有精品在线视频| 熟女激情五月天 | 26uuu国产精品| www.ppypp| 97碰久久| 丁香九月综合在线| 丁香五月aV| ji'qi'luan'ren'lun| 思思99久久| 搡BBBB搡BBB搡五十| 欧美人人女女精品综合五月天| 婷婷伊人綜合中文字幕| 99热这里只有精品4| 天天干夜夜谢| 久久激情天堂| 99在线亚洲| 狠狠色丁香| 激情婷婷黄色五月| 思思色综合网站| 超碰97人人操| 日本在线视频播放91| 五月天成人在线| 亚洲综合五月| 九九久久99精品免费观看www| 亚洲人妻一区二区 | 97在线日本| 中文字幕激情综合| 亚洲天堂aaa| 久久婷婷五月天| 91超级碰在线| 激情第四色| 婷婷五月花| 五月丁香婷婷在线| 久久婷丁香五月| 3p九色在线| 亚洲五月天综合色| 超碰人妻在线| 国产操碰| 小视频久久久aaa| 日韩无码乱轮| 97色色综合| 天天揷综合网| 99热99热99热99热| 五月天小说激情| www.夜夜夜| AV操操操| 99久久免费性爱视频`| 99亚洲精品| 91九九热| 99综合| 五月丁香婷婷色| 狼人狠狠操| 五月天com| 久草视频大香蕉99| 夜夜操夜夜操| 激情五月天啪啪| 五月丁香啪啪| 丁香五月人妻| 色情五月婷婷| av婷婷丁香 六月| 天天干天天干天天干天天干天| 五月婷婷深深爱| 伊人玖玖婷婷| 色五月天堂| 婷婷伊人| 翔田千里aV中文字幕| 最近韩国日本免费高清观看| 九九热手机在线视频| 4438亚洲欧美| 99这里只有精品视频| www,久久久人人| 亚洲热久久| 99色免费| 五月天成人小说| 伊人影音无码一区二区三区| 国产做爰视频免费播放| 五月天.com| 亚洲四色五月| 激情伊人五月天| 激情综合自拍五月婷婷色五月| 熟妇人妻中文字幕无码老熟妇| 婷婷五月激情片| 99国产精品白浆在线观看免费| 五月丁香网中文字幕| 欧美成人猛片AAAAAAA| 综合深爱五月| 久99久精品视频| 丁香综合网| 五月天色婷好好| 91性交在线播放| 青青草成人网| 亚洲第一色色色| 丁香五月婷婷色综合| 色播播五月| 九九五月天| 中文字幕日产A片在线看| 五月天婷婷无码视频| 伊人9在线| 综合色99| 中文AV网| 深爱激情小说五月婷婷| 热久久色| 色9999日韩国产| 美妞av| 久久国产高潮白浆免费观看99| 久久久久亚洲AV无码网影音先锋| 婷婷五月天777| 婷婷五月天久| 五月丁香综合激情| 婷婷五月免费视频| 69午夜成人影片| 国产44页| 99燥99日| 五月婷婷之综合激情| 久草xx性爱视频| 久久婷婷五月丁香网| 香蕉久久国产AV一区二区| 久久色亭亭五月天| 久热中文字幕在线线观看 | 久久综合婷婷| 久久久久丁香婷婷五月天| 久久丁香五月天| 日本97人人| 开心激情站| 天天弄天天操| 思思热久久久在线| 欧美激情五月天在线观看| 色五月大| 亚洲综合欧美色丁香婷婷888月图片| 亚洲五月婷婷| 日韩成人网址| 婷婷五月天福利| 天天婷婷操| 91超碰在线观看| 黄色成人AV在线| 狠狠干狠狠干| 五月天婷婷久久| 啪啪99| 开心五月深爱五月丁香五月激情五月| 六月色色综合| 五月丁香在线视频观看| 超碰国产在线| 亚州色婷婷| 日韩无码人妻一区二区| 1769在线观看欧美国产| 久久九网| 亚洲无码影音| 色五月丁香A欧美com| 99自拍视频在线观看| 婷婷综合97| 色亭亭五月天丁香综合AV - 百度 - 百度| 26uuu最新地址| 天天插天天爽| 青草激情综合| 色9999日韩国产| 激情五月天天狠狠久久| 婷婷丁香六月| 久综合网| 91啪啪| 99久在线观看| 丁香五月色情| 9久久精品| 天天干天天色综合| 亚洲精品一区中文字幕乱码| 99热免费| 亚洲成人无码专区| 丁香五月 性爱| 伊人久久丁香狠狠婷婷综合香蕉 | 这里只有国产精品在线| 九九亚洲小视频| 中文字幕日韩无码制服诱或| 人人人va亚洲视频在线| 99A片| 丁香激情五月| 五月天激情亚洲| www久久久| 激情色色色| 天天干天天插| 青吴乐视频| 婷婷日韩| 日本在线视频播放91| 中文资源在线a | 色婷婷成人做爰A片免费看网站 | 五月婷婷久久大香蕉| 99热99精品| 91九色精品熟女内射| 欧美噜噜噜草| 丁香五月天BBw| 看久久性爱99视频| 九九aV| 五月婷婷性爱| 9久热在线精品| 久久九九国产| 激情丁香婷婷五月天| 五月开心啪啪| 色色日本欧美| 五月天综合在线观看| 亚亚州久久高潮| 久久婷婷成人| 日韩成人中文| 99啪| 欧美成人精品老美女噜噜噜| 日韩操人| 超级碰碰视频无码| 思思99精品视频在线观看| 六月婷婷亚洲| 天天色综网| 五月天婷a在线| 综合一区二区三区| 九九热思思热| 超碰在线国产| 丁香影院五月综合| 欧美狠狠草| 五月婷婷之美女图片| 日本啪啪天堂| 9l视频自拍九色9l黑人| 99re最新地址视频| 综合网五月| www.99色| 亚州色婷婷| 婷婷激情五月天小说| 五月婷婷久久久| 五月丁香六月激情网站| 99精品久久| 婷婷丁香五月高清| 国产成人精品一区二区三区视频| www99在线观看视频| 三十路磁力链接| 一本久道综合色婷婷五月| 亚洲六月综合激情久久下卡| 五月婷婷新网站| 五月天网站免费欧美| 俺也去色| 99色视| 丁香六月激情综合| 精品婷婷丁香五| 99热久只有精品首页| 丁香久久五月婷综合| 日本婷婷色| 五月色亭丁香| 婷婷开心激情| 婷婷的久久网站| 玖玖热视频| 99干日日干| 色色精品色| 色九月婷婷综合| 久久99免费视频| 色五月婷婷视频| 色欲一区二区三区精品A片| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 襙逼网| 午夜天堂啪啪| 2014天天爽| 网色99| 玖玖婷婷五月| 丁香久久综合| 超碰97人人操| 成人AV在线网站| 3p久久| 十一月婷婷激情四射| 国产免费av网站| 六月婷婷激情小说网| 亚洲亚洲人成综合网络| 丁香五月成人论坛| 国产精品成人AV在线观看春天 | 日韩视频99| 婷婷五月亚洲综合| 9色在线| 综合久久综合| 99热这里只有精品55| 午夜婷婷丁香| 超碰人妻在线| 色999五月色| 99色在线| 99精品网站| 久久综合26p| 人妻精品久久久久久| 丁香婷婷欧美综合| 丁香月六月| AVV黄| 婷婷五月丁香五月| 超碰九色| 黄桃AV无码免费一区二区三区| 婷婷六月丁香激情综合| 任我干视频在线观看| 婷婷五月视频| 亚洲一区二区无遮挡A片| 久久婷婷久久| 天天开心婷婷丁香五月| 天天躁日日躁狠狠躁日日躁2022年5月9日| 激情婷婷五月基地| 丁香激情五月少妇| 26uuu亚洲| 狠狠干总合| 在线看AV| 久久久中文| 五月丁香综合伦理片| 爱iii做iiii日| 婷婷五月综合网| 丁香五月婷婷色情综合| 少妇人妻人伦A片| 久热这里只有精品视频免费观看| 婷婷五月色综合| 色啪网| 日韩爱操视频| 婷色人人狠| 香蕉曰比| 精品久久久人妻| 校园激情 亚洲| 加勒比日本一区二区三区| 欧美色色色| 五月天婷婷色小说| 亚洲精品在线视频| 五月婷婷视频| 超碰久热| 99精吕视频在线观看了| 成久综合视频| 97人人干。| 丁香婷婷基地| 天天插天天日| 青青五月天婷婷| 日本久久9| 五月丁香激情啪啪| 五月丁香综合| 婷婷五月图片小说网| 大香蕉综合| 99久久欧美| 日本色色色| 婷婷丁香五月高清| 色狠狠六月| 激情av在线| 久久全意婷婷| 99热只有| www.精品99| www、色色色| 亚洲VA欧美VA| 欧美影院婷婷| 婷婷丁香五月激情密臀av| XX色综合| www.夜夜操| 99色在线视频| av性爱在线| 伦乱美欧| 久久视这里只有精品| 光棍影院日韩精品| 国产性爱大片久久| 免费看欧美成人A片无码| www.五月婷婷| 婷婷五月色激情欧美激情| 九九久久五月天综合伊人| 久久婷婷五月综合97色一本| 七七九色| 久久久久久99精品无码| 小泽玛利亚视频一区二区| 丁香伍月婷电影全集| 9久久精品| 九九久久99| 天天干,夜夜爽| 精品国产va久久久| 久久精品永久免费| 五月天色婷婷视频| 丁香久久五月天视频在线观看| 99久久精| 五月天婷婷一起草| 人人人操Av| 激情婷婷丁香五月天小说| 色热久| 日韩高清成人| 色婷丁香| 天天做天天爱天天搞| 97碰在线| 狠狠五月激情在线| 五月丁香六月婷婷综合免| 综合综合色色| 久久五月丁香综合17C| 亚洲色欲欧美一区二区三区| 日逼免费视频| 五月丁香六月婷婷综合网站 | 狼人婷婷久久| 欧美精品999| 五月天婷婷激情小说电影| 久久婷婷五月| 男女啪啪做爰高潮无遮挡| 国产亚洲精品AAAA片APP| 色伦专区97中文字幕| 少妇AB又爽又紧无码网站| 91.www综合| 果冻传媒A片一二三区| 国产性爱大片久久| 久久最新色| 久热九九| 五月色情婷婷开心五月色情| 五月天婷婷导航| 色J香五月天| 色色国产| 五月婷久久| 国产无套精品一区二区| 色五月婷婷影视| 久久色五月| 五月色情婷婷| 亚洲婷婷乱乱丁香| www,超碰| 97精品人人A片免费看| 夜夜操,天天撸| www.maotanji.com| 婷婷五月丁香五月| 五月天激情黄色网址| 色婷婷大香蕉| 色婷婷六月精品| 99精品在线观看视频| 色五月人妻| 懂色av粉嫩AV蜜臀AV| 婷婷九月丁香天堂丁香天堂| 国产片天天爽夜夜爽| 先锋av性爱成人电影| 停停五月色宗合| 久久激情综合| 人人操操| 激情久久五月网| 五月天婷婷爱| 538在线精品| 色综合丁香婷婷| 激情伍月 欧美| 五月天婷婷丁香导航| 嫩草AV久久伊人妇女超级A| 99干在线| 无码一区二区三区四区五区| 婷婷五月色播放| 五月婷婷六月色| 日本欧美999久久久三级片| 三级黄网站| 狠狠色婷婷777| 激情婷婷丁香| 婷婷五月丁香欧洲| 丁香五月婷婷激情视频播放| 综合久| 996热re视频在线观看视频| 色之综合网| 色欲婷婷五月天丁香| 超碰狠狠干99| 狠狠香婷婷五月| 97热精品| www,99色| 五月色精品| 天天干天天日天天操| 欧美VA视频| 日日做夜夜爱| 精品亚洲国产成AV人片传媒| 欧美久久婷婷| 九九热最新| 9热超碰| 日韩一66精品| 婷婷丁香五月亚洲| 91婷婷色| 丁香五月成人婷婷| 激情五月九九九| 日本激情五月| 男女啪啪视频久 9| 五月丁香 啪啪| 五月亭亭开心网| 日韩啪啪自拍| 色五月婷激情| 精品成人无码A片观看香草视频| 丁香五月婷婷啪啪| 91爱啪啪| 成人网站在线观看视频| 99日本在线| 久9无码视频| 五月婷婷丁香六月| 天堂网啪啪| 丁香六月欧美| 成人在线视频男人的天堂4399| 丁香五月网在线观看| 国产做爰视频免费播放| 天天操天天操| www五月婷婷88导航| 玖操97| 碰碰碰97国产| 五月丁香婷婷伊人| 六月色丁香婷婷| 色五月婷婷DVD| 欧美 色婷婷| 五月丁香色播| 碰久久精品w| 丁香六月久| 色吊丝中文字幕| 五月天婷婷乱论小说| 美国不卡视频| 丁香婷婷五月色成人网站| 91大神操美女| 99色色网| 四虎婷婷五月天| 伊人久久丁香狠狠婷婷综合香蕉| 国产午夜精品久久久观看| 99精品丰满| 26uuu最新地址| 操日视频| 五月天激情网图片| 五月五丁香婷婷| 亚洲av电影网站| 五月丁香综合网| 六月99天天婷婷激情综合| 99自拍视频在线| aaaaa不卡| 成人做爰A片免费看视频| 99性感视频| 99碰碰中文| 色婷婷久久| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 婷婷色导航| 亚洲久久视频| 超碰成人影视| 久久久91| 激情五月色综合国产精品| 婷婷自拍| 色婷婷电影网| 日日爱699| 97碰碰人人| 艹B高清无码| 开心激情站| 凹凸7777操操操| 婷婷天天五月天| 久久婷婷综合网| 97久久香草精品视频| 91操在线| 欧美精品999| 婷婷日日夜夜| 精热在线综合网| 奇米影视在线视频| 五月天婷婷久久视频| 久久丁香五月婷婷| 九九色欲网| 国产精品第一国产精品| 五月丁香六月玩女人| 色色综合色视频| 久久天堂女人| 激情九月婷婷| 婷婷在线播放| 六月婷婷网站| 久草大| 韩日AV片| 九九色色| 成人五月丁香社区| 十月丁香九月婷婷综合| 六月五月丁香五月欧美| 五月丁香视频色色| αv中文字幕在线观| 99综合在线| 日韩操逼小电影| 五月丁香激情片| 五月狠狠| 日本三级第一页| 性爱综合网| AV在线资源| 五月天激情丁香| 久久婷婷五月综合色播| 激情综合五月婷| 中文久久婷婷| 婷久久久| 青柠影视免费高清电视剧| 秋霞性爱AV| 操骚货在线| 五月丁香六月婷婷在线播放| 亭亭五月丁香综合欧美| 五月五月婷婷| 色婷婷四虎| 国产黄色在线| 五月激情视频| 99精品视频网站| 五月色婷婷影院| 狠狠狠色激情综合适合| 九九免费精品| 玖久精品视频9| 久久婷婷五月综合激情国产| 996er在线观看| 大香蕉综合| 五月色婷婷中文字幕| 色综合久久88| 综合网色综合| 超碰激情五月| 在线播放成人| 操操熟女| 98色丁香五月婷婷综合网| 色色草97| 一本九九色| 91日综合欧美| 久久色吧| CAoub青青超碰| 九色在线观看91av| 性爱网六月丁香| 五月情涩综合婷婷| 婷婷五月天丁香激情| 亚洲av成人电影在线观看| 亚洲色区17| 综合九九久久| 手机旧版看人妻1025| 欧美操逼天堂| 五月丁香啪啪综合| 欧美日朝成人| 免费AAAAA网| 性五月激情| 深爱激情四射| 国语精品探花| 99久在线精品99re8| 蜘蛛女侠2003满天星免费观看| 亚洲99热| 九九re精品视频在线观看| 最新色色五月天| 激情深爱五月天| 99精品视频在线观看| 欧美槡BBBB槡BBB少妇| 热久综合| 日韩av网站在线观看| 99re在线视频| 性色欲情 网站| 五月天婷婷色播| 丁香五月,激情五月,深爱五月| 国产VA亚洲VA96| 婷婷综合五月| 99热精品在线播放| 激情玖玖sh| 亚州第一A片| 婷婷五月AV| 日韩一66精品| 丁香五月亚综合图片| 婷婷99视频精品| 九九热在线视频| 香蕉久久国产AV一区二区| 婷婷丁香黄色| 狠狠操狠狠爱| 五月综合六月丁| 婷婷五月激情天| 亚洲永久免费| 江苏少妇性BBB搡BBB爽爽爽| 热婷婷久| 色久播播| 激情五月天开心总和网| 婷婷五月天久久| 国产黄色在线观看| 五月婷婷丁香六月| 男人天堂亚洲综合| 人妻久久久久久久| 久久九色| 97五月天婷婷综合激情网| 色五月丁香总合网| 欧州色色| 久久99久久99精品免视看婷婷| 丁香五月伊人| 亚洲色情久久| 十月丁香九月婷婷综合| 色色色色色色色色网站| 国产高清视频91九九九久久久| 99热99干| 人人爱国产| 9999久久久久| 成人网在线视频| 婷婷五月天色网久| 日韩啪| 26uuu成人网| 亚洲婷婷丁香五月在线| 狠狠草狠狠草| 色婷婷成人做爰A片免费看网站| 91在线操| 六月五月婷婷| 在线播放中文字幕| 欧美三级黄色片久久| 婷婷丁香五月欧美人| 综合婷婷| 色婷婷在线影院| 国产高清RV综合aVa| 色激情五月| 亚洲无aV在线中文字幕 | 熟妇天天综合| 99热久久这里只有精品| 丁香五月欧美激情| 久久中国毛毛片爱久久| 午夜九九电影| 狠狠穞A片一區二區三區| 激情五月丁香六月综合AVXXXX| 婷婷五月天成人影片| 五月天综合网| 色综合九九色综合88| www激情com| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 久久五月丁香综合| 五月婷婷六月丁香综合视频在线| 婷婷无码视频| 99久久97久久欧美综合网| 色欲五月婷婷| 精品一二三区久久AAA片| 网色99| 五月丁香成人| 日本97在线| 婷婷社区五月天| 大香蕉丁香| 一级二级香港秋霞欧美欧美秋霞| 欧美大片| 狠狠五月天婷婷| 精品无码久久久久久久久| 无码地址| 久久九色| 五月天激情综合网站| 99性色| 精品乱码视频| 人人干av| 九九热在线亚洲免费视频| 26uuu精品国产| 99视频内射三四| 久色网| 激情婷婷五月久久| 婷婷五月天激情小说| 成人看片网站| 激情五月丁香婷婷| 综合亚洲六月婷婷在线| 丁香五月在线播放| site:901-07.com| 亚洲综合五月天婷婷丁香| 99免费综合网| 天天日日夜夜| 日日想日日夜日日操| 亚洲亚洲人成综合网络| 婷婷五月丁香色情| 亚州第一黄网| 综合久久99| 中文字幕激情综合| 综合色色婷婷| 久久网站免费亚洲| 性做久久久久久久免费看| 99精彩视频在线观看| 爱穴久久| 五月天播播| 91vip在线观看| 五月丁香六月婷婷啪啪| 久久九九免费大视频| 欧美性生交A片免费看| 岛国av电影网站| 六月激情丁香一道本7777| 婷婷午夜精品久久久| 色色综合色视频| 99精品热| 国内婷婷丁香社区在线播放| 无码AV久久久久久久久| 亚洲成人在线综合| 91丨九色丨熟女丰满| 天堂久久婷婷| 五月天成人在线视频网站| WWW色五月天| 欧亚成人A片一区二区| 亚洲色a| 日韩黄色中文字幕| 六月丁香影院| 六月丁香停| 亚洲综合婷婷| 天天舔天天摸天天透| 婷婷丁香五月91| 婷婷俺去也| 国产熟女日日骚五月丁香爱| 久热婷婷在线视频| 一级黄色影片| 色狠狠六月| 婷婷色情五月| 99热在线播放| 婷婷丁香色情| 人妻AV在线| 丁香五月婷婷免费视频| 亚洲欧洲午夜成人精品av| bbwcuckold精品熟妇| 色色六月| 激情五月天婷婷五月天| 色色色色网色色网色色| 婷婷五月天激情电影| 三男玩一女三A片| 综合婷婷五月天| 少妇日麻屄| 久久久久久久久久婷婷| 国产成人99久久亚洲综合精品| 五月丁香六月情亚洲| 色射影院| 丝袜熟女一区二区三区| 色吧五月婷婷| 五月天综合在线观看| 激情综合5月| 婷婷五月色情| 日本不卡一区二区三区| 97香蕉久久超级碰碰高清版 | 五月婷婷深深爱| 人妻无码视频网| 色婷婷亚洲婷婷| 亚美欧色影院| 另类图片五月天婷婷| 丁香五月最新地址| 色色六月| 久久久国产精品黄毛片| 伊人久久婷婷| 五月在线| 热久久精品视频网站| 就是色婷婷五月亚洲色| 婷婷色片| 超碰在线资源| 国产看真人毛片爱做A片| 成人国产综合| 久久精热| 五月香六月婷| 狠狠擼综合| 伊人网欧美在线男人天堂五月丁香| 无码九九九九| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV| 色吧五月婷婷| 九九99免费视频| 狠狠狠色激情综合适合| 激情五月综合网最新| 久久久婷丁香五月| 丁香五月AV在线| 欧亚洲在线高清视频| 99黄色在线视频精品熟女| 人人操操97| 97色综合| 婷五月天影院| 夜夜嗨一区二区三区直播内容 | 成人五月天丁香婷| 在线99色| 97碰碰电影| 色五月综合97| 五月天激情黄色网址| 九九婷婷热| 超极99精品| 婷婷五月综合性爱| 久久精品A片777777| 夜精品无码A片一区二区蜜桃| 五月婷婷综合网| 91丨九色丨熟女高潮| 91欧美日韩综合| 97啪啪| 五月婷婷大香蕉| 婷婷午夜天| 五月婷婷深深爱| 激情五月天视频| 99∨VTV| 福利视频在线播放| 成人国产欧美大片一区| 情欲禁地| 丁香五月花影院| 亚韩精品视频1区| 丁香五月熟女| 亚洲天堂碰碰婷婷| 久久丁香婷婷五月| av无码电影| 日本久久高清| 人人色人人摸人人看| 热的国产,热的综合,热的有码| 亚洲激情电影五月天色婷婷丁香一起草| 国产成人VA| 天天日夜夜爽。| 丁香五月五月婷婷| www.色综合.com| 五月天婷婷激情小说电影| 五月天激情网图片| 五月丁香花成人社区| 欲求不满的人妻| 一起草无码| 色天堂A| 色五月婷婷狠狠撸| 九九热这里都是精品6| 丁香五月激情综合网激情五月| 五月天激情图| 五月天天天天天天天天天天天天天天天婷婷婷| 五月天婷婷在线视频| 色婷婷网大全在线| 婷婷五月天免费| 综合婷婷五月丁香在线观看| 亚洲男女激情| 婷婷激情综合网| 欧美性色A片免费免费观看的| 九七色色六月丁香| 少妇婷婷五月天| 五月婷婷大香蕉| 99热在线中文字幕| 人人视频人人干人人做| 99热6这里只有精品| 日产精品久久久久久久蜜臀| 丁香婷婷五月天成人| 9久久久久久久久久久| 99热国内| 婷婷香五月天| 天天操天天操天天操天天操天天操 | 狠狠色大香蕉| 亚洲综合激| 天天干天天操天天拍| 激情婷婷五月天| av免费在线观看0| 婷婷五月天堂| 新激情五月天色播| 五月丁香无码| 欧美综合激情| 色婷婷久久天天性爱| 五月婷婷激情色情网| 丁XX 成人| 国产真人做爰视频免费| 超碰猛烈的性猛交| 激情五月六月婷婷综合啪啪| 五月天婷婷乱论小说| 六月婷婷色综合| 国产免费一区二区三州老师F1F1……| 天天爽夜夜爽夜夜爽精品| 综合九九| 97人人射| 婷婷少妇激情| 婷婷亚洲色| 1024日韩| 国产97色在线 | 日韩| 五月丁香六月婷婷综合伊人| 丁香五月激情网| 日韩丁香涩| 99视频这里只有免费精品| 五月天四色房丁香亭亭| 国产肥白大熟妇BBBB视频| 免费婷婷| 激情五月丁香五月| 亚洲亚洲人成综合网络| 伊人狠狠丁香婷婷综合尤物| 色五月首页| 大地9中文在线观看免费高清| 超碰97干| 色七七色九九| 在线看的免费网站| 五月丁香啪啪激情| 国产视频婷婷| 色综合色香蕉网| 久久这有这里精品| 久99热| www.91婷婷| 日韩视频99| 久久久91精品| 五月www| 欧美日韩aaa| 4399亚洲视频| 六月婷婷五月丁香| 青青操日本摸摸看看| 伊人婷婷激情| 影音先锋女人AA鲁色资源| 成人午夜无码视频| 色五月婷婷操逼| 五月丁香最新| 激情五月,婷婷五月,丁香五月| av一级棒av| 夜夜夜夜操| 四川BBB搡BBB搡多人乱亂| 97色色色色| 性爱综合网| 亚洲天堂热| 九九九九毛片| 99riAv1国产在线观看| 五月婷婷综合丁香视频| xxxx五月天色色| 激情五月,色播五月| 五月做爱| 很很干夜夜干| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 五月丁香六月色情网欧美| 99九九精品| 这里只有精品,日韩视频| 久久九九网| 99热欧| 国产精产国品一二三在观看| 精品九九视频| 开心婷婷五月综合| 丁香激情综合| 丁香五月综合久久|