国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

寫給前端的 Nest.js 教程——10分鐘上手后端接口開發(fā)

共 10890字,需瀏覽 22分鐘

 ·

2020-10-28 06:44

前言

很多后端的同學都說:「你們前端不就是切個圖嘛,憑啥跟我們后端的同學平起平坐啊?」

這下前端的同學可以站起來了:「你們后端不也就是 CRUD 嘛,憑啥瞧不起我們前端的同學?。俊?/strong>

今天就寫一下最近做「畢業(yè)設計」用到的框架:Nest.js 的基礎教程吧,簡單教大家做一下 CRUD(小白向,大佬輕噴)。

挖個坑,這應該是最基礎的「第一章」吧,「如果大家覺得好就多點贊評論」,過 「200 點贊」就加更一些,「爭取讓大家從前端走向全棧吧」。

這個教程的所有代碼我都放在了我的 GitHub 倉庫:Nest-CRUD-Demo[1],歡迎大家點個 Star!

?

同時也歡迎大家關注 「「Hello FE」」,里面有非常多其他的精品好文,不論是還在學習前端的同學還是已經工作了一段時間的朋友,都可以閱讀一下(關注還有小驚喜,鏈接過期了可以在后臺回復,我看到了會回復新的鏈接)。

?

框架簡介

?

Nest 是一個用于構建高效,可擴展的 Node.js 服務器端應用程序的框架。它使用漸進式 JavaScript,內置并完全支持 TypeScript(但仍然允許開發(fā)人員使用純 JavaScript 編寫代碼)并結合了 OOP(面向對象編程),FP(函數式編程)和 FRP(函數式響應編程)的元素。

在底層,Nest 使用強大的 HTTP Server 框架,如 Express(默認)和 Fastify。Nest 在這些框架之上提供了一定程度的抽象,同時也將其 API 直接暴露給開發(fā)人員。這樣可以輕松使用每個平臺的無數第三方模塊。

?

我猜肯定很多同學看不懂這段話,沒關系,我也暫時看不懂,但這不影響我們學會用它 CRUD。

我們只需要知道它是一款 Node.js 的后端框架,「規(guī)范化」「開箱即用」的特性使其在國外開發(fā)者社區(qū)非常流行,社區(qū)也非?;钴S,GitHub Repo[2] 擁有 31.1k Star。

相比于 ExpressKoa 的千奇百怪五花八門,Nest 確實是一股清流。

不過我們國內也有很棒的 Node.js 框架,比如說 Midway,和 Nest 一樣,采用的 IoC 的機制,想了解一下的同學可以看我的小伙伴「林不渡」寫的文章:《走近 MidwayJS :初識 TS 裝飾器與 IoC 機制》[3],還可以到 Midway 官網[4]自行探索。

包括在 Nest 當中遇到的裝飾器相關的知識,大家也可以到上面「林不渡」同學的那篇文章中了解。

前置知識

  • HTTP
  • TypeScript/JavaScript

項目環(huán)境

  • git
  • mongodb
  • node.js >= 10.13.0

安裝 MongoDB

這個章節(jié)的教程我就只寫 Mac OS 上的安裝了,畢竟上了大學就很少用 Windows 了,用 Windows 的同學可以到 `MongoDB` 官網[5]選擇對應的系統(tǒng)版本去下載 msi 的安裝包,或者「搜索引擎」里搜索一下,記得限定一下結果的時間,保證能夠搜索到最新的教程。

強烈建議使用 Homebrew 來對 Mac OS 的軟件包環(huán)境進行管理,沒有安裝的同學可以點擊這里[6]下載。

由于目前 MongoDB 已經不開源了,因此我們想要安裝 MongoDB 就只能安裝社區(qū)版本。

brew?tap?mongodb/brew
brew?install?mongodb-community

安裝好之后我們就可以啟動 MongoDB 的服務了:

brew?services?start?mongodb-community

服務啟動了就不用管了,如果要關閉的話可以把 start 改成 stop,就能夠停止 MongoDB 的服務了。

構建項目

有兩種方式,可以自行選擇,兩者沒有區(qū)別:

使用 Nest CLI 安裝:

npm?i?-g?@nestjs/cli
nest?new?nest-crud-demo

使用 Git 安裝:

git?clone?https://github.com/nestjs/typescript-starter.git?nest-crud-demo

這兩條命令的效果完全一致,就是初始化一個 Nest.js 的項目到當前文件夾下,項目的文件夾名字為 nest-crud-demo,兩種方式都可以。

「當然,我還是建議采用第一種方式,因為后面我們可以直接使用腳手架工具生成項目文件?!?/strong>

啟動服務

cd?nest-crud-demo
npm?run?start:dev?或者?yarn?run?start:dev

就可以「以開發(fā)模式」啟動我們的項目了。

這里其實有一個小小的點,就是啟動的時候應該以 dev 模式啟動,這樣 Nest「自動檢測我們的文件變化」,然后「自動重啟服務」。

如果是直接 npm start 或者 yarn start 的話,雖然服務啟動了,但是我們如果在開發(fā)的過程中修改了文件,就要手動停止服務然后重新啟動,效率挺低的。

安裝依賴

項目中我們會用到 Mongoose 來操作我們的數據庫,Nest 官方為我們提供了一個 Mongoose 的封裝,我們需要安裝 mongoose@nestjs/mongoose

npm?install?mongoose?@nestjs/mongoose?--save

安裝好之后我們就可以開始編碼過程了。

編寫代碼

創(chuàng)建 Module

我們這次就創(chuàng)建一個 User 模塊,寫一個用戶增刪改查,帶大家熟悉一下這個過程。

nest?g?module?user?server

