日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Node.js 入门详解 (三)

發布時間:2024/9/27 编程问答 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Node.js 入门详解 (三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 1. 初識Express
    • 1.1 Express簡介
      • 1.1.1 什么是Express
      • 1.1.2 進一步理解 Express
      • 1.1.3 Express能做什么
      • 1.1.4 Express 中的數據分類
    • 1.2 Express 的基本使用
      • 1.2.1 安裝
      • 1.2.2 創建基本的web服務器
      • 1.2.3 監聽 GET請求
      • 1.2.4 監聽 post 請求
      • 1.2.5 把內容響應給客戶端
      • 1.2.6 獲取 URL 中攜帶的查詢參數
      • 1.2.7 獲取 URL中的動態參數
    • 1.3 托管靜態資源
      • 1.3.1 express.static()
      • 1.3.2 托管多個靜態資源項目
      • 1.3.3 掛載路徑前綴
    • 1.4 nodemon
      • 1.4.1 nodemon的作用
      • 1.4.2 安裝nodemon
      • 1.4.3 使用nodemon
  • 2. Express路由
    • 2.1 路由的概念
      • 2.1.1 什么是路由
      • 2.1.2 現實生活中的路由
      • 2.1.3 Express中的路由
      • 2.1.4 Express中的路由的例子
      • 2.1.5 路由的匹配過程
    • 2.2 路由的使用
      • 2.2.1 最簡單的用法
      • 2.2.2 模塊化路由
      • 2.2.3 創建路由模塊
      • 2.2.4 注冊路由模塊
      • 2.2.5 為路由模塊添加前綴
  • 3. 中間件
    • 3.1 中間件的概念
      • 3.1.1 什么是中間件
      • 3.1.2 . 現實生活中的例子
      • 3.1.3 . Express 中間件的調用流程
      • 3.1.4 . Express 中間件的格式
      • 3.1.5 . next 函數的作用
    • 3.2 中間件的初體驗
      • 3.2.1 定義中間件函數
      • 3.2.2 全局生效 的中間件
      • 3.2.3 定義全局中間件的簡化形式
      • 3.2.4 中間件的 作用
      • 3.2.5 定義多個全局中間件
      • 3.2.6 局部生效 的中間件
      • 3.2.7 定義多個局部中間件
      • 3.2.8 了解中間件的 5 個 使用注意事項
    • 3.3 中間件的分類
      • 3.3.1 應用級別的中間件
      • 3.3.2 路由級別的中間件
      • 3.3.3 錯誤級別 的中間件
      • 3.3.4 Express 內置 的中間件
      • 3.3.5 第三方 的中間件
    • 3.4 自定義中間件
      • 3.4.1 需求描述與實現步驟
      • 3.4.2 定義中間件
      • 3.4.3 監聽 req 的 data 事件
      • 3.4.4 監聽 req 的 end 事件
      • 3.4.5 使用 querystring 模塊解析請求體數據
      • 3.4.6 將解析出來的數據對象掛載為 req.body
      • 3.4.7 將自定義中間件封裝為模塊
  • 4. 使用Express寫接口
    • 4.1 創建基本的服務器
    • 4.2 創建API路由模塊
    • 4.3 編寫 GET 接口
    • 4.4 編寫 POST 接口
    • 4.5 CORS跨域資源共享
      • 4.5.1 接口的 跨域問題
      • 4.5.2 使用 cors 中間件 解決跨域問題
      • 4.5.3 什么是 CORS
      • 4.5.4 . CORS 的注意事項
      • 4.5.5 . CORS 響應頭部 Access-Control-Allow-Origin
      • 4.5.6 . CORS 響應頭部 Access-Control-Allow-Headers
      • 4.5.7 . CORS 響應頭部 Access-Control-Allow-Methods
      • 4.5.8 . CORS 請求的分類
      • 4.5.9 簡單請求
      • 4.5.10 預檢請求
      • 4.5.11 . 簡單請求 和 預檢請求 的區別
    • 4.6 JSONP接口
      • 4.6.1 JSONP 的概念與特點(回顧)
      • 4.6.2 創建 JSONP 接口的注意事項
      • 4.6.3 實現 JSONP 接口的步驟
      • 4.6.4 實現 JSONP 接口的具體代碼
      • 4.6.5 在網頁中使用 jQuery 發起 JSONP 請求


1. 初識Express


1.1 Express簡介

1.1.1 什么是Express

官方給出的概念:Express 是 基于 Node.js 平臺 快速開放極簡Web 開發框架

通俗的理解:Express 的作用和 Node.js 內置的 http 模塊類似,是專門用來創建 Web 服務器的

Express的本質 :就是一個 npm 上的第三方包,提供了快速創建 Web 服務器的便捷方法。


Express 的中文官網:https://www.expressjs.com.cn/


1.1.2 進一步理解 Express

:不使用 Express 能否創建 Web 服務器?
:能,使用 Node.js 提供的原生 http 模塊即可。

:既生瑜何生亮(有了 http 內置模塊,為什么還有用 Express?
:http 內置模塊用起來很復雜,開發效率低; Express 是基于內置的 http 模塊進一步封裝出來的,能夠極大的提高開發效率。

:http 內置模塊與 Express 是什么關系?
:類似于瀏覽器中 Web API 和 jQuery 的關系。后者是基于前者進一步封裝出來的。

1.1.3 Express能做什么

對于前端程序員來說,最常見的 兩種 服務器,分別是:

  • Web 網站服務器 :專門對外提供 Web 網頁資源的服務器;
  • API 接口服務器 :專門對外提供 API 接口的服務器。

使用Express ,我們可以方便、快速的創建 Web 網站 的服務器或 API 接口 的服務器。


1.1.4 Express 中的數據分類

在Express中,數據分成 3 種:表單數據查詢字符串數據url里攜帶的數據

  • 表單數據:通過 req.body進行獲取;
  • 查詢字符串數據:通過req.query 進行獲取;
  • URL里攜帶的數據:通過req.params進行獲取。

1.2 Express 的基本使用

1.2.1 安裝

在項目所處的目錄中,運行如下的終端命令,即可將express 安裝到項目中使用:

npm i express@4.17.1

1.2.2 創建基本的web服務器

// 1、導入 express const express = require('express') // 2、創建 web 服務器 const app = express()// 3、調用 app.listen(端口號,啟動成功后的回調函數),啟動服務器 app.listen(80,() => {console.log('express server running at http://127.0.0.1') })

1.2.3 監聽 GET請求

通過 app.get () 方法,可以監聽客戶端的 GET 請求,具體的語法格式如下:

// 參數1:客戶端請求的 URL 地址 // 參數2:請求對應的處理函數 // req:請求對象(包含了與請求相關的屬性和方法) // res:響應對象(包含了與響應相關的屬性與方法) app.get('請求URL'function(req,res) { /* 處理函數 */})

1.2.4 監聽 post 請求

通過 app.post () 方法,可以監聽客戶端的 POST 請求,具體的語法格式如下:

// 參數1:客戶端請求的 URL 地址 // 參數2:請求對應的處理函數 // req:請求對象(包含了與請求相關的屬性和方法) // res:響應對象(包含了與響應相關的屬性與方法) app.post('請求URL'function(req,res) { /* 處理函數 */})

1.2.5 把內容響應給客戶端

通過 res.send () 方法,可以把處理好的內容,發送給客戶端:

app.get('/user',(req,res) => {// 向客戶端發送 JSON對象res.send({ name:'zs', age:20, gender:'男' }) })app.post('/user', (req,res) =>{// 向客戶端發送文本內容res.send('請求成功') })

注: res.send()方法,既可以響應JSON對象,也可以響應一段普通文本。

運行 node 命令,啟動服務器之后,可借助接口調試工具 Postman,來測試這兩次請求。

發起 GET 請求如下:



發起POST 請求如下:



可以看到 GET 和 POST 的請求,客戶端分別響應回了一段JSON格式的數據對象和文本字符串。

1.2.6 獲取 URL 中攜帶的查詢參數

通過 req.query 對象,可以訪問到客戶端通過查詢字符串 的形式,發送到服務器的參數:

app.get('/', (req,res) =>{// 客戶端使用 ?name=zs&age=20 這種查詢字符串形式,發送到服務器的參數// 通過 req.query 可以獲取到客戶發送過來的查詢參數// 注意:默認情況下,req.query 是一個空對象console.log(req.query);res.send(req.query) })

1.2.7 獲取 URL中的動態參數

通過 req.params 對象,可以訪問到 URL 中,通過:(冒號)匹配到的 動態參數

// 注意:這里的 :id 是一個動態的參數 app.get('/user/:id', (req, res) => {// req.params 是動態匹配到的 URL 參數。默認也是一個空對象console.log(req.params);res.send(req.params) })


:id - 冒號后面是動態參數的名稱,理論上可以任意(合法即可)。可以跟多個參數。

例如:http://127.0.0.0/user/:id/:username,發起請求后,服務器端匹配如圖:



1.3 托管靜態資源

1.3.1 express.static()

express 提供了一個非常好用的函數,叫做 express.static(),通過它,我們可以非常方便地創建一個靜態資源服務器

例如,通過app.use(express.static('public'))就可以將 public 目錄下的圖片、CSS 文件、JavaScript 文件對外開放訪問了:


現在,就可以訪問到 public 目錄中的所有文件了:

http://localhost:3000/images/bg.jpg
http://localhost:3000/css/style.css
http://localhost:3000/js/login.js


📌注意:
Express 在 指定的 靜態目錄中查找文件,并對外提供資源的訪問路徑。因此,存放靜態文件的目錄名未包含在 URL 中


1.3.2 托管多個靜態資源項目

如果要托管多個靜態資源目錄,就要多次調用 express.static() 函數:


訪問靜態資源文件時,express.static() 函數會根據目錄的添加順序查找所需的文件。

1.3.3 掛載路徑前綴

如果希望在托管的靜態資源訪問路徑之前,掛載路徑前綴 ,則可以使用如下的方式:

app.use('public',express.static('public'))

這樣,就可以通過帶有/public 前綴地址來訪問 public 目錄中的文件了:

http://localhost:3000/public /images/kitten.jpg
http://localhost:3000/public /css/style.css
http://localhost:3000/public /js/app.js


1.4 nodemon

1.4.1 nodemon的作用

在編寫調試 Node.js 項目的時候,如果修改了項目的代碼,則需要頻繁的手動 close 掉,然后再重新啟動,非常繁瑣。

現在,我們可以使用 nodemon(https://www.npmjs.com/package/nodemon)這個工具,它能夠 監聽項目文件的變動 ,當代碼被修改后 nodemon 會 自動幫我們重啟項目 ,極大方便了開發和調試。

1.4.2 安裝nodemon

在終端中,運行如下命令,即可將 nodemon 安裝為全局可用的工具:

1.4.3 使用nodemon

當基于 Node.js 編寫了一個網站應用的時候,傳統的方式,是運行 node app.js 命令,來啟動項目。這樣做的壞處是:代碼被修改之后,需要手動重啟項目。

現在,我們可以將 node 命令替換為 nodemon 命令,使用 nodemon app.js 來啟動項目。這樣做的好處是:代碼被修改之后,會被 nodemon 監聽到,從而實現自動重啟項目的效果。



2. Express路由

2.1 路由的概念

2.1.1 什么是路由

廣義上來講,路由就是 映射關系(或對應關系)。

2.1.2 現實生活中的路由



2.1.3 Express中的路由

在 Express 中,路由指的是客戶端的請求服務器處理函數之間的映射關系

Express 中的路由分 3 部分:

  • 請求的類型
  • 請求的 URL 地址
  • 處理函數

格式如下:



2.1.4 Express中的路由的例子

// 匹配 GET 請求,且請求 URL 為 / app.get('/',function (req,res) {res.send('Hellow World!') }) // 匹配 POST 請求,且請求 URL 為 / app.post('/',function(req,res){res.send('Got a POST request') })

2.1.5 路由的匹配過程

每當一個請求到達服務器之后,需要先經過路由的匹配 ,只有匹配成功之后,才會調用對應的處理函數。

在匹配時,會按照路由的順序進行匹配,如果請求類型請求的 URL 同時匹配成功,則 Express 會將這次請求,轉交給對應的 function 函數進行處理。



路由匹配的注意點:

  • 按照定義的 先后順序 進行匹配;(如果前面的路由匹配成功,則終止后面的路由匹配。)
  • 請求類型請求的URL 同時匹配成功,才會調用對應的處理函數。

  • 2.2 路由的使用

    2.2.1 最簡單的用法

    在 Express 中使用路由最簡單的方式,就是把路由掛載到 app 上

    1)cd 根目錄名稱(本示例是MyCase目錄下的testm文件夾),并初始化一個package.json包管理文件。

    cd testm npm init -y

    如下圖:

    2)安裝Express(注意,根據前面的約定,需安裝指定的版本號,因此需加上@4.17.1)

    npm i express@4.17.1

    如下圖:

    安裝完畢后,項目根目錄生成了 package.json、package-lock.json以及node_modules文件夾。

    3)創建路由對應的 JavaScript 文件。示例代碼如下:


    通過 nodemon 命令將項目運行起來

    4)借助 Postman[下載地址]這個軟件模擬發起客戶端請求,測試這兩個路由能否正常生效。

    • GET 請求如下圖:



    • POST 請求如下圖:


    【測試結果】:GET 和 POST 均能正常請求成功,服務器也返回了對應的文本內容。

    這種把路由掛載 app 實例上的方式,實際開發中很少用。因為隨著代碼的增多,會掛載越來越多的路由,文件體積會越來越大。


    2.2.2 模塊化路由

    為了方便對路由進行模塊化的管理,Express 不建議 將路由直接掛載到 app 上,而是 推薦將路由抽離為單獨的模塊

    將路由抽離為單獨模塊的步驟如下:

  • 創建路由模塊對應的 .js 文件;
  • 調用 express.Router() 函數創建路由對象;
  • 向路由對象上掛載具體的路由;
  • 使用 module.exports 向外共享路由對象;
  • 使用 app.use() 函數注冊路由模塊。

  • 2.2.3 創建路由模塊


    🔔 注意:創建路由對象時,Router首字母大寫。
    app.use()函數的作用,是用來注冊全局中間件

    2.2.4 注冊路由模塊


    注冊好路由,確保啟動服務器的情況下,打開Postman 接口測試工具,可以檢測是否創建成功。

    2.2.5 為路由模塊添加前綴

    類似于托管靜態資源時,為靜態資源統一掛載訪問前綴一樣,路由模塊添加前綴的方式也非常簡單:




    3. 中間件

    3.1 中間件的概念

    3.1.1 什么是中間件

    中間件(Middleware ),特指 業務流程中間處理環節

    3.1.2 . 現實生活中的例子

    在處理污水的時候,一般都要經過三個處理環節 ,從而保證處理過后的廢水,達到排放標準。



    處理污水的這三個中間處理環節,每一個環節都有輸入和輸出(上一節的輸出作為一下節的輸入),這樣的環節就可以叫做中間件。

    3.1.3 . Express 中間件的調用流程

    當一個請求到達 Express 的服務器之后,可以連續調用多個中間件,從而對這次請求進行 預處理




    3.1.4 . Express 中間件的格式

    Express 的中間件, 本質 上就是一個 function 處理函數, Express 中間件的格式如下:



    注意:中間件函數的形參列表中,必須包含 next 參數 。而路由處理函數中只包含 req 和 res 。

    3.1.5 . next 函數的作用

    next 函數 是實現 多個中間件連續調用 的關鍵,它表示把流轉關系 轉交 給下一個 中間件路由




    3.2 中間件的初體驗

    3.2.1 定義中間件函數

    可以通過如下的方式,定義一個最簡單的中間件函數:



    3.2.2 全局生效 的中間件

    客戶端發起的任何請求 ,到達服務器之后 都會觸發的中間件 ,叫做全局生效的中間件。

    通過調用app.use(中間件函數 ),即可定義一個 全局生效 的中間件,示例代碼如下:



    3.2.3 定義全局中間件的簡化形式



    3.2.4 中間件的 作用

    多個中間件之間,共享同一份 req 和 res 。基于這樣的特性,我們可以在 上游 的中間件中, 統一 為 req 或 res對象添加自定義的屬性或方法 ,供下游 的中間件或路由進行使用。




    3.2.5 定義多個全局中間件

    可以使用 app.use () 連續定義多個 全局中間件。客戶端請求到達服務器之后,會按照中間件 定義的先后順序 依次進行調用,示例代碼如下:


    3.2.6 局部生效 的中間件

    不使用 app.use() 定義的中間件,叫做局部生效的中間件 ,示例代碼如下:


    3.2.7 定義多個局部中間件

    可以在路由中,通過如下兩種 等價 的方式, 使用多個局部中間件:


    3.2.8 了解中間件的 5 個 使用注意事項

  • 一定要在 路由之前 注冊中間件;
  • 客戶端發送過來的請求, 可以連續調用多個中間件進行處理;
  • 執行完中間件的業務代碼之后, 不要忘記調用 next() 函數
  • 為了 防止代碼邏輯混亂,調用 next() 函數后不要再寫額外的代碼;
  • 連續調用多個中間件時,多個中間件之間, 共享 req 和 res 對象。

  • 3.3 中間件的分類

    為了方便理解記憶中間件的使用, Express 官方把常見的中間件用法,分成了 5 大類 ,分別是:

  • 應用級別的中間件;
  • 路由級別的中間件;
  • 錯誤級別的中間件;
  • Express 內置的中間件;
  • 第三方的中間件

  • 3.3.1 應用級別的中間件

    通過app.use() 或 app.get() 或 app.post() 綁定到 app 實例上的中間件 ,叫做應用級別的中間件,代碼示例如下:



    3.3.2 路由級別的中間件

    綁定到express.Router() 實例上的中間件,叫做路由級別的中間件。它的用法和應用級別中間件沒有任何區別。只不過, 應用級別中間件是綁定到 app 實例上路由級別中間件綁定到 router 實例上 ,代碼示例如下:



    3.3.3 錯誤級別 的中間件

    錯誤級別中間件的作用 :專門用來捕獲整個項目中發生的異常錯誤,從而防止項目異常崩潰的問題。
    格式:錯誤級別中間件的 function 處理函數中, 必須有 4 個形參 ,形參順序從前到后,分別是 (err , req, res, next)。


    🔔 注意:

    錯誤級別的中間件,必須注冊在所有路由之后

    3.3.4 Express 內置 的中間件

    自 Express 4.16.0 版本開始, Express 內置了 3 個 常用的中間件,極大的提高了 Express 項目的開發效率和體驗:

  • express.static 快速托管靜態資源的內置中間件,例如: HTML 文件、圖片、 CSS 樣式等(無兼容性);
  • express.json 解析 JSON 格式的請求體數據( 有兼容性 ,僅在 4.16.0+ 版本中可用);
  • express.urlencoded 解析 URL encoded 格式的請求體數據( 有兼容性 ,僅在 4.16.0+ 版本中可用)


  • 3.3.5 第三方 的中間件

    非 Express 官方內置的,而是由第三方開發出來的中間件,叫做第三方中間件。在項目中,我們可以 按需下載配置 第三方中間件,從而提高項目的開發效率。

    例如:在express@4.16.0 之前的版本中,經常使用 body parser 這個第三方中間件,來解析請求體數據。使用步驟如下:

  • 運行 npm install body parser 安裝中間件;
  • 使用 require 導入中間件;
  • 調用 app.use() 注冊并使用中間件。

  • 🔔 注:

    Express 內置的 express.urlencoded 中間件,就是基于 body parser 這個第三方中間件進一步封裝出來的。

    3.4 自定義中間件

    3.4.1 需求描述與實現步驟

    自己 手動模擬 一個類似于 express.urlencoded 這樣的中間件,來 解析 POST 提交到服務器的表單數據

    實現步驟:

  • 定義中間件;
  • 監聽 req 的 data 事件;
  • 監聽 req 的 end 事件;
  • 使用 querystring 模塊解析請求體數據;
  • 將解析出來的數據對象掛載為 req.body;
  • 將自定義中間件封裝為模塊

  • 3.4.2 定義中間件

    使用 app.use() 來定義全局生效的中間件,代碼如下:


    3.4.3 監聽 req 的 data 事件

    中間件中,需要監聽 req 對象的 data 事件,來獲取客戶端發送到服務器的數據。

    如果數據量比較大,無法一次性發送完畢,則客戶端會 把數據切割后 分批發送到服務器。所以 data 事件可能會觸發多次,每一次觸發 data 事件時, 獲取到數據只是完整數據的一部分 ,需要手動對接收到的數據進行拼接。



    3.4.4 監聽 req 的 end 事件

    當請求體數據 接收完畢 之后,會自動觸發 req 的 end 事件

    因此,我們可以在req 的 end 事件中,拿到并處理完整的請求體數據 。示例代碼如下:


    現在就可以用 Postman 來模擬客戶端發起 post 請求,填寫完模擬數據,點擊 send ,如圖:

    可以看到服務端沒有響應,但在終端里,已經有打印出請求體的字符串,如下所示:


    3.4.5 使用 querystring 模塊解析請求體數據

    Node.js 內置了一個 querystring 模塊專門用來處理查詢字符串 。通過這個模塊提供的 parse() 函數,可以輕松把查詢字符串,解析成對象的格式。示例代碼如下:



    3.4.6 將解析出來的數據對象掛載為 req.body

    上游中間件下游中間件及路由 之間, 共享同一份 req 和 res 。因此,我們可以將解析出來的數據,掛載為 req 的自定義屬性,命名為 req.body ,供下游使用。示例代碼如下:



    3.4.7 將自定義中間件封裝為模塊

    為了優化代碼的結構,我們可以把自定義好的中間件函數拆分出去,封裝為獨立的模塊 ,示例代碼如下:


    【自定義中間件的完整代碼】
    1)拆分出去封裝好的 custom-body-parser 模塊:

    // 導入 Node.js 內置的 querystring 模塊 const qs = require('querystring');// 解析表單數據的中間件函數 const bodyParser = (req, res, next) => {// 定義中間件的具體業務邏輯// 1、定義一個 str 字符串,專門用來存儲客戶端發送過來的請求體let str = '';// 2、監聽 req 的 data 事件req.on('data', (chunk) => {str += chunk;});// 3、監聽 req 的 end 事件req.on('end', () => {// str 中是完整的請求體數據// console.log(str);// TODO:把字符串格式的請求體數據,解析成對象格式const body = qs.parse(str);// 將 body 掛載為 req 的屬性req.body = body;next();}) }// 向外暴露成員(解析請求體數據的中間件函數) module.exports = bodyParser;

    2)拆分后的中間件 + custom-body-parser 模塊導入與使用:

    // 導入 express const express = require('express');// 創建 express 服務器實例 const app = express();// 1、導入自己封裝的中間件模塊 const myBodyParser = require('./custom-body-parser'); // 2、將自定義中間件函數,注冊為全局可用的中間件 app.use(myBodyParser);app.post('/user', (req, res) => {res.send(req.body); })// 調用 app.listen方法 指定端口號并啟動 web 服務器 app.listen(80, () => {console.log('Express server running at http://127.0.0.1'); })

    4. 使用Express寫接口


    4.1 創建基本的服務器



    4.2 創建API路由模塊



    4.3 編寫 GET 接口



    4.4 編寫 POST 接口


    🔔注意:
    1、如果要獲取 URL-encoded 格式的請求體數據,必須配置中間件 ;
    2、需將此中間件注冊在路由模塊注冊之前方能生效。

    app.use(express.urlencoded ({ extended: false}))

    調用urlencoded()方法期間指定的配置對象 {extended: false}是固定寫法

    【完整代碼】

    1)服務器創建、模塊化路由導入與注冊

    // 導入express const express = require('express'); // 創建服務器 const app = express();// 導入路由模塊 const router = require('./router'); // 注冊 RUL-encoded 中間件 app.use(express.urlencoded ({ extended: false})) // 注冊路由模塊 app.use('/api',router);// 啟動服務器 app.listen(80, () => {console.log('server running at http://127.0.0.1'); })

    2)API 接口模塊化路由

    // 導入 express 模塊 const express = require('express'); // 調用express.Router 方法生成路由實例 const router = express.Router();// 掛載對應的路由 router.get('/get', (req, res) => {// 通過 req.query 獲取客戶端通過查詢字符串,發送到服務器的數據const query = req.query;// 調用 res.send() 方法,向客戶端響應處理的結果res.send({status: 0, // 0 表示處理成功,1 表示處理失敗msg: 'GET 請求成功!', // 狀態描述data: query // 需要響應給客戶端的數據}); });// 定義 POST 接口 router.post('/post', (req, res) => {// 通過 req.body 獲取請求體中包含的 url-encoded 格式的數據const body = req.body// 調用 res.send() 方法向客戶端響應數據res.send({status: 0,msg: 'POST 請求成功!',data: body}); });// 暴露 router 供外界使用 module.exports = router;

    4.5 CORS跨域資源共享


    4.5.1 接口的 跨域問題

    實際上,前面編寫的GET和 POST接口,存在一個很嚴重的問題:不支持跨域請求

    新建一個 html 文件,測試跨域的問題

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="https://cdn.staticfile.org/jquery/3.4.1/jquery.min.js"></script> </head><body><button id="btnGET">GET</button><button id="btnPOST">post</button><script>$(function() {// 1、測試 GET 接口$('#btnGET').on('click', function() {$.ajax({type: 'GET',url: 'http://127.0.0.1/api/get',data: {name: 'zs',age: 20},success: function(res) {console.log(res);}})})// 2、測試 POST 接口$('#btnPOST').on('click', function() {$.ajax({type: 'POST',url: 'http://127.0.0.1/api/post',data: {bookname: '水滸傳',author: '施耐奄'},success: function(res) {console.log(res);}})})})</script> </body></html>

    當點擊按鈕會,就會拋出以下錯誤提示:

    首先,我們知道只要協議、域名、端口號任何一項不同,都存在跨域問題。因此,本案例之所以報錯,就是因為跨域的問題。


    解決接口跨域問題的方案( 主要下面 2 種):

  • CORS (主流的解決方案,實際開發推薦方案;)
  • JSONP(有缺陷的解決方案:只支持 GET 請求)。

  • 4.5.2 使用 cors 中間件 解決跨域問題

    cors是 Express 的一個第三方中間件。通過安裝和配置 cors 中間件,可以很方便地解決跨域問題。

    使用步驟( 分 3 步):

  • npm install cors // 安裝中間件
  • const cors = require('cors') // 導入中間件
  • 在路由之前調用: app.use(cors()) // 配置中間件(一定要在路由之前配置)。

  • 4.5.3 什么是 CORS

    CORS(Cross-Origin Resource Sharing ,即跨域資源共享)由一系列 HTTP 響應頭 組成,這些 HTTP 響應頭決定瀏覽器是否阻止前端 JavaScript 代碼跨域獲取資源

    瀏覽器的 同源安全策略 默認會阻止網頁“跨域”獲取資源。但如果接口服務器 配置了 CORS 相關的 HTTP 響應頭,就可以 解除瀏覽器端的跨域訪問限制




    4.5.4 . CORS 的注意事項

  • CORS 主要在 服務器端 進行配置。客戶端瀏覽器 無須做任何額外的配置 ,即可請求開啟了 CORS 的接口;
  • CORS 在瀏覽器中 有兼容性 。只有支持 XMLHttpRequest Level2 的瀏覽器,才能正常訪問開啟了 CORS 的服務端接口(例如: IE10+ 、 Chrome4+ 、 FireFox3.5+FireFox3.5+)。

  • 4.5.5 . CORS 響應頭部 Access-Control-Allow-Origin

    響應頭部中可以攜帶一個 Access-Control-Allow-Origin 字段,其語法如下:


    其中,origin 參數的值指定了 允許訪問該資源的外域 URL


    例如,下面的字段值將 只允許 來自 http://itcast.cn 的請求:



    如果指定了Access-Control-Allow-Origin 字段的值為 通配符 **,表示允許來自任何域的請求,示例代碼如下:



    4.5.6 . CORS 響應頭部 Access-Control-Allow-Headers

    默認情況下,CORS 支持 客戶端向服務器 發送如下的 9請求頭

    Accept、Accept-Language、Content-Language、DPR、Downlink、Save-Data、Viewport-Width 、Width、Content-Type(值僅限于 text/plain 、 multipart/form-data 、 application/x-www-form-urlencoded 三者之一)

    如果客戶端向服務器發送了額外的請求頭信息 ,則需要在 服務器端 ,通過 Access-Control-Allow-Headers 對額外的請求頭進行聲明 ,否則這次請求會失敗!



    4.5.7 . CORS 響應頭部 Access-Control-Allow-Methods

    默認情況下,CORS僅支持客戶端發起GETPOSTHEAD請求。

    如果客戶端希望通過 PUTDELETE 等方式請求服務器的資源,則需要在服務器端,通過 Access-Control-Alow-Methods 指明實際請求所允許使用的 HTTP 方法

    示例代碼:


    4.5.8 . CORS 請求的分類

    客戶端在請求 CORS接口 時,根據 請求方式請求頭 的不同,可以將 CORS 的請求分為 兩大類 ,分別是:

    • 簡單請求;
    • 預檢請求。

    4.5.9 簡單請求

    同時滿足以下兩大條件的請求,就屬于簡單請求

  • 請求方式:GET 、 POST 、 HEAD 三者之一
  • HTTP 頭部信息不超過以下幾種字段:無自定義頭部字段、Accept、Accept-Language、Content-Language、DPR、Downlink、 Save-Data、Viewport-Width、Width、Content-Type(只有三個值 application/x-www-form-urlencoded、 multipart/form-data、text/plain)

  • 4.5.10 預檢請求

    只要符合以下任何一個條件的請求,都需要進行預檢請求:

  • 請求方式為 GET、POST、HEAD之外的請求 Method 類型
  • 請求頭中 包含自定義頭部字段
  • 向服務器發送了 application/json 格式的數據
  • 在瀏覽器與服務器正式通信之前,瀏覽器會 先發送 OPTION 請求進行預檢,以獲知服務器是否允許該實際請求 ,所以這一次的 OPTION 請求稱為“預檢請求”。 服務器成功響應預檢請求后,才會發送真正的請求,并且攜帶真實數據

    4.5.11 . 簡單請求 和 預檢請求 的區別

    簡單請求的特點:客戶端與服務器之間 只會發生一次請求

    預檢請求的特點:客戶端與服務器之間會發生兩次請求 OPTION 預檢請求成功之后,才會發起真正的請求

    4.6 JSONP接口

    4.6.1 JSONP 的概念與特點(回顧)

    概念
      瀏覽器端通過 <script> 標簽的 src 屬性,請求服務器上的數據,同時,服務器返回一個函數的調用。這種請求數據的方式叫做 JSONP 。

    特點

  • JSONP 不屬于真正的 Ajax 請求,因為它沒有使用 XMLHttpRequest 這個對象。
  • JSONP 支持 GET 請求,不支持 POST、PUT、DELETE 等請求。

  • 4.6.2 創建 JSONP 接口的注意事項

    如果項目中已經配置了 CORS 跨域資源共享,為了 防止沖突,必須在配置 CORS 中間件之前聲明 JSONP 的接口 。否則JSONP 接口會被處理成開啟了 CORS 的接口。示例代碼如下:



    4.6.3 實現 JSONP 接口的步驟

  • 獲取 客戶端發送過來的 回調函數的名字
  • 得到要 通過 JSONP 形式 發送給客戶端的數據
  • 根據前兩步得到的數據, 拼接出一個函數調用的字符串
  • 把上一步拼接得到的字符串,響應給客戶端的 <script> 標簽進行解析執行。

  • 4.6.4 實現 JSONP 接口的具體代碼



    4.6.5 在網頁中使用 jQuery 發起 JSONP 請求

    調用 $ajax() 函數, 提供 JSONP 的配置選項 ,從而發起 JSONP 請求,示例代碼如下:


    <<< 第三部分(完)


    上一篇:Node.js 入門詳解 (二)


    下一篇:Node.js 入門詳解 (四)

    總結

    以上是生活随笔為你收集整理的Node.js 入门详解 (三)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    人人干天天射 | 日韩黄色网络 | 色多多视频在线观看 | 丁香六月在线 | 久久夜视频 | 天天操天天吃 | 亚洲一级电影在线观看 | 久久人人爽爽人人爽人人片av | 91久久久久久久一区二区 | 狠狠干狠狠插 | 激情视频久久 | 一级黄色片在线 | 久久婷婷一区二区三区 | 欧美一区二区三区四区夜夜大片 | 国产成人一区二区三区久久精品 | 久久久久久久久久久久久久av | 国产99久久九九精品免费 | 91麻豆文化传媒在线观看 | 色播五月婷婷 | 国产 日韩 在线 亚洲 字幕 中文 | 五月婷婷丁香六月 | 中文字幕刺激在线 | 在线观看的av | 综合黄色网 | 五月婷婷中文字幕 | 四虎国产精品免费观看视频优播 | 日韩欧美在线观看一区 | 久久露脸国产精品 | 精品欧美一区二区在线观看 | 国产 日韩 在线 亚洲 字幕 中文 | 日韩久久午夜一级啪啪 | 国产经典 欧美精品 | 草久在线播放 | av中文天堂 | 国产精品99精品久久免费 | 国产视频欧美视频 | 日韩女同av | 成 人 黄 色 片 在线播放 | 在线观看视频一区二区三区 | 国产一级二级视频 | 欧美性免费 | 91精品对白一区国产伦 | 黄色大全免费观看 | 久久97精品 | 亚洲精品一区中文字幕乱码 | 成人黄色免费在线观看 | 国产一级不卡视频 | 亚洲天堂网视频在线观看 | 日韩有码在线观看视频 | 国产精品理论在线观看 | 99视频在线精品国自产拍免费观看 | 91人人视频在线观看 | 国产精品99久久久久人中文网介绍 | 毛片激情永久免费 | 久久久久久久免费 | 开心激情久久 | 日韩黄色影院 | 色婷婷88av视频一二三区 | 美女免费视频黄 | 亚洲aⅴ免费在线观看 | 日日综合 | 成片免费观看视频 | 国产小视频在线 | av大全在线免费观看 | 久久高清毛片 | 黄色中文字幕在线 | 中文字幕人成人 | 中文字幕韩在线第一页 | 国产免费高清 | 18国产精品白浆在线观看免费 | 久久久久亚洲精品 | 久久久久久久久久免费视频 | 五月婷婷激情综合网 | 国产高清免费在线观看 | 在线国产能看的 | 成人久久亚洲 | 成人av在线直播 | 毛片激情永久免费 | 在线亚洲成人 | 天天爽人人爽夜夜爽 | 性色xxxxhd| 日本韩国精品一区二区在线观看 | 91亚洲精品国偷拍 | 亚洲精品播放 | 黄网在线免费观看 | 久久久久国产精品免费免费搜索 | 国产一级精品在线观看 | 久久视频在线免费观看 | 在线观看91久久久久久 | 丰满少妇在线观看 | 99情趣网视频 | www.狠狠操.com| 久久黄色精品视频 | 国产成视频在线观看 | 天天色天天 | 亚洲一区 影院 | 五月婷婷久久综合 | 国产精品资源在线观看 | 超碰在线公开免费 | 亚洲视频aaa | 午夜视频在线瓜伦 | 亚洲高清在线观看视频 | 超碰人人国产 | 日韩有码中文字幕在线 | 久久美女视频 | 国产一二三四在线视频 | 欧美精品一区二区三区四区在线 | av+在线播放在线播放 | 五月天综合婷婷 | 香蕉影视在线观看 | 久久国产亚洲 | 国产手机视频精品 | 亚洲天天摸日日摸天天欢 | 久久免费的视频 | 精品国产欧美一区二区三区不卡 | 国产精品 日韩 | 亚洲热久久 | 欧美激情综合五月色丁香 | 91欧美国产| 色狠狠综合| 国产成人亚洲精品自产在线 | 99久久夜色精品国产亚洲96 | 日韩精品一区二区在线视频 | 亚洲成人软件 | 日韩欧美高清不卡 | av无限看 | 国产黄色精品网站 | 亚洲永久精品国产 | 五月婷婷色丁香 | 国产日韩欧美在线看 | 国产在线一卡 | 亚洲黄色片在线 | 99视频久 | 久久久久久国产精品免费 | 五月婷久| 欧美久久综合 | 欧美精品乱码久久久久久 | 亚洲男模gay裸体gay | 一区二区三区视频网站 | 亚洲成年片 | 果冻av在线| 麻豆观看 | 亚洲色图av | 一区二区三区在线观看中文字幕 | 久久久精品国产一区二区电影四季 | va视频在线| 99r在线观看 | 激情视频免费在线 | 日韩电影在线观看一区 | 欧美成人播放 | 中文av资源站| www.五月天| www国产在线 | 国产视频精选 | 欧美激情精品久久久久久免费 | 精品国产电影一区 | 国内精品福利视频 | 亚洲,国产成人av | 午夜精品电影一区二区在线 | 伊在线视频 | 天天干天天搞天天射 | 韩国一区二区三区在线观看 | 91精品免费在线 | 国产精品视频999 | 超碰免费公开 | 久久综合精品国产一区二区三区 | 97国产大学生情侣白嫩酒店 | 欧美成人在线免费 | 亚洲欧洲视频 | 91豆花在线观看 | 天天躁日日躁狠狠躁 | 成人久久18免费网站麻豆 | 成全在线视频免费观看 | 看黄色.com| 国产精品一区二区麻豆 | 夜夜爽夜夜操 | 国产精品欧美久久久久无广告 | 日本少妇高清做爰视频 | 一区二区三区av在线 | 国产不卡av在线播放 | 国产精品美女视频 | 一级欧美黄 | 国产伦精品一区二区三区在线 | 美女视频永久黄网站免费观看国产 | www.69xx| h网站免费在线观看 | 亚洲成年人在线播放 | 欧美一区,二区 | 亚洲爱视频| 国产美女免费视频 | 日韩精品久久久久久久电影竹菊 | 国产精品亚洲人在线观看 | 国产成人久久久久 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 欧美日韩一区三区 | 亚洲综合五月 | 天天色天天 | 日韩二三区| 91夫妻视频| 欧美人牲| 亚洲成年片 | 亚洲成人av电影 | 亚洲精品美女久久 | av在线激情 | 福利一区二区三区四区 | .国产精品成人自产拍在线观看6 | 国产视频手机在线 | 亚洲 中文 欧美 日韩vr 在线 | 成人av影院在线观看 | 国产成人精品网站 | 999久久久精品视频 日韩高清www | 国产精品欧美久久久久三级 | 波多野结衣一区二区 | 国产精品视频app | 亚洲国产精彩中文乱码av | 最近免费中文视频 | 欧美日韩不卡在线观看 | 又黄又爽免费视频 | 国产三级精品三级在线观看 | 日韩一二区在线观看 | 精品亚洲成a人在线观看 | 91人人揉日日捏人人看 | 一区二区三区四区五区在线视频 | 在线观看一二三区 | 麻豆精品国产传媒 | 亚洲aⅴ乱码精品成人区 | 香蕉视频在线免费 | 一本一道久久a久久精品 | 免费观看一区二区三区视频 | 狠狠色丁香久久婷婷综合五月 | 91天堂在线观看 | av在线播放国产 | 免费热情视频 | 四虎8848免费高清在线观看 | 免费在线成人av电影 | 不卡的一区二区三区 | 国产在线观看a | 草久久av | 日韩大片免费观看 | 久久香蕉国产 | 中文字幕二区 | 日韩精品综合在线 | 中文在线字幕免费观看 | 激情视频免费在线 | 日本久久久亚洲精品 | 国产精品自产拍在线观看桃花 | 毛片视频网址 | 欧美福利视频 | 狠狠狠狠狠狠干 | 国内精品久久久久久 | 中文字幕影片免费在线观看 | 国产日韩精品一区二区三区 | 国产九九九精品视频 | 日韩中文字幕免费视频 | 久久国产精品色婷婷 | 97偷拍在线视频 | 日日摸日日添日日躁av | 99精品黄色 | 网址你懂的在线观看 | 黄a在线 | 久久成人国产精品免费软件 | 亚州精品视频 | 亚洲精品成人网 | 99久久er热在这里只有精品66 | 一区二区av | 久久精品视频3 | 999久久久久久久久6666 | 97成人精品视频在线观看 | 日韩免费视频播放 | 日韩精品一区二区在线观看 | 欧美精品乱码久久久久久按摩 | 亚洲日b视频 | 久久久电影网站 | 午夜美女视频 | 97色婷婷人人爽人人 | 国产色综合天天综合网 | 亚洲精品国精品久久99热 | 天天舔天天射天天操 | 久久蜜臀一区二区三区av | 在线观看黄av | 欧美国产高清 | 午夜精品久久久久久久久久久久 | 欧美贵妇性狂欢 | 九九热中文字幕 | 高清不卡一区二区三区 | 国产成人精品免费在线观看 | 波多野结衣电影一区二区 | 瑞典xxxx性hd极品 | 国产在线欧美 | 亚洲精品五月天 | 中文字幕二区在线观看 | 久久不卡国产精品一区二区 | av网站在线观看免费 | 国产精品久久久久毛片大屁完整版 | 国产麻豆电影在线观看 | 日韩欧美视频二区 | 天堂在线一区 | 91av在线免费播放 | 国产精品青草综合久久久久99 | 国产高清 不卡 | 日本中文字幕一二区观 | 久久资源在线 | 亚洲黄色免费在线看 | 国产黑丝袜在线 | 国产香蕉视频 | 欧美日韩中文在线观看 | 操综合 | 最新日韩中文字幕 | 久久久久亚洲精品中文字幕 | 五月综合婷 | 成年人精品 | www.玖玖玖 | 国产一区二区三区免费视频 | 国产在线精品一区二区三区 | 在线视频1卡二卡三卡 | 伊人一级 | 91久久黄色 | 国产精品成人a免费观看 | 狠狠狠色丁香婷婷综合久久五月 | 国产精品v a免费视频 | 色婷婷狠 | 亚洲成人精品久久 | 精品视频免费看 | 91久久偷偷做嫩草影院 | 男女男视频 | 伊人www22综合色 | 久久久久久久久久久网站 | 91桃色免费视频 | 成人在线中文字幕 | av五月婷婷 | 国产精品99久久久精品免费观看 | 国产午夜精品在线 | www天天干com| av播放在线| 中文字幕在线视频一区二区三区 | 国产午夜视频在线观看 | 亚洲国产精品成人精品 | 欧美一区二视频在线免费观看 | 国产精品成| 亚洲美女视频网 | 亚洲日本va在线观看 | 久久综合久久88 | 久久综合九色综合欧美就去吻 | 国产成人精品网站 | 亚洲国产欧洲综合997久久, | 日韩在线观看视频免费 | 亚洲国产精品电影 | 欧美精品久久久久久久久免 | 久久久久久国产一区二区三区 | 91麻豆操| 日本黄区免费视频观看 | 久久久影院官网 | 国产二区免费视频 | 天天干天天干天天色 | 中文字幕第一页在线播放 | 婷婷干五月 | 色.www| www久久国产| 久久国产精品免费 | 91精品国产99久久久久久红楼 | 天堂在线一区二区 | 欧美国产精品久久久久久免费 | av导航福利 | 天天操夜夜操天天射 | 日日日日干| 国产精品1区2区3区在线观看 | 一色屋精品视频在线观看 | 日韩高清黄色 | 天天综合天天综合 | 中文字幕视频观看 | 中文字幕一区二区三区精华液 | 亚洲伊人天堂 | 狠狠操夜夜操 | 在线观看亚洲 | 国产精品中文久久久久久久 | 黄色软件在线观看免费 | 国产精品久久久久久一区二区三区 | 色综合久久66 | 亚洲精品久久久久久久不卡四虎 | 麻豆国产精品永久免费视频 | 国产视频不卡 | 日日夜夜精品免费观看 | 中中文字幕av在线 | 国产精品剧情在线亚洲 | 在线观看一| 一区二区 不卡 | 亚洲精品欧美视频 | 日韩com| 国产精品免费看久久久8精臀av | 免费亚洲一区二区 | 国产精品不卡在线 | 日韩精品一区二区三区水蜜桃 | 中文字幕欧美日韩va免费视频 | 伊人影院在线观看 | 日本中文字幕在线免费观看 | 91豆麻精品91久久久久久 | 久久性生活片 | 超碰国产97 | 国产区精品区 | 国产精品第一视频 | 人人擦 | 超碰在线网 | 爱av在线网 | 亚洲国产天堂av | 国产一区二区三区在线免费观看 | 亚洲精品免费在线观看视频 | 婷婷久久综合九色综合 | 国产一区二区高清视频 | 国产精品原创 | 亚洲午夜久久久久久久久 | 射射色 | 91.精品高清在线观看 | 色丁香综合 | 亚洲欧美视屏 | 国产精品久久久久av福利动漫 | 久久久久精 | 亚洲精品动漫成人3d无尽在线 | 欧美成人在线免费 | 久草视频免费看 | 久久精品99久久 | 国产精品一区二区三区99 | 亚洲黄污| 欧美日产在线观看 | 国产成人在线播放 | 正在播放国产一区二区 | 香蕉影院在线 | 午夜精品一区二区三区在线 | 国内毛片毛片 | 91桃色免费视频 | 日韩精品视 | 日日爱999| 69av免费视频 | 国产精品综合久久久久 | 日韩在线视频免费播放 | 久久久久久蜜av免费网站 | 国产精品免费人成网站 | 在线看av的网址 | 精品99在线视频 | 亚洲精品视频在线免费播放 | 中文字幕免费观看 | 日韩一级成人av | 免费久久久久久久 | 亚洲黄色在线播放 | 天天爱综合 | 国产中文字幕视频在线观看 | 欧美一二区在线 | 久久成人高清 | 日韩精品中文字幕久久臀 | 激情视频91 | 夜夜婷婷| 免费看的黄色片 | 麻豆 videos| 狠狠操狠狠干天天操 | 国产精品18毛片一区二区 | 不卡的av在线 | 国产中的精品av小宝探花 | 欧美性色综合网 | 免费精品在线视频 | 日日夜夜精品免费观看 | 久久人人爽人人爽人人片av免费 | 久草视频2| 午夜精品一区二区三区在线视频 | 99九九视频| 婷婷伊人综合 | 激情电影在线观看 | 欧美日韩免费一区二区 | 日本公妇在线观看 | 国产成人一区二区三区免费看 | 一区在线播放 | 五月天综合网站 | 国产精品普通话 | 国产最新精品视频 | 国产视频观看 | 国产三级国产精品国产专区50 | 91丨九色丨高潮丰满 | 99视频国产精品免费观看 | 99久久99视频只有精品 | av中文天堂在线 | 国产成人99久久亚洲综合精品 | 国产精品毛片一区视频播不卡 | 久草久热| 天天在线操 | 国产91免费观看 | 一区二区三区中文字幕在线 | 亚洲天堂首页 | 在线看一区二区 | 九九九热精品 | 亚洲精品高清一区二区三区四区 | 婷婷综合久久 | 免费av网址在线观看 | 人人看97| 国产精品大全 | 在线成人一区 | 午夜黄色一级片 | 色.www| 在线v片 | 人人插人人射 | 亚洲理论在线观看 | 久草爱 | 国产在线观看一区 | 国产视频欧美视频 | 日日操天天射 | 亚洲精品久久在线 | 91亚洲狠狠婷婷综合久久久 | 久草视频视频在线播放 | 在线不卡视频 | 久久av免费| 国产一级二级三级视频 | 欧美精品在线观看免费 | 五月婷婷六月丁香在线观看 | 热久久国产 | 在线电影播放 | 深夜免费网站 | 在线一区av| 日韩精品中文字幕在线 | 天天爱天天| 蜜桃视频在线视频 | 国产一级免费视频 | 日本九九视频 | 日本在线观看黄色 | 永久免费av在线播放 | 久久久久久久看片 | 国产福利一区二区三区在线观看 | 三级黄色理论片 | 久久特级毛片 | 国产亚洲成av片在线观看 | 久久成年人视频 | 成人国产精品电影 | 亚洲国产日韩欧美在线 | 中文字幕免费一区二区 | 亚洲人片在线观看 | 9999精品免费视频 | 深爱综合网 | 一区二区在线不卡 | 精品久久久亚洲 | 精品伊人久久久 | 91久久一区二区 | 97视频免费在线看 | 午夜久久影视 | 亚洲人成人在线 | 天天爽综合网 | 亚洲欧美视频在线观看 | 久久久久国产一区二区三区 | 欧女人精69xxxxxx | 国产日韩精品一区二区三区在线 | 中文字幕日韩精品有码视频 | 日本久久免费视频 | 中文字幕综合在线 | 麻豆视频大全 | 国产免费一区二区三区最新6 | 中文在线www | 日本韩国中文字幕 | 精品黄色片 | 人人艹视频 | www.com黄 | 日韩一级片大全 | 久久久久久综合网天天 | 欧美日韩在线观看一区 | 国产黄视频在线观看 | 日韩三级免费 | 男女视频91 | 99色婷婷 | 国产精品乱码久久久久久1区2区 | 久久艹艹| 色干干| 99热最新在线 | 亚洲老妇xxxxxx | 久久av高清 | 亚洲精品高清在线 | 国产69久久精品成人看 | 人人草在线视频 | 国产精品不卡 | 视频91| 日本少妇视频 | 中文亚洲欧美日韩 | 国产精品女人久久久 | 久久久 激情 | 成人va在线观看 | 午夜精品电影 | 免费黄a大片 | 久久爱资源网 | 久久精品一区 | 欧美在线视频第一页 | 色偷偷88888欧美精品久久 | 久久在线精品视频 | 免费看成人片 | 国产精品欧美久久久久无广告 | 亚洲乱码精品久久久 | 亚洲精品乱码久久 | 日本视频精品 | 精品视频成人 | 亚州av网站大全 | 国产色道 | 五月婷婷网站 | 中文字幕一区二区三区四区在线视频 | 天天草天天干天天射 | 久久草网 | 国产精品综合在线 | 国产精品一区二区三区在线播放 | 五月婷婷六月丁香在线观看 | 成人影片在线免费观看 | 最近更新好看的中文字幕 | 99久久精品国 | 亚洲精品国产精品国自产观看 | 国产91小视频 | 久久黄色小说视频 | 国产中文欧美日韩在线 | 99精品免费久久久久久日本 | 网址你懂的在线观看 | 亚洲男男gⅴgay双龙 | 91人人插| 在线欧美最极品的av | 三级av免费看 | 日韩系列 | 欧美狠狠操| 一区二区三区日韩在线 | 欧美日本一区 | 91人人在线 | 精品一区二区在线播放 | 人人爽人人澡 | 日本黄色免费电影网站 | 色天天久久 | 免费看的黄网站 | 久精品一区 | 欧美孕交vivoestv另类 | 国产视频资源 | 国产一级视频免费看 | 在线观看视频色 | 国产精品久久久久久高潮 | 中文字幕日韩在线播放 | 久久久久久久久久久免费 | 精品国产乱码一区二区三区在线 | 91亚洲国产成人 | 天天干天天插伊人网 | 日韩最新中文字幕 | 超碰在线99 | 国产精品系列在线播放 | 五月婷婷激情六月 | 欧美激情综合五月色丁香 | 中文av字幕在线观看 | 91chinesexxx| 日本成人中文字幕在线观看 | 精品一区二区久久久久久久网站 | 久久久久国产成人免费精品免费 | 中文字幕在线观看视频网站 | 精品国产伦一区二区三区观看说明 | 97人人视频| 久久高清av | 久久婷婷国产色一区二区三区 | 高清免费av在线 | 国产精品久久久久婷婷 | 国产亚洲精品免费 | 又色又爽又黄高潮的免费视频 | 久久国产露脸精品国产 | 制服丝袜天堂 | 成人av一区二区兰花在线播放 | 精品二区久久 | 中文字幕在线观看免费 | 精品久久久久一区二区国产 | 成年人视频在线免费播放 | 少妇bbb搡bbbb搡bbbb′ | 午夜久操 | 精品一二三四在线 | 中文字幕久久精品 | 中文字幕乱码电影 | 9ⅰ精品久久久久久久久中文字幕 | 91黄色成人 | a黄色片在线观看 | 欧美日韩有码 | 99精品视频观看 | 国产91免费观看 | 九九热有精品 | 亚洲a网 | 国产成人一级电影 | 日韩精品一区二区三区在线播放 | 亚洲精品小区久久久久久 | 亚洲精品国产日韩 | 国产精品一区二区在线看 | www五月 | 久久五月婷婷丁香社区 | 亚洲欧美日韩国产一区二区三区 | 麻豆久久久久 | 欧美日韩在线播放 | 国产精品免费大片视频 | 中文在线免费一区三区 | 日韩剧| 国产真实精品久久二三区 | 国内精品视频免费 | 97电影手机| 丝袜美女在线 | 天天噜天天色 | 国产一级特黄毛片在线毛片 | 久久久久久国产精品亚洲78 | 伊人伊成久久人综合网小说 | 欧美一级性生活视频 | 久久免费视频精品 | 国产二区电影 | 一级精品视频在线观看宜春院 | 成人午夜电影久久影院 | 免费亚洲一区二区 | 99久久超碰中文字幕伊人 | 中文字幕免费高清在线观看 | 欧美国产日韩一区二区三区 | 国产精品久久久久久久久久久免费看 | 天天操夜夜操天天射 | 狠狠色香婷婷久久亚洲精品 | 国内外成人在线 | 国产剧情久久 | 中文字幕在线观看三区 | 免费观看福利视频 | 国产又粗又猛又黄又爽 | 天天干天天草天天爽 | 免费看一级特黄a大片 | 91丨九色丨首页 | 国产黄色视 | 黄色亚洲大片免费在线观看 | 激情综合网五月激情 | 久草视频在线免费播放 | 亚洲免费公开视频 | 色网站国产精品 | 久草网首页 | 午夜av网站| 爱av在线网 | 亚洲区精品视频 | 国产精品18久久久久白浆 | 免费av在线网站 | 久久精品一 | 成人中文字幕+乱码+中文字幕 | 成人a级免费视频 | 超碰97av在线 | 超薄丝袜一二三区 | 亚洲天堂网视频 | 黄网站app在线观看免费视频 | 婷婷五月色综合 | 久精品视频免费观看2 | 中文字幕在线观看一区二区 | 亚洲激色| 不卡的av中文字幕 | www久久久久 | 91麻豆精品国产91久久久无限制版 | 91亚洲狠狠婷婷综合久久久 | 久久国产精品99久久久久久丝袜 | 在线看片91 | 欧美激情第28页 | 亚洲精品久久久蜜臀下载官网 | 欧美一区二区三区激情视频 | 日韩av有码在线 | 久久人人爽人人爽人人片av免费 | 免费看片黄色 | 中文在线免费一区三区 | 亚洲一级国产 | 在线精品视频免费观看 | 五月婷在线观看 | 九九热视频在线 | 97人人模人人爽人人喊网 | 国产精品嫩草影视久久久 | 欧美日韩国产二区三区 | 91插插视频 | 久久久久久久久久网站 | 亚洲精品国产精品国自产观看浪潮 | 91福利视频免费观看 | 一区二区久久久久 | 五月天最新网址 | 91久久精品一区二区二区 | 亚洲人成网站精品片在线观看 | 色婷婷综合久久久中文字幕 | 91在线看视频免费 | 亚洲精品国偷拍自产在线观看 | 99精品视频免费看 | 久久视频免费在线 | 一二区av| 国产在线va | 精品视频在线免费观看 | 婷婷 综合 色 | 日韩激情中文字幕 | 91视频免费看网站 | 亚洲一二三区精品 | 精品一区二区免费 | 精品久久久久久久久久久院品网 | 婷婷色在线视频 | 欧美性色网站 | 一级黄色片在线播放 | 国产一区欧美在线 | 九九九在线观看视频 | 欧美日本一区 | 一级黄色免费网站 | 久草在线最新视频 | 最新国产精品拍自在线播放 | 天天操比| 免费视频国产 | 久久久久久不卡 | 一区二区精品久久 | 97视频免费 | 久草久视频 | 波多野结衣日韩 | 亚洲国产中文字幕在线观看 | 黄色三级免费 | 精品久久久久久综合 | 三上悠亚一区二区在线观看 | 日韩欧美视频在线 | 中文字幕在线中文 | 午夜 在线| 波多野结衣在线播放视频 | 国产精品综合在线 | 国产精品99久久久久久人免费 | 麻花传媒mv免费观看 | 久久国产一区二区三区 | 国产精品三级视频 | 天天操综合网 | 成人啪啪18免费游戏链接 | 久久婷婷综合激情 | 91大神精品视频在线观看 | 婷婷在线播放 | 缴情综合网五月天 | 99国产精品视频免费观看一公开 | 欧美少妇xxxxxx| 久久精品久久精品久久39 | 91九色视频在线 | 国偷自产中文字幕亚洲手机在线 | 中文字幕影片免费在线观看 | 四虎成人精品永久免费av | 国产91学生粉嫩喷水 | av资源中文字幕 | 高清一区二区三区 | 久久成人毛片 | 亚洲精品乱码久久久久久按摩 | 亚洲精品中文字幕在线 | 国产在线久久久 | 亚洲一区二区三区在线看 | 亚洲日本精品 | 成人av资源网站 | 日韩视频免费 | 香蕉精品视频在线观看 | 免费的黄色的网站 | wwwwwww黄| 国产成人a亚洲精品v | 国产中出在线观看 | 亚洲理论在线 | 91成年视频 | 欧美视频18 | 欧美日韩国产二区 | 在线观看视频色 | 日韩免费一区二区在线观看 | 欧美一二三视频 | 亚洲精品午夜久久久久久久久久久 | 国产精品刺激对白麻豆99 | 亚洲区二区 | 国产精品免费视频久久久 | 91日韩在线播放 | 亚洲狠狠丁香婷婷综合久久久 | 视频在线99re | 国产女做a爱免费视频 | av网站在线观看免费 | 91桃色国产在线播放 | 成人午夜精品久久久久久久3d | 欧美一级日韩三级 | 97福利在线观看 | 涩涩网站在线播放 | 99精品在线观看视频 | 四虎在线永久免费观看 | 久久99视频| 99热这里| 国产成人性色生活片 | 黄色午夜网站 | 日日夜夜狠狠干 | 成人影片免费 | 国产高清视频在线播放 | 丁香五月亚洲综合在线 | 午夜久久视频 | 国产亚洲午夜高清国产拍精品 | 日批在线观看 | 精品久久久久久久久中文字幕 | 国产精品乱码久久久久 | 久久亚洲人| 国外调教视频网站 | 美女福利视频在线 | 久久爽久久爽久久av东京爽 | 99热国产在线中文 | 日韩在线视频一区 | 久久久久久久久久久久久9999 | 69精品| 久久高清av | 96国产在线 | 久久久久成 | 成人一级影视 | 国产亚洲精品久久久久久移动网络 | 五月激情天 | 免费色婷婷 | 久久老司机精品视频 | 深爱开心激情 | 久久久久久久久久久久久国产精品 | 日本公妇色中文字幕 | 午夜精品一二三区 | 国产成人一区二区三区免费看 | 人人操日日干 | 国产91勾搭技师精品 | 久久久高清视频 | 国产精品毛片久久久久久久 | 国产美女免费看 | 99久久婷婷国产综合亚洲 | 免费看一级一片 | 91成人看片 | 亚洲免费不卡 | 深爱激情五月婷婷 | 99精品视频免费在线观看 | 91麻豆精品国产91久久久久久 | 麻花传媒mv免费观看 | 91人网站| 五月开心六月婷婷 | 国产精品一区免费看8c0m | www视频在线播放 | 五月激情电影 | 亚洲高清视频一区二区三区 | 日韩欧美电影在线 | 日日摸日日添夜夜爽97 | 久草在线视频新 | 91精品视屏 | 久久久久免费网 | 91超级碰碰 | 日本久久久久久 | 五月精品| av午夜电影 | 四虎在线观看视频 | 三级av网站| 精品美女久久久久 | www.97色.com| 字幕网在线观看 | 毛片永久新网址首页 | 久久96国产精品久久99软件 | 日本精品xxxx | 久久综合影视 | 亚洲一区二区91 | 中文字幕中文字幕在线一区 | 久久成人视屏 | 五月香视频在线观看 | 国产精品网在线观看 | 少妇bbw揉bbb欧美 | 日韩va欧美va亚洲va久久 | 国产一区二区电影在线观看 | 四虎在线观看网址 | 免费在线激情电影 | 99精品国产99久久久久久97 | www.久久99 | 日本天天操 | 成人免费视频网址 | 中文字幕av全部资源www中文字幕在线观看 | 亚州av成人 | 欧美日韩视频在线一区 | 色射色| 日韩视频一区二区在线观看 | 亚洲精品中文字幕在线观看 | 国产成人精品区 | 国产手机在线观看 | 黄色av成人在线观看 | 成+人+色综合| 日韩中文字幕91 | 韩国在线视频一区 | 天天草天天干天天射 | 在线日韩亚洲 | 在线亚州 | 中文字幕在线观看你懂的 | 99久久久久免费精品国产 | 天天射天天艹 | a极黄色片 | 久久一级片| av亚洲产国偷v产偷v自拍小说 | 91大神精品视频在线观看 | 97自拍超碰 | 最新午夜电影 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 久久久国产高清 | a爱爱视频 | 久久99视频精品 | 99热精品国产一区二区在线观看 | 色婷婷欧美 | 亚洲精品成人在线 | 日韩av不卡在线观看 | 天天爽人人爽夜夜爽 | 亚洲精品国| 婷婷六月丁香激情 | 国产中文在线观看 | 中文区中文字幕免费看 | 日韩动态视频 | 久久久五月天 | 日韩啪视频 | 激情久久五月天 | 午夜影视一区 | 中文字幕资源网 | 国产一级片免费播放 | 国内精品久久久久久久久久 | 久久国产视屏 | 久久久穴 | 色婷婷激婷婷情综天天 | www..com黄色片 | 亚洲激情 在线 | 贫乳av女优大全 | 国产一区二区三区高清播放 | www五月|