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

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

共 10714字,需瀏覽 22分鐘

 ·

2020-10-25 15:28

前言

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

框架簡介

?

Nest 是一個(gè)用于構(gòu)建高效,可擴(kuò)展的 Node.js 服務(wù)器端應(yīng)用程序的框架。它使用漸進(jìn)式 JavaScript,內(nèi)置并完全支持 TypeScript(但仍然允許開發(fā)人員使用純 JavaScript 編寫代碼)并結(jié)合了 OOP(面向?qū)ο缶幊蹋?code style="overflow-wrap: break-word;margin-right: 2px;margin-left: 2px;font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(53, 148, 247);background: rgba(59, 170, 250, 0.1);padding-right: 2px;padding-left: 2px;border-radius: 2px;height: 21px;line-height: 22px;">FP(函數(shù)式編程)和 FRP(函數(shù)式響應(yīng)編程)的元素。

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

?

我猜肯定很多同學(xué)看不懂這段話,沒關(guān)系,我也暫時(shí)看不懂,但這不影響我們學(xué)會(huì)用它 CRUD。

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

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

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

包括在 Nest 當(dāng)中遇到的裝飾器相關(guān)的知識(shí),大家也可以到上面「林不渡」同學(xué)的那篇文章中了解。

前置知識(shí)

  • HTTP
  • TypeScript/JavaScript

項(xiàng)目環(huán)境

  • git
  • mongodb
  • node.js >= 10.13.0

安裝 MongoDB

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

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

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

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

安裝好之后我們就可以啟動(dòng) MongoDB 的服務(wù)了:

brew?services?start?mongodb-community

服務(wù)啟動(dòng)了就不用管了,如果要關(guān)閉的話可以把 start 改成 stop,就能夠停止 MongoDB 的服務(wù)了。

構(gòu)建項(xiàng)目

有兩種方式,可以自行選擇,兩者沒有區(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

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

「當(dāng)然,我還是建議采用第一種方式,因?yàn)楹竺嫖覀兛梢灾苯邮褂媚_手架工具生成項(xiàng)目文件?!?/strong>

啟動(dòng)服務(wù)

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

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

這里其實(shí)有一個(gè)小小的點(diǎn),就是啟動(dòng)的時(shí)候應(yīng)該以 dev 模式啟動(dòng),這樣 Nest 會(huì)「自動(dòng)檢測(cè)我們的文件變化」,然后「自動(dòng)重啟服務(wù)」

如果是直接 npm start 或者 yarn start 的話,雖然服務(wù)啟動(dòng)了,但是我們?nèi)绻陂_發(fā)的過程中修改了文件,就要手動(dòng)停止服務(wù)然后重新啟動(dòng),效率挺低的。

安裝依賴

項(xiàng)目中我們會(huì)用到 Mongoose 來操作我們的數(shù)據(jù)庫,Nest 官方為我們提供了一個(gè) Mongoose 的封裝,我們需要安裝 mongoose@nestjs/mongoose

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

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

編寫代碼

創(chuàng)建 Module

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

nest?g?module?user?server

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

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

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

同時(shí)還會(huì)在根模塊 app.module.ts 中引入 UserModule 這個(gè)模塊,相當(dāng)于一個(gè)樹形結(jié)構(gòu),在根模塊中引入了 User 模塊。

執(zhí)行上面的終端命令之后,我們會(huì)驚訝地發(fā)現(xiàn),app.module.ts 中的代碼已經(jīng)發(fā)生了變化,在文件頂部自動(dòng)引入了 UserModule,同時(shí)也在 @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';?//?自動(dòng)引入

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

創(chuàng)建 Controller

nest?g?controller?user?server

Nest 中,controller 就類似前端的「路由」,負(fù)責(zé)處理「客戶端傳入的請(qǐng)求」「服務(wù)端返回的響應(yīng)」。

舉個(gè)例子,我們?nèi)绻ㄟ^ http://localhost:3000/user/users 獲取所有的用戶信息,那么我們可以在 UserController 中創(chuàng)建一個(gè) GET 方法,路徑為 users 的路由,這個(gè)路由負(fù)責(zé)返回所有的用戶信息。

//?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]?暫時(shí)代替所有用戶的信息
??}
}

這就是 controller 的作用,負(fù)責(zé)分發(fā)和處理「請(qǐng)求」「響應(yīng)」。