腳手架工具會自動在 src/server/user 文件夾下創(chuàng)建一個 user.module.ts,這是 Nest 的模塊文件,Nest 用它來組織整個應用程序的結構。

//?user.module.ts
import?{?Module?}?from?'@nestjs/common';

@Module({})
export?class?UserModule?{}

同時還會在根模塊 app.module.ts 中引入 UserModule 這個模塊,相當于一個樹形結構,在根模塊中引入了 User 模塊。

執(zhí)行上面的終端命令之后,我們會驚訝地發(fā)現,app.module.ts 中的代碼已經發(fā)生了變化,在文件頂部自動引入了 UserModule,同時也在 @Module 裝飾器的 imports 中引入了 UserModule

//?app.module.ts
import?{?Module?}?from?'@nestjs/common';
import?{?AppController?}?from?'./app.controller';
import?{?AppService?}?from?'./app.service';
import?{?UserModule?}?from?'./server/user/user.module';?//?自動引入

@Module({
??imports:?[UserModule],?//?自動引入
??controllers:?[AppController],
??providers:?[AppService]
})
export?class?AppModule?{}

創(chuàng)建 Controller

nest?g?controller?user?server

Nest 中,controller 就類似前端的「路由」,負責處理「客戶端傳入的請求」「服務端返回的響應」。

舉個例子,我們如果要通過 http://localhost:3000/user/users 獲取所有的用戶信息,那么我們可以在 UserController 中創(chuàng)建一個 GET 方法,路徑為 users 的路由,這個路由負責返回所有的用戶信息。

//?user.controller.ts
import?{?Controller,?Get?}?from?'@nestjs/common';

@Controller('user')
export?class?UserController?{
??@Get('users')
??findAll():?string?{
????return?"All?User's?Info";?//?[All?User's?Info]?暫時代替所有用戶的信息
??}
}

這就是 controller 的作用,負責分發(fā)和處理「請求」「響應」

當然,也可以把 findAll 方法寫成異步方法,像這樣:

//?user.controller.ts
import?{?Controller,?Get?}?from?'@nestjs/common';

@Controller('user')
export?class?UserController?{
??@Get('users')
??async?findAll():?Promise<any>?{
????return?await?this.xxx.xxx();?//?一些異步操作
??}
}

創(chuàng)建 Provider

nest?g?service?user?server

provider 我們可以簡單地從字面意思來理解,就是「服務的提供者」

怎么去理解這個「服務提供者」呢?舉個例子,我們的 controller 接收到了一個用戶的查詢請求,我們不能直接在 controller 中去查詢數據庫并返回,而是要將查詢請求交給 provider 來處理,這里我們創(chuàng)建了一個 UserService,就是用來提供「數據庫操作服務」的。

//?user.service.ts
import?{?Injectable?}?from?'@nestjs/common';

@Injectable()
export?class?UserService?{}

當然,provider 不一定只能用來提供數據庫的操作服務,還可以用來做一些用戶校驗,比如使用 JWT 對用戶權限進行校驗的策略,就可以寫成一個策略類,放到 provider 中,為模塊提供相應的服務。

挺多文檔將 controllerprovider 翻譯為「控制器」「提供者」,我感覺這種翻譯挺生硬的,讓人不知所云,所以我們姑且記憶他們的英文名吧。

controllerprovider 都創(chuàng)建完后,我們又會驚奇地發(fā)現,user.module.ts 文件中多了一些代碼,變成了這樣:

//?user.module.ts
import?{?Module?}?from?'@nestjs/common';
import?{?UserController?}?from?'./user.controller';
import?{?UserService?}?from?'./user.service';

@Module({
??controllers:?[UserController],
??providers:?[UserService]
})
export?class?UserModule?{}

從這里開始,我們就要開始用到數據庫了~

連接數據庫

引入 Mongoose 根模塊

連接數據之前,我們要先在根模塊,也就是 app.module.ts 中引入 Mongoose 的連接模塊:

//?app.module.ts
import?{?Module?}?from?'@nestjs/common';
import?{?MongooseModule?}?from?'@nestjs/mongoose';
import?{?AppController?}?from?'./app.controller';
import?{?AppService?}?from?'./app.service';
import?{?UserModule?}?from?'./server/user/user.module';

@Module({
??imports:?[MongooseModule.forRoot('mongodb://localhost/xxx'),?UserModule],
??controllers:?[AppController],
??providers:?[AppService]
})
export?class?AppModule?{}

這段代碼里面的 mongodb://localhost/xxx 其實就是本地數據庫的地址,xxx 是數據庫的名字。

這時候保存文件,肯定有同學會發(fā)現控制臺還是報錯的,我們看一下報錯信息就很容易知道問題在哪里了。

其實就是 mongoose 模塊沒有類型聲明文件,這就很容易解決了,安裝一下就好:

npm?install?@types/mongoose?--dev?或者?yarn?add?@types/mongoose?--dev

安裝完之后服務就正常重啟了。

引入 Mongoose 分模塊

這里我們先要創(chuàng)建一個數據表的格式,在 src/server/user 文件夾下創(chuàng)建一個 user.schema.ts 文件,定義一個數據表的格式:

//?user.schema.ts
import?{?Schema?}?from?'mongoose';

export?const?userSchema?=?new?Schema({
??_id:?{?type:?String,?required:?true?},?//?覆蓋?Mongoose?生成的默認?_id
??user_name:?{?type:?String,?required:?true?},
??password:?{?type:?String,?required:?true?}
});

然后將我們的 user.module.ts 文件修改成這樣:

//?user.module.ts
import?{?Module?}?from?'@nestjs/common';
import?{?MongooseModule?}?from?'@nestjs/mongoose';
import?{?UserController?}?from?'./user.controller';
import?{?userSchema?}?from?'./user.schema';
import?{?UserService?}?from?'./user.service';

@Module({
??imports:?[MongooseModule.forFeature([{?name:?'Users',?schema:?userSchema?}])],
??controllers:?[UserController],
??providers:?[UserService]
})
export?class?UserModule?{}

好了,現在一切就緒,終于可以開始編寫我們的 CRUD 邏輯了!沖沖沖~

CRUD

我們打開 user.service.ts 文件,為 UserService 類添加一個構造函數,讓其在實例化的時候能夠接收到數據庫 Model,這樣才能在類中的方法里操作數據庫。

//?user.service.ts
import?{?Injectable?}?from?'@nestjs/common';
import?{?InjectModel?}?from?'@nestjs/mongoose';
import?{?Model?}?from?'mongoose';
import?{?CreateUserDTO, EditUserDTO }?from?'./user.dto';
import?{?User?}?from?'./user.interface';

@Injectable()
export?class?UserService?{
??constructor(@InjectModel('Users')?private?readonly?userModel:?Model)?{}

??//?查找所有用戶
??async?findAll():?Promise?{
????const?users?=?await?this.userModel.find();
????return?users;
??}

??//?查找單個用戶
??async?findOne(_id:?string):?Promise?{
????return?await?this.userModel.findById(_id);
??}

??//?添加單個用戶
??async?addOne(body:?CreateUserDTO):?Promise<void>?{
????await?this.userModel.create(body);
??}

??//?編輯單個用戶
??async?editOne(_id:?string,?body:?EditUserDTO):?Promise<void>?{
????await?this.userModel.findByIdAndUpdate(_id,?body);
??}

??//?刪除單個用戶
??async?deleteOne(_id:?string):?Promise<void>?{
????await?this.userModel.findByIdAndDelete(_id);
??}
}

因為 mongoose 操作數據庫其實是異步的,所以這里我們使用 async 函數來處理異步的過程。

好奇的同學會發(fā)現,這里突然出現了兩個文件,一個是 user.interface.ts,另一個是 user.dto.ts,我們現在來創(chuàng)建一下:

//?user.interface.ts
import?{?Document?}?from?'mongoose';

export?interface?User?extends?Document?{
??readonly?_id:?string;
??readonly?user_name:?string;
??readonly?password:?string;
}
//?user.dto.ts
export?class?CreateUserDTO?{
??readonly?_id:?string;
??readonly?user_name:?string;
??readonly?password:?string;
}

export?class?EditUserDTO?{
??readonly?user_name:?string;
??readonly?password:?string;
}

其實就是對數據類型做了一個定義。

現在,我們可以到 user.controller.ts 中設置路由了,將「客戶端的請求」進行處理,調用相應的服務實現相應的功能:

//?user.controller.ts
import?{
??Body,
??Controller,
??Delete,
??Get,
??Param,
??Post,
??Put
}?from?'@nestjs/common';
import?{?CreateUserDTO,?EditUserDTO?}?from?'./user.dto';
import?{?User?}?from?'./user.interface';
import?{?UserService?}?from?'./user.service';

interface?UserResponse?{
??code:?number;
??data?:?T;
??message:?string;
}

@Controller('user')
export?class?UserController?{
??constructor(private?readonly?userService:?UserService)?{}

??//?GET?/user/users
??@Get('users')
??async?findAll():?Promise>?{
????return?{
??????code:?200,
??????data:?await?this.userService.findAll(),
??????message:?'Success.'
????};
??}

??//?GET?/user/:_id
??@Get(':_id')
??async?findOne(@Param('_id')?_id:?string):?Promise>?{
????return?{
??????code:?200,
??????data:?await?this.userService.findOne(_id),
??????message:?'Success.'
????};
??}

??//?POST?/user
??@Post()
??async?addOne(@Body()?body:?CreateUserDTO):?Promise?{
????await?this.userService.addOne(body);
????return?{
??????code:?200,
??????message:?'Success.'
????};
??}

??//?PUT?/user/:_id
??@Put(':_id')
??async?editOne(
????@Param('_id')?_id:?string,
????@Body()?body:?EditUserDTO
??):?Promise?{
????await?this.userService.editOne(_id,?body);
????return?{
??????code:?200,
??????message:?'Success.'
????};
??}

??//?DELETE?/user/:_id
??@Delete(':_id')
??async?deleteOne(@Param('_id')?_id:?string):?Promise?{
????await?this.userService.deleteOne(_id);
????return?{
??????code:?200,
??????message:?'Success.'
????};
??}
}

至此,我們就完成了一個完整的 CRUD 操作,接下來我們來測試一下~

接口測試

接口測試我們用的是 Postman,大家可以去下載一個,非常好用的接口自測工具。

數據庫可視化工具我們用的是 MongoDB 官方的 MongoDB Compass,也很不錯。

GET /user/users

GET /user/users

一開始我們的數據庫中什么都沒有,所以返回了一個空數組,沒用用戶信息。

POST /user

POST /user

現在我們添加一條用戶信息,服務器返回添加成功。

Added

GET /user/:_id

GET /user/:_id

添加完一條用戶信息之后再查詢,可算是能查詢到我的信息了。

PUT /user/:_id

PUT /user/:_id

現在假如我想修改密碼,發(fā)送一個 PUT 請求。

Edited

DELETE /user/:_id

DELETE /user/:_id

現在我們刪除一下剛才添加的用戶信息。

Deleted

會發(fā)現數據庫中的內容已經被刪除了。

完結撒花

大功告成,CRUD 就這么簡單,用這個項目去參加一些學校舉行的比賽,拿個獎肯定沒什么問題,開箱即用(學校老師們別打我)。

總結