當(dāng)然,也可以把 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 我們可以簡單地從字面意思來理解,就是「服務(wù)的提供者」。

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

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

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

當(dāng)然,provider 不一定只能用來提供數(shù)據(jù)庫的操作服務(wù),還可以用來做一些用戶校驗(yàn),比如使用 JWT 對(duì)用戶權(quán)限進(jìn)行校驗(yàn)的策略,就可以寫成一個(gè)策略類,放到 provider 中,為模塊提供相應(yīng)的服務(wù)。

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

controllerprovider 都創(chuàng)建完后,我們又會(huì)驚奇地發(fā)現(xiàn),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?{}

從這里開始,我們就要開始用到數(shù)據(jù)庫了~

連接數(shù)據(jù)庫

引入 Mongoose 根模塊

連接數(shù)據(jù)之前,我們要先在根模塊,也就是 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 其實(shí)就是本地?cái)?shù)據(jù)庫的地址,xxx 是數(shù)據(jù)庫的名字。

這時(shí)候保存文件,肯定有同學(xué)會(huì)發(fā)現(xiàn)控制臺(tái)還是報(bào)錯(cuò)的,我們看一下報(bào)錯(cuò)信息就很容易知道問題在哪里了。

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

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

安裝完之后服務(wù)就正常重啟了。

引入 Mongoose 分模塊

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

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

export?const?userSchema?=?new?Schema({
??_id:?{?type:?String,?required:?true?},?//?覆蓋?Mongoose?生成的默認(rèn)?_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?{}

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

CRUD

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

//?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;
??}

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

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

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

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

因?yàn)?mongoose 操作數(shù)據(jù)庫其實(shí)是異步的,所以這里我們使用 async 函數(shù)來處理異步的過程。

好奇的同學(xué)會(huì)發(fā)現(xiàn),這里突然出現(xiàn)了兩個(gè)文件,一個(gè)是 user.interface.ts,另一個(gè)是 user.dto.ts,我們現(xiàn)在來創(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;
}

其實(shí)就是對(duì)數(shù)據(jù)類型做了一個(gè)定義。

現(xiàn)在,我們可以到 user.controller.ts 中設(shè)置路由了,將「客戶端的請(qǐng)求」進(jìn)行處理,調(diào)用相應(yīng)的服務(wù)實(shí)現(xiàn)相應(yīng)的功能:

//?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.'
????};
??}
}

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

接口測(cè)試

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

數(shù)據(jù)庫可視化工具我們用的是 MongoDB 官方的 MongoDB Compass,也很不錯(cuò)。

GET /user/users

GET /user/users

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

POST /user

POST /user

現(xiàn)在我們添加一條用戶信息,服務(wù)器返回添加成功。

Added

GET /user/:_id

GET /user/:_id

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

PUT /user/:_id

PUT /user/:_id

現(xiàn)在假如我想修改密碼,發(fā)送一個(gè) PUT 請(qǐng)求。

Edited

DELETE /user/:_id

DELETE /user/:_id

現(xiàn)在我們刪除一下剛才添加的用戶信息。

Deleted

會(huì)發(fā)現(xiàn)數(shù)據(jù)庫中的內(nèi)容已經(jīng)被刪除了。

完結(jié)撒花

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

總結(jié)

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

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

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

在學(xué)習(xí)的過程中,也一定會(huì)遇到一些問題,學(xué)習(xí)編程的過程中遇到問題不能自己憋著,「一定要學(xué)會(huì)請(qǐng)教大佬!一定要學(xué)會(huì)請(qǐng)教大佬!一定要學(xué)會(huì)請(qǐng)教大佬」!重要的事情說三遍。

不過也別很簡單的問題就去請(qǐng)教大佬,而且最好給一點(diǎn)小小的報(bào)酬,畢竟誰也沒有義務(wù)幫你解決問題。

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

當(dāng)然,這個(gè) Demo 中也有很多可以完善的地方,比如說「錯(cuò)誤處理」。

數(shù)據(jù)庫的操作肯定是有可能出現(xiàn)錯(cuò)誤的,比如說我們漏傳了 required: true 的參數(shù),數(shù)據(jù)庫就會(huì)報(bào)錯(cuò)。

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

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

如果涉及到登錄注冊(cè)的部分,還有密碼加解密的過程,同時(shí)還可能有權(quán)限校驗(yàn)問題需要進(jìn)行處理。

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

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