教程還算是用了比較通俗易懂的方式為大家講解了如何寫一個帶有 CRUD 功能的后端 Node.js 應用,框架采用的是 Nest.js

相信大家在上面的教程中肯定有非常多不懂的部分,比如說 @Get()@Post()、@Param()、@Body() 等等的裝飾器,再比如說一些 Nest.js 相關的概念。

沒關系,我的建議是:「學編程先模仿,遇到不懂的地方先記住,等到自己的積累夠多了,總有一天你會回過頭發(fā)現自己茅塞頓開,突然懂了」。這也是我個人學習的一個小技巧。

在學習的過程中,也一定會遇到一些問題,學習編程的過程中遇到問題不能自己憋著,「一定要學會請教大佬!一定要學會請教大佬!一定要學會請教大佬」!重要的事情說三遍。

不過也別很簡單的問題就去請教大佬,而且最好給一點小小的報酬,畢竟誰也沒有義務幫你解決問題。

我在學習的過程中也請教了一些社區(qū)里面的大佬,同時還進入了 Nest.js 的社區(qū)答疑群,向國外友人請教學到了不少知識。

當然,這個 Demo 中也有很多可以完善的地方,比如說「錯誤處理」。

數據庫的操作肯定是有可能出現錯誤的,比如說我們漏傳了 required: true 的參數,數據庫就會報錯。

這個時候我們就要寫一個 try/catch 捕獲這個異常,或者干脆寫一個異常的過濾器,將所有的異常統(tǒng)一處理(Nest.js 支持過濾器)

除此之外,既然有可能出現異常,那么我們就需要一個日志系統(tǒng)去捕獲這個異常,方便查錯糾錯。

如果涉及到登錄注冊的部分,還有密碼加解密的過程,同時還可能有權限校驗問題需要進行處理。

所以后端的同學肯定不止 CRUD 啦(可算圓回來了)。

這個教程的所有代碼我都放在了我的 GitHub 倉庫:Nest-CRUD-Demo[7],歡迎大家點個 Star

參考資料

  • NestJS - A progressive Node.js framework[8]
  • Nest.js 中文文檔[9]

Reference

[1]

Nest-CRUD-Demo: https://github.com/wjq990112/Nest-CRUD-Demo

[2]

GitHub Repo: https://github.com/nestjs/nest

[3]

《走近 MidwayJS :初識 TS 裝飾器與 IoC 機制》: https://juejin.im/post/6859314697204662279

[4]

Midway 官網: https://midwayjs.org/midway/

[5]

MongoDB 官網: https://mongodb.com/download-center/community

[6]

點擊這里: https://brew.sh/

[7]

Nest-CRUD-Demo: https://github.com/wjq990112/Nest-CRUD-Demo

[8]

NestJS - A progressive Node.js framework: https://nestjs.com/

[9]

Nest.js 中文文檔: https://docs.nestjs.cn/