參考資料

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

??愛心三連擊

1.看到這里了就點(diǎn)個(gè)在看支持下吧,你的點(diǎn)贊在看是我創(chuàng)作的動(dòng)力。

2.關(guān)注公眾號(hào)程序員成長指北,回復(fù)「1」加入Node進(jìn)階交流群!「在這里有好多 Node 開發(fā)者,會(huì)討論 Node 知識(shí),互相學(xué)習(xí)」!

3.也可添加微信【ikoala520】,一起成長。


Reference

[1]

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

[2]

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

[3]

《走近 MidwayJS :初識(shí) TS 裝飾器與 IoC 機(jī)制》: https://juejin.im/post/6859314697204662279

[4]

Midway 官網(wǎng): https://midwayjs.org/midway/

[5]

MongoDB 官網(wǎng): https://mongodb.com/download-center/community

[6]

點(diǎn)擊這里: 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/


“在看轉(zhuǎn)發(fā)”是最大的支持

瀏覽 77
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 69看片| 黄色片网站| 一区二区不卡视频| 亚洲日操| 国产精品v欧美精品v日韩| 国产黄色一级| 国产女人18毛片18精品| 国产在线成人视频| 日韩逼逼| 国产精品欧美精品| 一区无码| 一道本无码视频| 日韩一片| 中文字字幕在线中文乱码电影 | 91高清在线| 精品一区二区三区四区视频| 无码日逼| 樱桃码一区二区三区| 久久久永久免费视频| 一区二区三区四区无码在线| 秋霞福利影院| 日本五十路熟女视频| 亚洲激情AV| 国产美女精品久久AV爽| 成人做爱黄片| 丰满人妻一区二区三区视频54| a片在线免费看| 四虎av| 大香蕉伊人网在线| 人人操超碰在线观看| 3344在线观看免费下载视频 | 免费做爱网站| 一级A片免费看| 人人人人人妻| 日韩黄色一级| 五十路无码| 日本处女性高潮喷水视频| 成人在线免费观看国产| 丁香视频在线观看| 麻豆乱伦视频| 亚洲无码三区| 黄色一级在线| 日韩精品一区在线| 欧美97| 超级碰碰碰碰碰碰碰碰碰| 在线成人毛片| 亚洲a片在线观看| 久久精品免费观看| 亚洲视频入口| 亚洲中文字幕观看| 青草久久久| YOUjiZZ欧美大全| 熟女人妻在线观看| 日韩欧美色| 大香蕉伊人网在线| 思思热思思操| 四川少妇搡BBBB搡BBB视频网 | 亚洲有码在线播放| 成人片天天看片欧美一级| a视频免费看| 国产一级婬片A片AAA樱花| 亚洲成人网站在线观看| 西西人体444www| 亚洲黄色视频在线| 中文字幕免费观看| 久久久久久久9999| 天堂操逼| 日韩精品久| 成人免费黄色视频| 人妻无码精品| 精品国产乱码| 视色av| 444444免费高清在线观看电视剧的注意| 污网站18禁| 亚洲免费高清视频| 无码成人在线观看| 麻豆精品在线观看| 日本操逼网站| 黄网免费看| 最新中文字幕在线观看视频| 免费看a| 国产在线拍揄自揄拍无码男男 | 玖玖资源在线观看| 91欧美视频| 日本成人激情视频| 四川少妇BBBB| 巨乳无码噜噜噜久久久| 精品一区电影| 一级操逼视频| 色情网站在线| 熟女中文字幕| 亚洲一级a| 麻豆国产一区二区三区四区| 国内自拍99| 在线视频日本| 黄色视频白丝| 日韩精品一区二区亚洲AV观看| www.91n| 亚洲性图第一页| 欧洲亚洲视频| 日韩va亚洲va欧美va高清| 在线观看黄色网| 91国黄色毛片在线观看| 成人免费视频国产在线观看| 伊人大香蕉在线| AV偷拍| 操逼在线观看| 影音先锋男人资源网| 午夜伊人| 欧美日韩在线视频免费观看| 一区二区三区久久久| 大香蕉午夜视频| 国产AV大全| 俺来俺去www色官网| 免费看操逼| 国产女人18毛片水真多成人如厕| 日韩国产在线观看| 日韩久久精品视频| 亚洲自拍偷拍视频| 自拍三级| 中文字字幕在线中文乱码电影 | 色婷婷视屏| 狠狠狠狠狠狠狠| 91丨露脸丨熟女精品| jizz在线观看| 免费观看黄色网| av黄色在线观看| 黄片网站在线免费观看| 色婷婷综合网| 俄罗斯白嫩BBwBBwBBw91| 美日韩视频欧美一区二区视频| 日韩精品人妻中文字幕有| 人妻japanesewoman| 欧美精品日韩| 亚洲AV片一区二区三区| 99热66| 三级成人视频| 国产三级自拍| av手机天堂| 日逼视频网站| 骚妇大战黑人15P| 亚洲欧美日韩不卡| 国产A片视频| 日中国老太太B| 日本欧美在线观看高清| 亚洲AV无码一区东京热久久| 日本親子亂子倫XXXX| 一区二区三区四区五区在线| 精品一区二区三区四区五区六区 | 青青成人| 成人无码91| 一级调教看片| 天天色影| 日本黄色A片免费看| 女侠吕四娘第二部| 九一香蕉视频| 人人操人人超碰| 日韩超碰在线| 黄片欧美| 日韩一级一片内射视频4K| 能看的av| 中文字幕无码乱伦| 久久久久网站| 色色综合视频| 人操人人人操| 日韩人妻精品无码久久| 玖玖精品视频| 欧美,日韩,日| ThePorn日本无码| 色射爱| 在线免费观看AV片| 欧美日韩一级黄色片| 少妇无码视频| 日韩免费成人| 欧美v在线观看| 日皮视频在线观看| 91蜜桃精品| 亚洲欧美在线视频免费| 色五月婷婷AV| 你懂的在线播放| 2019国产精品| 久草视频资源| 久久精品| 国产一级婬片A片AAA樱花| 欧美AAA| 五丁香在线观看AV| 日本人人操| 免费黄色一级电影| 中文字幕无码Av在线| 亚洲欧美日韩在线| 日本91视频| 国产99自拍| 人妻熟女在线视频| 成人三级黄色| 国产精品9| 国产精品香蕉| 亚洲AV无码专区在线播放中文| 思思热在线视频播放| 日韩A| 天天操b| 精品一区二区三区视频| 亚洲瑟瑟| 欧美成人精品| 国产三级自拍视频| 91精品丝袜久久久久久久久粉嫩 | 亚洲91精品| 成年人黄色电影| 超碰在线天天| 拍拍AV| 亚洲一区二区无码| 日本91视频| 美女福利在线| 国产av三级| 伊人网在线| 午夜精品久久久久久久久久久久| 丁香久久| 日韩中出| 北条麻妃黄色视频| 久热亚洲| 亚洲国产精品VA在线看黑人| 精品日韩在线视频| 黑人干亚洲| 黄色在线观看免费| 亚洲精品在线观看视频| 婷婷五月天网| 四虎成人无码| 激情午夜av| 樱桃码一区二区三区| 日韩v| 俄女兵一级婬片A片| 三级片网站视频| 狠狠干网站| 亚洲AV无码成人精品一区| 一级婬片A片AAAAA毛片| 日韩TV| 伊人网成人| 69成人精品国产| 一道本无码在线| 精品国产三级片| 西西特级WWW444无码| 操逼去| 蝌蚪窝免费在线视频| 熟女人妻一区二区三区| 欧美成人视频| 好吊视频一区二区三区| AV资源在线| www.高清无码| 超级人人操| 青青草91视频| A片视频免费| 亚洲免费在线观看视频| 欧美三级欧美一级| 亚洲无码黄片| 亚洲av| AV在线免费观看网址| 美女福利在线| 人妻无码一区二区| 豆花视频免费观看| 人妻无码不卡| 日韩爱爱免费视频| 无码视频在线看| 亚洲欧美卡通| 北条麻妃性爱视频| 丁香六月综合激情| 久久婷五月天| 丰满人妻一区二区三区免费 | 一区二区三区在线观看视频| 韩国成人啪啪无码高潮| 成人黄色电影在线观看| 欧美亚洲一区| 中文字幕视频2023| 69成人精品国产| 亚洲AV无码一区| 成人特级毛片全部免费播放| 黄色电影中文字幕| 男女拍拍免费视频| 国产无遮挡A片又黄又爽小直播 | 97人妻无码| 无码不卡在线| 特级西西人体444.444人体聚色 | 熟女老阿V8888AV| 国产成人精品av在线观看| 69福利网| 中文字幕+乱码+中文字幕电视剧| 亚洲AV无码| 东京热在线免费观看| 免费黄色视频大全| 五月天婷婷在线观看| 久草福利在线观看| 99精品在线观看| 欧美色视频网| 97综合久久| 国产乱子伦一区二区三区视频| 色综合99久久久无码国产精品| 中文字幕视频在线免费观看| 91麻豆精品91久久久久同性| 亚洲国产av一区| 骚BBBB槡BBB槡BBB| 江苏妇搡BBBB搡BBBB-百度| 18禁一区二区| 黑人猛躁白人BBBBBBBBB| 黃色级A片一級片| www.亚洲成人| 操比视频| 久久人妻无码中文字幕系列| 国产欧美综合一区| 日韩视频中文字幕在线| 久久久久久五月天| 无码潮喷| 亚洲成人AV在线观看| 高清无码视频在线免费观看| 免费无码婬片A片AAA毛片96| 精品91美女| 国产精品黑人ThePorn| www.久久精品视频| 国产内射网站| av一区二区三区四区| 超碰国产在线| 国产熟妇码视频户外直播| 99re视频精品| 精国产品一区二区三区A片| 操人在线观看| 欧美性猛交XXXX乱大交HD | 男人的天堂久久| 亚洲人操逼视频| 小黄片免费在线观看| 伊人网成人| 国产三级AV在线观看| 毛片A片免费看| 中国特级毛片| 欧美成人精品欧美一级私黄| 超碰乱伦| 做爱网站在线观看| 狼友视频免费在线观看| 久久精品成人导航| 操屄视频在线观看| 特黄视频| 国产成人自拍视频在线| 日本中文字幕中文翻译歌词| 国产黄色免费乱伦片| 天天无码| 无码婬片A片AAA毛片艳谭| 可以免费看的黄色视频| 亚洲精品人妻在线| 东京热一区二区| 激情毛片| 无码日韩成人| 操日本女人逼| 色色影院| 香蕉日逼| 精品国精品自拍自在线| 69国产精品成人无码视频色| 二区视频| 猫咪亚洲AV成人无码电影| 国产视频999| 国产熟妇婬乱A片免费看牛牛| 中文字幕亚洲在线| 操日韩美女| 欧美激情区| 亚洲第一页在线| 麻豆91网站| 亚洲伦乱| 色五婷婷| 亚洲第一狼人综合网| 国产大屌| 97视频在线免费观看| 成人性生活一级片| 亚洲无码中文字幕在线| 制服乱伦| 逼逼AV网站-日韩电影| a片在线观看免费| 久久一二三区| 日本免费高清视频在线观看一区| 欧美无遮挡| 嫩小槡BBBB槡BBBB槡免费-百度 | 麻豆乱码国产一区二区三区| 国产特级毛片AAAAAA| 视频二区| 影音先锋一区二区三区| 91精品国产乱码久久| 杨门女将婬乱史1—6| 91人妻人人澡人人精品| 欧美日韩无| 亚洲精品国产av| 中韩一区二区| 99久在线视频| 日韩无码国产精品| 国产无码电影网| 1插菊花综合| 肥臀AV在线| 中文字幕在线一区二区a| 人妻熟女字幕一区二区| 大香蕉尹人在线视频| 狠狠色狠狠干| 国产探花视频在线免费观看| 无码视频在线免费播放| 日韩午夜成人| 99视频在线免费播放| 激情视频国产| 成人做爰免费网站2023| 免费在线观看无码| 国产精品成人免费精品自在线观看 | www.大香蕉伊人| 国产又爽又黄免费网站在线看| 久久99影院| 久久播视频| 五月天激情网站| www伊人| 操逼视频国产| AAA精品| 99久久婷婷国产综合精品电影 | 婷婷欧美日韩| 99中文字幕| 男女AV网站| 操碰视频| 日本一级特级毛片视频| 91偷拍视频| 91无码精品国产AⅤ| 精精品人妻一区二区三区| 豆花视频在线播放| 一区二区三区在线免费观看| 久久久老熟女一区二区三区91| 成人无码区免费A片| 大香蕉亚洲网| 日韩精品91| 大香蕉在线视频观看| 日韩少妇无码视频| 日韩中文字幕熟妇人妻| 欧美激情四射| 日韩激情视频| 无码在线高清| 国产清纯可爱美女自卫裸贷偷情| 丁香五月婷婷久久| AV三级片网站| 无码人妻精品一区二区三区蜜桃91 | 苍井空一区二区| 97视频网站| 91在线无码精品秘国产色多多| 国产无码性爱| 波多野结衣久久| 2024天天操| 2016av天堂网| avwww| 天天日天天干天天爽| 大香蕉官网| 九七在线视频| 高清无码黄片| 欧美一级AA| 韩国成人无码视频| 日皮视频免费在线观看| 色情综合| 久久69| 日韩av高清| 午夜影院操| 久久无码高清| 69日逼| 国产又爽又黄免费网站在线观看| 国产成人无码精品一区秘二区| 另类AV| 伊人大综合| 亚洲AV片一区二区三区| 亚洲毛片在线观看| 97九色| 亚洲国产精品成人va在线观看| 91探花视频在线观看| 人妻国产| 一区二区不卡| 在线亚洲欧美| 一本久道视频一本久道| 野花av| 亚洲天堂AV网| 中国老女人日逼| 欧美三级片在线| 69国产精品成人无码视频色 | 俺去俺来也在线www色情网 | 91三级片在线观看| 亚洲不卡| 特级西西人体444.444人体聚色 | AV天堂手机| 97人妻人人澡| 一区二区在线看| 亚洲黄色av网站| 日韩美女视频19| 无码成人在线| 福利黄色片:片| 爱搞搞就搞搞| 91在线无码精品秘入口男同| 91av一区二区| 九九热精品| 亚洲操逼逼| 日韩精品视频免费在线观看 | 免费在线观看毛片| 亚洲天堂网在线视频| 伊人久久大香蕉国产| 亚州精品无码| 国产午夜在线视频| 一区二区三区四区五区| 综合色综合| 麻豆三级电影| 青青伊人久久| 国产又爽又黄免费网站在| 午夜神马51| 91在线视频播放| 九哥草逼网| 免费Av网站| 亚洲黄色小电影| 北条麻妃一区二区三区在线| 久久国内视频| 日韩中文字幕在线观看视频| 一区二区三区不卡在线| 激情啪啪网站| 综合久久99| 伊人久久大香线蕉av一区| 国产卡一卡二| 亚洲精品国产精品乱码不卡√香蕉| 亚洲91在线| 五月涩| 黄色免费在线网站| 日韩一区二区三区四区久久久精品有吗| 欧美日韩狠狠操在线观看视频| 日韩国产高清无码| 日一日干一干| 北条麻妃JUX-869无码播放| 看免费操逼视频| 欧美日本色| 99中文字幕| 日韩人妻精品无码制服| 国产一二区| 91人妻人人澡人人爽人人爽| 无码秘蜜桃一区二区三区| 国产精品久久久91| 99re99| 在线大香蕉| 内射极品美女| 成年人黄色电影| 手机av在线观看| 亚洲日韩字幕| 大香蕉久操网| 亚洲午夜无码精品专区| 亚洲欧美色图| 玉米地一级婬片A片| 亚洲无码av在线播放| 少妇搡BBBB搡BBB搡造水多| 国产日韩一区二区三区| 国产又爽又黄视频在线看| sm视频网站| 国产精品无码毛片| 国产激情欧洲在线观看一区二区三区| 国产黄色在线免费观看| 亚洲日韩欧美在线观看| 日韩无码免费电影| 亚洲中文字幕有码| 91免费观看网站| 99色亚洲| 日韩中文字幕一区二区三区| 青娱乐极品久久| 婷婷综合| 国产精品h| 日韩精品人妻中文字幕有码| 伊人五月天激情| 欧美日韩精品一区二区| 亚洲精品久久久久久久久豆丁网 | 亚洲国产av一区| 日韩AV毛| 毛片在线看片| 少妇三区| 国产成人电影免费在线观看| 欧美777| 欧美日韩久久| 超碰97免费| 亚洲精品在线视频| 久久水蜜桃| 欧美黄色性爱视频| 91精品亚洲| 乱婬妺妺躁爽A片| 亚洲黄色电影网站| 激情操逼| 欧美四区| 亚洲骚妇| 欲色av| 久热99| 日本高清视频网站网wwwwww| www.水蜜桃| 亚洲一级在线观看| 在线观看黄色av| 亚洲性爱视频在线观看| 亚洲v视频| 成人精品在线视频| 激情一区二区| 丰满人妻一区二区三区| 一本一道久久综合狠狠躁牛牛影视 | 撸一撸AV| 午夜福利aaa| 国产真实露脸乱子伦对白高清视频| 亚人精品中文字幕在线观看| 欧美丰满老熟妇XXXXX性| 黄色片一级| 亚洲日韩中文无码| 婷婷网址| 免费a在线观看| 亚洲三级无码| 欧美成人视频。| 无码三级AV| 麻妃无码| 夜夜撸一撸| 精品伊人久久| 欧美黄色精品| 大黄网站在线观看| 丝袜足交视频| 亚洲成人网站在线| 日本精品人妻无码77777| 久操视频一区二区三区| 国产人与禽zoz0性伦| 婷婷二区| 久久久高清无码视频| 大香蕉黄色片| 60分钟上大床又黄又爽| 伊人福利导航| 特级特黄AAAAAAAA片| 中文字幕精品在线| 18国产免费视频| 麻豆传媒视频观看| 日韩av在线不卡| 老女人肏屄视频| 日韩网站在线观看| 熟女视频91| 91精品视频在线播放| 欧美A级视频| 亚洲AV三级片| 五月激情久久| 乱子伦国产精品视频一级毛| 日韩一区二区在线视频| www.黄色在线观看| 青草网| 性欧美丰满熟妇XXXX性久久久| 啪啪视频在线观看| 国产操逼大全| 大香蕉网伊人| 精品无码国产一区二区三区51安| 日韩丰满人妻| 欧美不卡一区二区| 欧美视频a| 欧美午夜成人| 亚洲国产熟妇综合色专区| 91久久精品一区二区三区| 亚洲www视频| 欧美中文日韩| 色婷婷亚洲精品天天综合| 亚洲中文自拍| av性爱在线| 无码伊人| 毛片福利| 久草视频在线资源| 免费看黄色片视频| 俺去俺来也WWW色老板| 亚洲自拍偷拍视频| 成人黄色网址| 中韩日美免费看的电影| 韩国精品一区二区三区| 日本五十路| 欧美色大香蕉| 91黄网站在线观看| 婷婷丁香五月亚洲| 亚洲一二三四| 欧美日韩精品一区二区三区| 欧美成人三级片| www.天天射| 天天干夜夜爽| 免费观看黄色在线视频| 婷婷色在线观看| 91无码在线观看| 99视频在线免费| 免费69视频看片| av久草| 青操AV| 免费日韩无码| av不卡在线| 蜜臀av一区二区三区| 91视频网站免费| 色图欧美色图| 美日韩在线观看| 久久群交| 成片免费观看视频大全| 91麻豆免费看| 五月黄色电影| 成人精品午夜无码免费| 蜜桃视频网站在线观看| 人人看AV| 91偷拍视频| 国产精品AV一区| 国产9熟妇视频网站| 中文字幕一区二区无码成人| 四虎最新地址| 91蝌蚪视频在线观看| 久久电影五月天| 黄色成人免费视频| 婷婷中文在线| 亚洲视频三区| 久操欧美| 久久这里有精品| 91精品婷婷国产综合| 亚洲视频国产| 69视频在线观看免费| 91热久久| 亚洲高清在线| 大香蕉偷拍视频| 天天肏天天干| 亚洲V在线观看| 特级AV| 免费一级黄色片| 国产欧美日韩在线播放| 少妇熟女网| 高潮91PORN蝌蚪九色| ThePorn日本无码| 天天色小说| eeuss一区二区| 日韩精品在线免费视频| 色天天干| 亚洲综合网站| 老熟女伦一区二区三区| 安徽扫搡BBBB揉BBBB| 精品九九九九九| 成人黄片18| 少妇成人网| 亚洲少妇一区| 国产黄色电影在线| 大香蕉手机在线视频| 成人亚洲精品一区二区三区| 激情黄色视频| 嫩草99| 日韩成人在线观看视频| 人妻在线无码| www.av91| 激情开心站| 91丨国产丨精品丨丝袜| 国产乱子伦一区二区三区视频| 天天操一操| 国产真人无码| 五月丁香激情视频| 欧美特级黄| 婷婷日韩中文字幕| 荫蒂添的高潮免费视频| 大香蕉中文在线| 91麻花| 青青操在线视频| 在线观看老湿视频福利| 欧美成人图片视频在线| 国产黄色视频在线观看免费| 久久91人妻无码精品蜜桃HD| 日韩无码操逼视频| 噜噜色av| 午夜成人在线观看| 另类TS人妖一区二区三区| 国产成人精品一区二三区熟女在线| 婷婷少妇激情| 91探花视频精选在线播放| 青青草网站在线观看| 日韩黄色电影网站| 少妇高潮在线| 有码在线播放| 操欧美美女| 2021狠狠操| 成人做爰黄A片免费看直播室动漫| 人人舔人人草| 91五月天| Japanese在线观看| 亚洲最新在线视频| 在线观看黄色av| 另类老妇奶性BBWBBwBBw| 国产激情都市一区二区三区欧美 | 亚洲无码在线资源| 国产一区免费| 色婷婷六月| 国产欧美视频在线| 十八禁在线播放| 天天草视频| 成人毛片网| 免费成人大片| 欧美日韩北条麻妃视频在线观看| 大香蕉福利视频| 毛片精品| 欧美老司机| 国产精品97| 日韩三级片无码| 人妻少妇精品视频一区二区三区| 西西888WWW大胆无码| 亚洲无码在线播放视频| 香蕉av在线| 黄色大片在线免费观看| 日韩乱伦中文字幕| YOUjiZZ欧美大全| 亚洲国产高清视频| 日韩在线视频中文字幕码无| 无码毛片在线观看| 人人干人人爱| 先锋成人AV| 日本成人一区二区三区| 亚洲熟女一区二区三区妖精| 免费观看黄色片| 夜夜骚av.一区二区三区四区| 奇米超碰| 黄色AA片| 国产3级片| 黄色三级片视频| 亚洲AV成人片色在线观看麻豆 | 91人妻日韩人妻无码专区精品 | 日本无码在线视频| 欧美老妇另类BBwBBw| 麻豆av人人乐| 大鸡巴久久久| 在线观看老湿视频福利| 久久视频网站| 无码三级视频| 91天天射| 免费十无码| 国产永久在线| 激情小说亚洲图片:伦| 亚洲的天堂的αⅴ| 久久无码高清| 免费看毛片的网站| 人人操人人摸人人射| 日本不卡一区| 高潮无码视频| 国产视频一二三| 91嫖妓站街埯店老熟女| 日韩在线欧美在线| 久久精品中文字幕| 国产三级av在线| 久热视频在线| 超碰人人人人人人人人| 亚洲精品国产精品乱玛不99| 天堂中文在线视频| 久久久穴| 91福利网站| 无码熟妇人妻无码AV在线天堂| 日本伊人网| 一区二区三区四区无码| 亚洲视频免费看| 伊人视频在线| 成人毛片AV无码| 蜜桃AV在线观看| 视频一区二区免费| 操噜噜噜噜噜插| 国产一区无码| 日韩免费在线观看视频| a级毛片在线观看| 91人妻人人爽人人澡| 亚洲高清无码一区二区| 人人操人人操人人操人人操人人操| www.日韩| 強姦婬片A片AAA毛片Mⅴ| 天天操天天插| 日本免费不卡| 亚洲综合在线播放| 91精品婷婷国产综合| 毛片天天干| 国产成人AA| 国产91白浆四溢| 人妻一区二区三区| 外国一级片| 人人操在线观看| 免费操逼视频在线观看| 日韩中文字幕在线免费观看| www.俺去啦| 黄色片在线视频| 韩国午夜福利视频| 青草社区在线观看| www.色婷婷| www.天天日| 午夜激情AV| 西西西444www无码视| 黄色一级在线观看| 日本操逼片| 激情视频免费在线观看| 在线婷婷| 欧美极品另类| 黄色成人免费视频| 91插插插插| 男人天堂资源网| 午夜性爱网址| 黄色av网站在线观看| 友田真希一级婬片A片| 无套内射免费视频| 男女怕怕网站| 日本三级AAA三级AAAA97| 成人福利影视| 韩国GOGOGO高清| 欧美日韩视频| 亚洲欧美视频| 国产精品激情| 操老女人视频| 日韩欧美综合| 婷婷五月天激情俺来也| 久操播放器| 爱爱帝国综合社区| 99re欧美激情| 国内自拍激情视频| 日本黄色的视频| 亚洲成人免费在线视频| 人人爱人人爽人人操|