瀏覽 58
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 BBB搡BBB搡BBB搡BBB| 亚洲图片欧美色图| 中文字幕资源站| 亚洲毛片网站| 四虎一区二区| 日韩无码专区电影| 亚洲视频福利| 亚洲欧美另类在线| 最新中文字幕在线播放| 亚洲男人的天堂视频网在线观看+720P | 中国一级黄色毛片| av无码aV天天aV天天爽| 在线看的av| 国产精品粉嫩福利在线| 欧美成人免费| 色综合社区| 亚洲成人AⅤ| 日韩在线一区二区| 超碰免费人人| 好吊视频一区二区| 伊人五月婷婷| 喷水视频在线观看| 日日精品| 99热这里只有精品999| 美女天堂网| 人人妻人人澡人人爽久久con| 2019天天操| 伊人精品视频| 亚洲日韩国产AV| 91在线一区二区三区| 天天干天天操天天射| 亚洲精品无| 国产又爽又黄免费网站在线看| 欧美视频免费操逼图。| 三级片男人的天堂| 中文字幕91| 先锋AV资源站| 天天综合天天干| 亚洲精品无码在线播放| 亚洲成人色色| 91无码一区二区三区在线| 中文字幕高清无码在线| 亚洲高清无码免费| 一区二区三级片| 蜜臀一区二区三区| 二区视频在线| 国语对白做受欧美| 日韩无码视频播放| 久久国产性爱| 精品国产久久久久| 国产专区在线| 大香蕉尹人在线视频| 久久成人导航| 国产成人毛片18女人18精品| 无码窝在线观看| 久久这里有精品视频| 亚洲另类天堂| 日韩大片免费观看| 黄a无码| 中国操逼视频| 欧美一区二区三区在线播放| 久久视频精品| 亚洲人人18XXX—20HD| 不卡av在线| 2021国产精品视频| 五月丁香伊人| 日韩视频二区| 操逼操| 无码H| 久久三级| 成人欧美在线观看| 日韩高清无码一区二区| 自慰影院| 大香蕉国产| 亚洲区一| 三级日韩| 欧美成人精品欧美一级私黄| 亚洲videos| www.911国产| 91人妻中文字幕| 91日韩| 在线观看视频无码| 日本成人中文字幕在线观看| 丰满人妻一区二区| 黄色毛片在线播放| 成人午夜福利网站| 国产精品扒开腿做爽爽爽视频 | 一区二区视频在线观看| 高清无码视频免费看| 性无码专区| va婷婷在线免费观看| 欧美高清在线综合| 婷色| 豆花成人网站在线看| 香蕉久久久| 91精品国产一区二区三区| 大香蕉一级红色片青青河边草 | 偷拍综合| 日韩AV成人电影| 18+免费网站| 手机看片日韩| 美女性爱视频网站| 日韩在线| 真实野外打野视频| 免费观看黄色AV| 欧美性爱-熊猫成人网| www.色日本| 一区二区免费| 69AV在线播放| 国精产品一区一区三区有限公司杨| 黄色片免费观看| 97天天干| 欧美色图色就是色| 国内精品国产成人国产三级| 中日韩在线| 免费AV网站在线| 国产乱妇无码毛片A片在线看下载 日韩电影免费在线观看中文字幕 欧美性爱中文字幕 | 蜜桃视频91| 国产在线拍揄自揄拍无码福利| 日韩无码黄色视频| 超碰99在线| 天堂在线8| 激情无码网站| 国产操逼逼| 俺来俺也去www色在线观看| 欧美久草蜜桃视频| 最新日韩无码| 精品欧美成人片在线| 狠狠撸天天日| 亚洲综合免费观看高清完整版| 日韩专区中文字幕| 波多野结衣vs黑人巨大| 热久久久| caopeng97| 久久久久久久久久久久高清毛片一级 | 鸡巴在线观看| 欧美激情在线| 国产女同性系列| 丁香婷婷综合网| 新狠狠干| 狠狠操网| 伊人成人小说| 欧美精产国品一二三区别| 欧美日韩操逼片| 国产福利91精品一区二区三区| 中文在线字幕免费观| 欧美日韩亚洲另类| 日本乱伦电影中文字幕| 免费看黃色AAAAAA片| 丁香社区五月天| 伊人大香蕉婷婷| 久久av综合| 日本一区二区在线| 人人爽人人| 黄页视频网站| 操逼操逼操| 日本欧美久久久久免费播放网| 欧美一级A片免费看| 国产激情123区| 亚洲一区久久| 人人妻人人澡人人爽| 欧美性色网| brazzers疯狂作爱| 91人妻人人爽| 在线视频内射| 久久久久国产精品视频| 就去se超碰| 久久无码精品| 无码成人A片在线观看| 国产熟女露脸普通话对白| 无码另类| 亚洲中文字幕无码爆乳av| 黑人AV七| 大香蕉毛片| 国产精品6| 一道本视频| 五月激情六月| 久久精彩免费视频| 友田真希一级婬片A片| 操比视频| 久久久一区二区三区四区| 黄色成人网站在线观看免费| 91成人在线播放| 日韩,变态,另类,中文,人妻| 波多野结衣无码一区| 伊人久久久影视大全| 伊人五月婷婷| 成人小视频观看| 国产亚洲色婷婷久久99精品91| 在线免费看毛片| 中文无码日韩欧美久久| 在线内射视频| 亚洲日韩在线看| 亚洲Av在线观看| 女人自慰网站在线观看| 亚洲视频在线免费观看| 中文字幕视频| 无码三级在线观看| 亚洲高清无码一区| 操逼视频在线看| 免费成人大片| 男人天堂视频在线观看| 国产精品久久久久精| 国产精品成人无码免费| 操逼视频免费网站| 久久牛牛| 欧美二区三区| 日日艹夜夜艹| 超碰伊人大香蕉| jlzzzjlzzz国产免费观看 | 亚洲成人影片在线观看| 日本欧美在线播放中文| 97国产资源| 婷婷伊人中文字幕| 欧美午夜爱爱| 日中文字幕| 摸BBB搡BBB搡BBBB| 无码人妻精品一区二区蜜桃漫画| 特级西西人体444www高清大胆 | 成人动漫一区| 大香蕉电影网站| 特级黄色A片| 狠狠操夜夜操| 国产黄色视频在线播放| 人妻少妇精品视频一区二区三区| 黄片网址在线观看| 91福利影院| 中文字幕婷婷五月天| 色婷婷AV在线| 一级黄色电影免费在线观看| 国产超碰青青草| 狠狠插网站| 日本黄色影院在线| 五月六月婷婷| 久久精品视频9| 色资源站| 在线观看免费A片| 午夜无码影院| 亚洲清高毛无码毛片| 国产二级片| 日韩综合一区| 大鸡吧在线| 午夜毛片| 国产成人a亚洲精品www| 亚洲国产成人无码| 欧美日韩在线观看一区二区三区 | 在线观看黄a| 欧洲黄色片| 久久精品99国产国产精| 中文字幕av网| 色色五月丁香婷婷| 欧美性BBB槡BBB槡BBB| 北条麻妃精品| 91超碰在线免费观看| AA无码| 超碰99在线| 韩国中文字幕HD久久| 日产久久久久久| 在线免费观看av片| 超碰青青青| 神马午夜视频| 国产精品福利小视频| 美女自慰网站在线观看| 无码一区在线观看| 一纹A片免费观看| 欧美九九九九| 九九99精品视频| 91欧美亚洲| 亚洲中文综合| 无码高清一区| 蜜桃久久| 日韩无码视频二区| 成人黃色A片免费看| 欧美一区二区三区成人| 国产成人TV| 久久久久久久久久国产| 欧美综合在线观看| 日韩人妻精品中文字幕免费| 天天日天天干麻豆| 蝌蚪窝在线视频观看| 无码人妻一区二区三区在线视频不卡| 激情成人五月天| 少妇推油呻吟白浆啪啪成人片 | 欧亚毛片| 欧美熟妇精品一二三区| 婷婷五月在线播放| 久久国产一级片| 日韩欧美高清无码| 亚洲无码AV在线观看| 亚洲AV大片| 日韩午夜成人电影| 99热欧美| 久热99| 91人妻日韩人妻无码专区精品| 欧美精品在线免费观看| 毛片网站视频| 中国一级黄色毛片| 亚洲精品久久久久avwww潮水 | 最近中文字幕在线观看| 亚洲二区在线| 亚洲乱码日产精品BD在线观看| 国产毛片在线看| 亚洲免费视频播放| 精品视频在线免费观看| 人人操人人看人人摸| 北条麻妃A片在线播放| 国产精品亚洲一区| 无码福利视频| 天天操夜夜操狠狠操| av干在线| 欧美级黑寡妇毛片app| 2025av在线| 国产三级无码| 天天综合网站| 亚洲欧洲视频在线观看| 99久热在线精品| 日韩欧美在线不卡| 无码视频一区| 天天干天天操天天| 无码日韩av| 在线色综合| 国产一级婬乱片AV片AAA毛片| 国产综合一区二区| 国产粉嫩| 精品女同一区二区三区四区外站在线| 亚州免费视频| 大香蕉伊人在线观看| 校园春色成人| 中文字幕av免费观看| 亚洲精品一区二三区不卡| 人人操干| 亚洲精品久久久久毛片A级牛奶 | 日韩无码黄色电影| 天天干,夜夜爽| 日韩人妻中文| 东京热综合| 日日碰狠狠躁久久躁婷婷| 国产成人黄色电影| 亚洲欧美影院| 狠狠干狠狠干| 深爱开心激情| 久久免费国产视频| 日皮视频免费| 亚洲女人天堂AV| 成人午夜小视频| 人人插人人| 日韩人妻无码专区一区二区 | 亚洲欧美手机在线| 五月丁香花视频| 婷婷视频在线观看| 日日爽夜夜爽| www.91超碰在线| 中文字字幕在线中文| 免费a片在线观看| 国产三级片网站| 国产熟睡乱子伦午夜视频_第1集| 亚州成人| 亚洲色成人网站www永久四虎| 天天操网址| 最近中文字幕高清2019中文字幕| 久久久久久久网| 内射免费看| 中文字幕在线观看完整av| 五月天婷婷网站| 波多野结衣无码电影| 天天狠天天干| AV福利在线观看| 精品区| AV电影免费看| 人人超碰人人| 91在线无码精品秘入口动作| 亚洲午夜视频| 一级黄色视频免费观看| 日本在线| 99黄网| 亚洲第一在线| 日本视频免费| 国产激情av| 竹菊传媒一区二区三区| 大香蕉亚洲| 人妻公日日澡久久久| 麻豆激情视频| 伊人网在线播放| 国产小视频在线免费观看| 91丨熟女丨对白| 成人黄色网| 成人免费乱码大片a毛片蜜芽| 日本中文字幕电影| 日韩欧美中文字幕视频| 国产毛片久久久久久久| 在线你懂的| 丁香六月啪啪| 久久久久久无码日韩欧美电影| 中文无码专区| 成人女人18女人毛片| 免费看操片| 特级特黄A级高潮播放| 高清中文字幕在线A片| 久久久久久久久久久高清毛片一级| 欧美一级A片在免费看| 69国产精品成人无码| 精品交换一区二区三区无码| 欧美国产视频| 国产三级在线观看| 大香蕉a片| 乱码中文字幕日韩欧美在线| 色噜噜狠狠一区二区三区牛牛影视| 国产高清Av| 翔田千里无码免费播放| 在线观看黄色小视频| 亚洲一级二级三级片| 午夜3D动漫AV| 这里只有精品久久| 亚洲AV无码精品岛国| 欧美成人A| 玖玖热在线视频| 性爱av在线| 闺蜜AV| 黄色片毛片| 在线国产激情视频| 91久久国产综合久| 黄片视频在线免费播放| 最近中文字幕免费MV第一季歌词怀孕 | 九九热这里有精品| 大香伊人中文字幕精品| 成人精品一区日本无码网站suv/ | 永久免费看片视频5355| 很很干在线视频| 日本精品在线观看视频| 无码a区| 日韩黄色精品| 国产性爱在线| 啪啪网站免费观看| 久久6热| 国产在线h| 狠狠操免费| 六月激情婷婷| 色视频免费观看| 成人视频在线观看18| 天天日夜夜草| 亚洲成人电影天堂| 偷拍一区二区| 色婷婷久久综合| 国产高清无码视频在线观看| 国产成人无码精品| 精产国品一区二区| 老鸭窝在线观看视频| 黄色大片在线播放| 九九九精品| 激情五月在线| 中国毛片视频| 中文字幕在线观看第一页| 青娱乐亚洲精品| 中文字幕无码综合| 69超碰| 免费在线观看AV网站| 底流量AV电影在线| 91熟女乱伦| 国产潮吹| 国产一区免费| 一区二区无码精品| 91福利院| 亚洲午夜剧场| 青青国产在线| 一级黄片在线| 日本无码一区二区三三| 无码秘人妻一区二区三-百度| 中日韩精品A片中文字幕| 久久午夜夜伦鲁鲁一区二区| 久久久久久免费毛片精品| 国模一区二区三区| 国产熟女乱伦视频| 国产视频在线播放| 中文字幕日韩乱伦| 久久一级片| 欧美少妇视频| 嫩BBB搡BBBB搡BBBB-百度| 國產美女AV操逼網站| 国产成人无码区免费AV片在线 | 国产精品久久久久久久久A| 国内免费av| 亚州免费视频| 淫色AV| 国产精品久久久久久久久久| 一曲二曲三曲在线观看中文字| 91精品久久久久久久久久久久 | 婷婷五月天激情四射| 精品一区二区三区在线观看| 国产伦精品一区二区三区妓女下载| 天天天天干| 日韩欧美高清第一期| 少妇无码在线| 久色婷婷在线| 国产精品福利在线观看| 97香蕉久久国产超碰青草专区| 亚洲黄色电影在线| 8090操逼网| 亚洲成人av| 久久cao| 操逼网首页123| 最近中文字幕无码| 五月婷婷色欲| 97人人操| 国产欧美一区二区三区四区| 特黄AAAAAAAA片免费直播| 国产成人自拍视频在线| 青草社区在线观看| 欧美成人精品一区二区三区| 亚洲无码高清一区| 国产c区| 天天视频亚洲| 人人操人人看人人摸| 蜜桃视频网站| 丁香花小说完整视频免费观看| 国产做爱视频| 亚洲男同tv| 日韩欧美黄色片| 丰满人妻一区二区三区视频在线不卡| 大香蕉69| 豆花视频logo进入官网| 亚洲AV网址| 3d啪啪动漫| 激情五月天激情网| 欧美激情婷婷| 在线观看日韩三级片av| 亚洲无码视频播放| 日韩成人高清无码| 四川少妇搡bbw搡bbbb| AV婷婷在线| 欧美精品一区二区少妇免费A片| 国产福利视频在线观看| 日本激情网| 影音先锋国产精品| 在线观看的av网站| 日韩欧美黄| 国产xxxx视频| 成人777777| 亚洲乱码国产乱码精品天美传媒| 操骚逼视频| 成人午夜免费视频| 操逼网站大全| 日韩小电影免费观看高清完整版在线观| 成人欧美在线观看| 俺来也av| 久热免费视频在线观看| av不卡在线观看| 亚洲人妖在线| 最美人妖系列国产Ts涵涵| 国产18女人水真多免费看| 日本欧美久久久久免费播放网| 51成人网站免费| 特级西西444www高清| 国产91福利| 欧美性爱小说网| 伊人无码在线| 日韩AV小电影| 奇米88888| 亚洲1区| 日韩久久网站| 老太婆擦BBBB撩BBBB| 天天色色天天| 国产无码AV成在线| 国产精品国产三级国产AⅤ中文 | 性爱av天堂| 久久精彩免费视频| 粉嫩99精品99久久久久久特污| 成人网站中文字幕| 国产日韩一区二区三免费高清| 伊人大香蕉在线网| 霸道总裁雷总各种姿势白浆爱情岛论坛 | 亚洲中文字幕久久日| 久久久久久91香蕉国产| 国产精品福利在线| 西西4444WWW无码视频| 亚洲天堂无码在线| 亚洲激情综合| 操逼视频网| 亚洲欧美色图| 欧美在线不卡综合| 91精品婷婷国产| 手机看片久草| 91麻豆精品国产91久久久久久久久| 五月天婷婷AV| 十八禁网站在线观看| 五月丁香亚洲综合| 99精品国产一区二区| 久久久久久久久久久国产精品| 欧美老熟妇BBBBB搡BBB| 欧美三级欧美三级三级| 黄色福利视频在线观看| 国产乱伦AV网站| 久久无码一区二区| 天天操天天射天天日| 91久久精品一区二区三| 久肏| 国产一卡二卡三卡| 国产乱轮视频| 国产精品一区在线观看| 国产精品毛片| 亚洲欧美熟妇久久久久久久久| 亚洲AV无码成人精品区东京热| 精品一区二| 欧美18成人| AV四虎| 无码中文字幕在线视频| 精品国产欧美一区二区三区成人 | 人妻无码中文字幕免费视频蜜桃 | 九九热精品视频在线观看| 老熟女视频| 牛牛AV| 黄色A网站| 国产乱子伦一区二区三区视频| 免费在线观看亚洲| 久久黄色精品视频| 国产精品久久久久精| 日本在线小视频| 久久无码精品| 黄色操逼网站?| 国产精品无码久久久久成人app | 免费无码成人片在线观看在线| 欧美色五月| 在线观看2区| 大香蕉大香蕉免费网| 国产尤物| 成人大香蕉网站精品免费| 国产黄色在线播放| 久久青草视频| 18禁网站在线看| 久久AV无码| 亚洲.无码.制服.日韩.中文字幕 | 国产精彩无码视频| 欧美成人午夜福利| 不卡二区| 黄色免费a级片一级片| 国产日日日| 尿在小sao货里面好不好| 国产女人18毛片水18精| 99综合网| 四虎无码丰满人妻| 亚洲精品福利视频导航| 久久久久久免费毛片精品| 亚洲视频中文字幕在线观看| 国产乱国产乱老熟300部视频 | 婷婷日韩一区二区三区| 欧美怕怕怕| 亚洲成人av在线播放| 亚洲A片V一区二区三区| 黑人操白人| 99久久国内精品成人免费| 色就是亚洲| 黑人一区二区| 精品视频久久久| 亚洲视频在线播放| 黄色毛片在线播放| 不卡视频一区二区三区| 天堂中文资源在线| 丝袜美女足交| 久久久极品| 淫色五月| 国产福利av| 亚洲日韩欧美国产| 黄色性爱网址| 日韩视频中文| 色五月婷婷中文字幕| 午夜探花视频| 91污视频在线观看| 日韩毛片网| 国产曰韩欧美综合另类在线| www日韩欧美| 国产精品无码ThePorn| 日韩无码一级| 黄色电影一级| 天干夜天干天天天爽视频| A级网站| 香蕉视频免费| 天堂a√在线8| av不卡在线| 91精品人妻人人爽| 欧美啪啪网站| 黄片aaa| 四川少妇bbbb| 日韩大香蕉视频| 国产九九| 北条麻妃中文字幕旡码| 热99re69精品8在线播放| 97视频| 超碰一区二区三区| 欧一美一婬一伦一区二区三区黑人| 国产換妻4P视频| 91搞| 中文字幕无码在线播放| 天天搞搞| 99re这里| 国产精品三级| 成人在线H| 老鸭窝在线观看视频| 大香煮伊在75| 人人操人人操人人操人人| 国产一级在线观看| 荫蒂添的高潮免费视频| 亚洲中文字幕码mv| 大香蕉在线视频75| 亚洲日韩精品在线观看| 99热在线免费观看| 成人精品一区日本无码网站suv/| 国产免费黄色片| 精品国产乱码久久久久夜深人妻| 国产做受91电影| 91成人免费视频| 日本一级黄色| 欧美人操逼| 无码高清视频在线观看| 国产学生妹在线播放| 久久爱91| 亚洲无码观看视频| 四川美女网久草| 色欲网址| 色婷婷视频在线观看| 大香蕉最新视频| 亚洲无码在线电影| 老熟女搡BBBB搡BBBB视频| 国产黄A片免费网站免费| 国产人妻人伦精品1国产丝袜| 国产成人精品二三区麻豆| 成人女人18女人毛片| 日韩免费视频观看| 婷婷色777777| www.五月丁香| 日韩黄片视频| 国产一区二区波多野结衣| 狠狠干影院| 欧美三级欧美一级| 岛国AV免费看| 88AV在线观看| 色天堂视频| 2019天天操| 色综合久久天天综合网| 黄色视频在线| 色天堂网站| 乱伦一级黄片| 另类罕见稀奇videos| 日日干网| 亚洲精品在线视频| 91久久久久久久18| 亚洲V| 久久精品视频9| 亚洲无码高清在线观看视频| 伊人大综合| 久久国产精品影院| 日韩高清av| 97精品超碰一区二区三区| 内射免费看| 久久国产一区| 99热在线观看| 51国产黑料吃瓜在线入口| 麻豆疯狂做受XXXX高潮视频| 狼友无码| 无码人妻AⅤ一区二区三区| 老女人的逼| 人妻无码久久精品| 中文免费高清在线观看视频| www.午夜| 尤物视频入口| 五月天福利视频| 欧美老女人操逼视频| 大香蕉尹人| 中文解说AⅤ水果派| 成人无码欧美大片免费看| 色性网| 九九热在线精品视频| 神马午夜精品95| 五月天激情导航| 日本三级片无码| 精品国产乱子伦一区二区三区最新章| 色欲欲www成人网站| 午夜精品久久久久久久久无码99热| 国产在线无码视频| 日韩无码视频一区二区| 亚洲无码播放| 二区在线观看| 一本之道高清数码大全| 亚洲色婷婷| 黄片无码在线观看| 人人爽人人操人人爱| 亚洲国产精品视频| 自拍做爱视频| 日韩精品一二| 日本高清无码| 国产V视频| 三级片AV在线| 激情婷婷 | 成人黄色免费视频| 成人亚洲A片V一区二区三区蜜月| 久久久久久久久久久久成人| 69无码| 亚洲欧美国产毛片在线| 成人自拍视频在线| 无码任你躁久久久久| 日本高清一区| 99做爱| 色五月视频在线| 亚洲在线免费视频| 黄色无码电影| 亚洲AV无码乱码国产| 亚洲一区欧美二区gay| 国产成人av在线| 免费成人三级片| 艹逼视频免费观看| 国产成人秘一区二区三区东京热 | 欧美精产国品一二三产品价格| 特级大毛片| 日韩精品区| 免费无码AV| 亚洲一本之道| 日韩操逼av| 日韩欧美在线观看| 操逼网站免费观看| 黄色片大全| 亚洲成人影音先锋| 免费的黄色录像| 亚洲综合激情| 国产在线观看无码免费视频| 国产剧情一区二区三区| 成人国产片| 一级A片免费黄色视频| 久热精品在线观看| 国产永久精品| 中国丰满妇BBwBBwHD| 91色五月| 99热最新| 91香蕉视频在线播放| 安徽妇搡BBBB搡BBBB| 日韩综合在线观看| 性爱福利导航| 搞搞网日本9| 黄色电影免费在线观看| 无码毛片一区二区三区人口| 天天天天天天天天操| 日韩无码视频一区二区| 中文字幕日韩无码片| 亚洲日韩中文字幕| 西西人体WW大胆无码| 99热热久久| www.豆花视频成人版| 日韩AV大片| 麻豆911精一区二区| 日日免费视频| 九色PORNY国产成人| 成人大香蕉网站精品免费| 亚洲字幕av| 爱搞搞搞搞| 五月精品在线| 91久久性奴调教| 天天操天天干欧美精品| 久久久精品电影| 一级特黄大片录像i| 午夜福利10000| 一区二区三区四区五区无码| 北条麻妃91人妻互换| 豆花视频在线播放| 久久久久少妇| 亚洲福利天堂| 色五月婷婷AV| 欧美一级在线| 激情视频网| 黄页网站免费在线观看| 91成人精品一区二区| 国产婷婷色| 41ts午夜福利| 亚洲aⅤ| 免费黄色视频网站在线观看| 国产精品九九九九九九| 91密臀| 91综合在线观看| 688AV秘无码一区二区| 天天综合字幕一区二区| 大香蕉大香蕉大香蕉| 丰臀肥逼高清视频电影播放| 综合久久99| 欧美精产国品一二三区别电影| 婷婷射| 91日韩| 色妹子综合| 丁香激情五月| 国产强伦轩免费视频在线| 蜜臀91| 欧美性爱一区二区| 久久免费观看视频| 久草手机在线| 无码免费在线视频| 无码高清一区二区| a视频在线免费观看| 99人妻人人爽人人添人人精品| 91久久综合亚洲鲁鲁五月天 | 国产精品揄拍500视频| 亚洲免费观看高清完整版在va线观看 | 亚洲视频欧美视频| 免费无码婬片AAAA片老婦| 婷婷综合久久| 国产精品美女视频|