精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Nest.js 快速入門:實現對 MySQL 單表的 Crud

數據庫 MySQL
Typeorm 是一個 ORM 框架,通過映射表和對象的對應關系,就可以把對對象的操作轉換為對數據庫的操作,自動執行 sql 語句。

[[441489]]

Nest.js 是一個 Node.js 的后端開發框架,它實現了 MVC 模式,也支持了 IOC(自動注入依賴),比 Express 這類處理請求響應的庫高了一個層次。而且也很容易集成 GraphQL、WebSocket 等功能,適合用來做大規模企業級開發。

Nest.js 在國內外用的都挺多的,今天我們就來入門下吧:做一個筆記管理功能,實現對 mysql 單表的增刪改查并提供 Restful 的接口。

后面要介紹的內容比較多,我們先來看下最終的效果吧:

視頻

完整代碼上傳了 github:https://github.com/QuarkGluonPlasma/nestjs-exercize

Nest.js + Typeorm 基礎

mysql 數據庫和 Typeorm

首先從離前端比較遠的數據庫講起。

在 mysql 的官網下載 mysql,安裝并啟動服務。

這時候就可以用命令行來寫 sql 操作數據庫了。

但是命令行操作不夠方便,所以我們還要下載一個有界面的 mysql 客戶端,我這里用的是 navicat。

它可以可視化的創建數據庫、表等,可以在編輯器里寫 sql 然后執行。比如圖中我創建了 hello 的數據庫和一堆表。

Node.js 代碼里同樣可以連接上數據庫服務,然后遠程執行 sql 來對數據庫表做增刪改查。

但直接執行 sql 比較繁瑣,能不能我只操作對象,對象屬性變了就自動去執行 sql 來同步數據庫呢?就像 vue 的數據變了自動同步視圖一樣。

數據庫和對象關系的映射就叫做 ORM(Object Relational Mapping),也就是把表映射成對象,把表與表之間的關聯映射成對象之間的關系。之后對對象的操作會通過 sql 同步到數據庫。

Typeorm 就是一個實現 orm 的框架,可以通過裝飾器來描述映射關系,比如 @Entity(實體)、@Column(列)、@PrimaryGeneratedColumn(主鍵 ID 自動生成)

  1. import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"
  2.  
  3. @Entity() 
  4. export class Note{ 
  5.  
  6.     @PrimaryGeneratedColumn() 
  7.     id: number; 
  8.  
  9.     @Column() 
  10.     title: string; 
  11.  
  12.     @Column() 
  13.     content: string; 

通過裝飾器聲明了關系,那么在建立了數據庫連接之后,我們只需要操作對象,Typeorm 就會自動去執行 sql 來把變動同步到數據庫。

這樣,我們對數據庫的表的操作和增刪改查就實現了。

數據庫部分搞定之后,我們再往前看一下處理請求的部分。

http 請求和 Nest.js

處理請求的后端框架我們使用 Nest.js,它提供了 Controller、Service 等劃分,這是對 MVC 模式的實現。

Controller 里面負責處理請求,把處理過的參數傳遞給 service。

Service 負責業務邏輯的實現,基于 Typeorm 的增刪改查功能來實現各種上層業務邏輯。

除此以外,Nest.js 還劃分了 Module,這個 Module 是邏輯上的模塊,和我們常說的文件對應的模塊不同,它包含了 Controller、Service 等,是對這些資源的邏輯劃分。

Module 和 Module 之間還可以有依賴關系,也就有 imports 和 exports。

所以,模塊的聲明就是這樣的:

  1. import { Module } from '@nestjs/common'
  2.  
  3. @Module({ 
  4.   imports: [AaaModule], 
  5.   controllers: [BbbController], 
  6.   providers: [BbbService], 
  7.   exports: [BbbService] 
  8. }) 
  9. export class BbbModule {} 

這里通過 @Module 的裝飾器來聲明了 Bbb 的模塊,它依賴了 Aaa 模塊,也就是在 imports 引入的 AaaModule。controllers 是控制器,包含 BbbController,providers 是提供商,有 service、factory 等類型,這里包含 BbbService,同時,還導出了 BbbService 可以被其他模塊引入。

Controller 的聲明也是通過裝飾器:

  1. @Controller() 
  2. export class BbbController { 

Service 的聲明也是用裝飾器,只不過不叫 Service,而叫 Injectable。

  1. @Injectable() 
  2. export class BbbService { 

至于為什么叫 Injectable,就涉及到了 IOC 的概念了。

IOC(Inverse Of Control)是控制反轉的意思,就是只需要聲明你的依賴,不需要創建依賴的對象,容器會注入給你。

因為所有的對象都是由容器管理的,那么自然就可以在創建對象的時候注入它需要的依賴,這就是 IOC 的原理。

Service 是可以被作為依賴注入到其他類的實例中去的,所以用 Injectable 裝飾器。

所有的 Module 會有一個根 Module 作為入口,啟動 IOC 容器就是從這個模塊開始的:

  1. import { NestFactory } from '@nestjs/core'
  2. import { AppModule } from './app.module'
  3. import "reflect-metadata"
  4.  
  5. async function bootstrap() { 
  6.   const app = await NestFactory.create(AppModule); 
  7.   await app.listen(3000); 
  8. bootstrap(); 

上面就是典型的 Nest.js 啟動代碼,從 AppModule 這個根 Module 開始創建 IOC 容器,處理從 3000 端口發過來的請求。

reflect-metadata 模塊是用于解析類的裝飾器的,因為要給某個類的實例注入依賴就得能解析出它通過裝飾器聲明了哪些依賴,然后注入給它。所以要實現 IOC 需要依賴這個包。

這就是 Nest.js 大概的設計了:IOC + MVC,通過 IOC 容器來管理對象的依賴關系,通過 Controller、Service、Module 來做職責上的劃分。

Nest.js 結合 Typeorm

Typeorm 是做把對象的操作通過 sql 同步為對數據庫操作的 orm 的,而 Nest.js 是做 Web 后端應用的 MVC 分層以及通過 IOC 管理對象的創建和依賴的。這倆很自然的可以結合,結合的方式就是 @nestjs/typeorm 包。

@nestjs/typeorm 包提供了 TypeOrmModule 這個 Module,它有兩個靜態方法 forRoot、forFeature。

forRoot 用于創建數據庫連接,傳入一些配置參數,在入口 Module 引入。

  1. @Module({ 
  2.   imports: [ 
  3.     TypeOrmModule.forRoot({ 
  4.       type: 'mysql'
  5.       host: 'localhost'
  6.       port: 3306, 
  7.       username: 'root'
  8.       password'你的密碼'
  9.       database'數據庫名'
  10.       synchronize: true 
  11.     }), 
  12.     NotesModule 
  13.   ] 
  14. }) 
  15. export class AppModule {} 

forFeature 用于創建不同實體類對應的 Repository,在用到該實體的 Module 里引入。

  1. @Module({ 
  2.   imports: [TypeOrmModule.forFeature([Aaa])], 
  3.   controllers: [AaaController], 
  4.   providers: [AaaService], 
  5.   exports: [AaaService] 
  6. }) 
  7. export class AaaModule {} 

我們知道了 Typeorm 和 Nest.js 都是做什么的和怎么用,簡單小結一下:

Typeorm 是 ORM 框架,用于把對象的操作同步為對數據庫的操作,會自動執行 sql 語句。

Nest.js 是 MVC 框架,用于 Web 后端應用的邏輯分層,還提供了 Module 用來進一步劃分 Controller 和 Service。此外,Nest.js 提供了 IOC 容器,統一管理對象的創建和依賴關系,根據聲明來自動注入依賴。

兩者的結合就是通過 @nestjs/typeorm 的包,它有兩個靜態方法用于生成 Module。

說了這么多,大家可能還理解的不是很清楚,那么我們就來做下筆記管理的實戰案例吧。

實戰案例

Nest.js 樣板代碼比較多,自己寫還是比較費事的,@nestjs/cli 的命令行工具對這些做了自動化。

首先要搭項目的骨架,用

  1. nest new project-name 

然后生成某個 Module 的代碼

  1. nest g resource xxx 

生成的代碼就是帶有 Controller、Service、Module 的,并且也有了 CRUD 的樣板代碼。

我們重點來看下 Controller 的代碼:

  1. import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common'
  2. import { XxxService } from './xxx.service'
  3. import { CreateXxxDto } from './dto/create-xxx.dto'
  4. import { UpdateXxxDto } from './dto/update-xxx.dto'
  5.  
  6. @Controller('xxx'
  7. export class XxxController { 
  8.   constructor(private readonly xxxService: XxxService) {} 
  9.  
  10.   @Post() 
  11.   create(@Body() createXxxDto: CreateXxxDto) { 
  12.     return this.xxxService.create(createXxxDto); 
  13.   } 
  14.  
  15.   @Get() 
  16.   findAll() { 
  17.     return this.xxxService.findAll(); 
  18.   } 
  19.  
  20.   @Get(':id'
  21.   findOne(@Param('id') id: string) { 
  22.     return this.xxxService.findOne(+id); 
  23.   } 
  24.  
  25.   @Patch(':id'
  26.   update(@Param('id') id: string, @Body() updateXxxDto: UpdateXxxDto) { 
  27.     return this.xxxService.update(+id, updateXxxDto); 
  28.   } 
  29.  
  30.   @Delete(':id'
  31.   remove(@Param('id') id: string) { 
  32.     return this.xxxService.remove(+id); 
  33.   } 

@Controller 的參數可以聲明 URL 路徑,@Get、@Post、@Patch、@Delete 也可以通過參數聲明 URL 路徑,最終會把兩個拼起來。比如 /xxx/:id 的 get 方法。

@Get、@Post、@Patch、@Delete 分別對應不同的請求方式。

@Param 是取路徑中的參數,@Query 是取查詢字符串的參數。

@Body 是把請求參數設置到對象的屬性上,被用來傳遞數據的對象叫做 dto(data transfer object)。

再就是返回的對象會被序列化成 JSON,不需要手動序列化。

然后再看下 Service:

  1. import { Injectable } from '@nestjs/common'
  2. import { CreateXxxDto } from './dto/create-xxx.dto'
  3. import { UpdateXxxDto } from './dto/update-xxx.dto'
  4.  
  5. @Injectable() 
  6. export class XxxService { 
  7.   create(createXxxDto: CreateXxxDto) { 
  8.     return 'This action adds a new xxx'
  9.   } 
  10.  
  11.   findAll() { 
  12.     return `This action returns all xxx`; 
  13.   } 
  14.  
  15.   findOne(id: number) { 
  16.     return `This action returns a #${id} xxx`; 
  17.   } 
  18.  
  19.   update(id: number, updateXxxDto: UpdateXxxDto) { 
  20.     return `This action updates a #${id} xxx`; 
  21.   } 
  22.  
  23.   remove(id: number) { 
  24.     return `This action removes a #${id} xxx`; 
  25.   } 

這些 service 的方法都沒有具體實現。

我們引入 Typeorm 來做數據庫的 CRUD。

在根模塊引入用于數據庫連接的 Module

在剛創建的模塊引入實體對應的 Module:

創建筆記實體,用 @Entity 標識。并且用 @Column、@PrimaryGeneratedColumn 來標識列和主鍵。

  1. import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"
  2.  
  3. @Entity() 
  4. export class Note{ 
  5.  
  6.     @PrimaryGeneratedColumn() 
  7.     id: number; 
  8.  
  9.     @Column() 
  10.     title: string; 
  11.  
  12.     @Column() 
  13.     content: string; 
  14.  
  15.     @Column() 
  16.     createTime: Date
  17.  
  18.     @Column() 
  19.     updateTime: Date
  20.  
  21.     @Column() 
  22.     isDelete: boolean; 

之后在 service 里注入實體對應的操作類 Repository,就可以實現對筆記的增刪改查了。

用到的 dto 就是參數對應的對象,他們是實體的一部分屬性的集合。比如 update dto:

  1. export class UpdateNoteDto { 
  2.     title: string; 
  3.  
  4.     content: string; 
  5.  
  6.     createTime: Date
  7.  
  8.     updateTime: Date
  9.  
  10.     isDelete: boolean; 

這樣,就實現了對筆記的增刪改查。

我們用 postman 來測試下效果:

運行 npm start 把項目跑起來

可以看到 4 個接口的路由映射都成功了。

數據庫一開始有兩條記錄:

通過查詢接口能正確的查出來:

然后測試下修改接口:

數據庫中確實被修改了:

經過測試,對筆記單表的 CRUD 的功能正常。

視頻

我們完成了第一個 Nest.js 的后端應用!

完整代碼上傳了 github:https://github.com/QuarkGluonPlasma/nestjs-exercize

總結

Typeorm 是一個 ORM 框架,通過映射表和對象的對應關系,就可以把對對象的操作轉換為對數據庫的操作,自動執行 sql 語句。

Nest.js 是一個 MVC 框架,提供了 Module、Controller、Service 的邏輯劃分,也實現了 IOC 模式,集中管理對象和自動注入依賴。

Typeorm 和 Nest.js 的結合使用 @nestjs/typeorm 的包,它提供了一個 TypeormModule 的模塊,有 forRoot 和 forFeature 兩個靜態方法。forRoot 方法用于生成連接數據庫的 Module,forFeature 用于生成實體對應的 Repository 的 Module。

Nest.js 有很多樣板代碼,可以用 @nestjs/cli 的命令行工具生成,包括整體的和每個 Module 的。

 

總之,理解了 IOC,理解了 Module、Controller、Service 的劃分,就算是初步掌握了 Nest.js,結合 Typeorm 的 ORM 框架可以輕松的做數據庫表的 CRUD。

 

責任編輯:武曉燕 來源: 神光的編程秘籍
相關推薦

2021-06-18 06:48:54

前端Nest.js技術熱點

2022-03-18 21:51:10

Nest.jsAOP 架構后端

2022-02-02 20:21:24

短信驗證碼登錄

2022-12-27 09:22:06

Nest.js框架

2022-03-02 14:00:46

Nest.jsExpress端口

2024-05-06 08:48:18

nestjava?MVC?

2024-02-04 19:15:09

Nest.js管理項目

2021-12-27 20:29:21

機制PipeExceptionFi

2021-10-28 17:40:22

Nest.js前端代碼

2024-05-21 10:35:34

2021-06-29 06:25:22

Nest.jsTypeORM數據庫

2023-01-30 09:01:34

DecoratorsJS語法

2010-11-22 13:13:30

MySQL模糊查詢

2010-10-15 14:39:55

MySQL單表大小

2012-04-19 10:06:16

ibmdw

2010-10-08 15:37:21

MySQL單表

2010-11-24 09:37:01

mysql快速建表

2024-03-15 09:26:59

2020-09-27 08:00:49

分庫分表

2022-04-21 09:59:53

Nest參數校驗
點贊
收藏

51CTO技術棧公眾號

四虎成人免费视频| 亚洲专区国产精品| 精品人妻中文无码av在线| 成人av色网站| 亚洲综合激情网| 欧美日韩一区二区三区免费| 国产又大又长又粗| 国产欧美短视频| 日韩最新av在线| 大桥未久恸哭の女教师| av免费在线一区| 亚洲一卡二卡三卡四卡| 日韩成人av网站| 亚洲风情第一页| 日韩国产在线观看一区| 欧美成人免费全部| 女女互磨互喷水高潮les呻吟| 成人国产精品久久| 日韩欧美在线视频日韩欧美在线视频 | 久久激情五月婷婷| 69精品小视频| 少妇影院在线观看| 青青草国产免费一区二区下载| 日韩精品一区在线| 色免费在线视频| 这里有精品可以观看| 亚洲视频在线观看一区| 日韩av在线电影观看| 天堂在线资源网| 国产精品亚洲一区二区三区妖精| 日韩免费在线播放| 日韩免费不卡视频| 欧美久久成人| 久久亚洲精品一区| 亚洲少妇xxx| 国产精品一在线观看| 亚洲国产免费av| 亚洲精品一区二区18漫画| 国产精品美女午夜爽爽| 色先锋久久av资源部| 搞av.com| 国产精品一区hongkong| 亚洲精品乱码久久久久| 一区二区三区偷拍| 69av在线| 国产精品麻豆久久久| 日韩欧美国产二区| 国产一二三在线观看| 91欧美激情一区二区三区成人| 丁香婷婷久久久综合精品国产| 国产裸体无遮挡| 国内精品免费**视频| 国产精品视频自在线| 国产情侣免费视频| 日本色综合中文字幕| 日韩免费在线视频| 亚洲成人av网址| 日本欧美久久久久免费播放网| 一级黄色av片| 亚洲日本欧美在线| 国产三级漂亮女教师| 美女在线观看视频一区二区| 国产v综合ⅴ日韩v欧美大片| 日韩手机在线视频| 久久久精品五月天| 国产国语刺激对白av不卡| 7799精品视频天天看| 快she精品国产999| 中文字幕精品在线不卡| 色女人综合av| 婷婷在线视频观看| 亚洲少妇最新在线视频| 日本在线视频www色| 中文字幕在线观看播放| 亚洲综合一区在线| 日日摸日日碰夜夜爽av| 日韩欧美一区二区三区免费观看| 欧美亚洲国产bt| 在线观看免费不卡av| 超碰国产精品一区二页| 日韩女优av电影在线观看| 亚洲午夜久久久久久久久| 日韩精品免费一区二区夜夜嗨| 亚洲欧美日韩一区二区在线 | xnxx国产精品| 日韩午夜视频在线观看| 男女啪啪在线观看| 一区二区激情视频| 午夜肉伦伦影院| 日韩精品第二页| 精品国免费一区二区三区| 99久久人妻无码中文字幕系列| 少妇精品久久久| 播播国产欧美激情| 日韩字幕在线观看| 久久99精品国产.久久久久久| 亚洲自拍偷拍视频| 免费资源在线观看| 亚洲欧美另类在线| 黄色片视频在线免费观看| 亚洲日本中文| 日韩麻豆第一页| 成年人二级毛片| 国产亚洲网站| 91久久中文字幕| 欧美在线观看在线观看| 亚洲男人电影天堂| 91淫黄看大片| 精品精品国产毛片在线看| 中文字幕亚洲一区在线观看| 久久久精品91| 麻豆精品视频在线观看免费| 韩日午夜在线资源一区二区| 午夜在线免费观看视频| 狠狠干狠狠久久| 男人午夜视频在线观看| 亚洲成aⅴ人片久久青草影院| 久久久精品中文字幕| 久久国产视频精品| 成人sese在线| 麻豆视频传媒入口| 国产福利亚洲| 亚洲视频综合网| 日韩三级小视频| 国产黄人亚洲片| 亚洲综合第一| av高清一区| 日韩电影在线观看永久视频免费网站| www青青草原| 久久激情综合网| 亚欧洲精品在线视频免费观看| 超碰成人av| 精品日韩欧美在线| 日本青青草视频| 久久99精品视频| 亚洲午夜精品国产| 巨胸喷奶水www久久久| 亚洲美女黄色片| 伊人手机在线视频| 2023国产精品| 国产二区视频在线播放| 精品少妇3p| 国内精品视频在线| 高清国产mv在线观看| 亚洲国产精品欧美一二99| 中文字幕人妻无码系列第三区| 91亚洲成人| 国产拍精品一二三| 中文字幕日本在线| 欧美色图一区二区三区| 99热6这里只有精品| 蜜桃av一区二区| 亚洲欧洲国产日韩精品| 成人黄色在线| 日韩小视频网址| 国产老妇伦国产熟女老妇视频| 中文字幕不卡在线播放| 中文字幕av不卡在线| 成人毛片免费看| 成人看片人aa| 二区三区四区高清视频在线观看| 91精品国产综合久久精品性色| 免费三级在线观看| 国产成人av一区二区三区在线| 欧美一级爱爱视频| 爱爱精品视频| 亲子乱一区二区三区电影| 欧美视频综合| 欧美日韩国产美| 极品久久久久久| 成人福利在线看| 中国丰满人妻videoshd| 欧美女优在线视频| 国产日韩欧美91| 日本理论片午伦夜理片在线观看| 亚洲黄在线观看| 91在线视频免费播放| 国产精品欧美一级免费| 特黄视频免费观看| 1024日韩| 天堂精品一区二区三区| 久久久久毛片免费观看| 97国产在线观看| 成人在线免费观看| 日韩一区二区在线观看| wwwwww国产| 综合中文字幕亚洲| 蜜臀av粉嫩av懂色av| 天堂蜜桃91精品| 91传媒免费视频| 国产不卡一二三区| 亚洲在线免费观看| 日韩一区二区三区在线免费观看| 久久精品国产久精国产思思| 狠狠综合久久av一区二区| 色视频一区二区| 久久免费视频99| 国产拍欧美日韩视频二区| 久久久国产精品久久久| 日本欧美大码aⅴ在线播放| 国产精品视频一二三四区| 九热爱视频精品视频| 91久久国产综合久久蜜月精品| 中文在线最新版地址| 精品视频9999| 91精品大全| 日韩精品高清在线观看| 国产三级小视频| 91国内精品野花午夜精品| 精品无码av在线| 国产精品国产精品国产专区不蜜| xfplay5566色资源网站| 精品一区二区三区免费毛片爱| 久无码久无码av无码| 天天做天天爱天天爽综合网| 麻豆av一区二区| 一区二区三区视频播放| 国产精品一区二区电影| 成人片免费看| 国语自产精品视频在线看抢先版图片| av在线第一页| 亚洲色图激情小说| 五十路在线视频| 精品国免费一区二区三区| 国产又粗又猛又爽又黄的| 色哟哟精品一区| 日本一级黄色录像| 樱桃视频在线观看一区| 女人18毛片毛片毛片毛片区二 | 亚洲一级片在线播放| 91偷拍与自偷拍精品| 欧美xxxxx少妇| 国产成人亚洲综合a∨婷婷图片| 三上悠亚在线一区| 免费成人在线网站| 9久久婷婷国产综合精品性色| 欧美亚洲一区| 国产91在线免费| 一区二区激情| 国产成人无码a区在线观看视频| 欧美三级视频| 国产1区2区3区中文字幕| 自产国语精品视频| 91麻豆天美传媒在线| 国产精品成人a在线观看| 亚洲欧洲精品在线| 国产精品久久久乱弄| 自拍偷拍亚洲色图欧美| 久久久久美女| 成人国产一区二区三区| 欧美在线高清| 亚洲色图都市激情| 极品中文字幕一区| 国产青青在线视频| 亚洲欧美日韩在线观看a三区| 久久久久久久久久久久久国产精品| 午夜一区不卡| 久久久精品麻豆| 久久精品久久精品| 亚洲精品久久久久久| 成人一区二区视频| 欧美xxxxx精品| 久久综合五月天婷婷伊人| 一区二区黄色片| 国产精品视频一区二区三区不卡| 香蕉成人在线视频| 玉米视频成人免费看| 四虎永久在线精品| 色综合久久综合中文综合网| 日韩av免费播放| 欧美一区二区三区性视频| 成人小说亚洲一区二区三区| 日韩h在线观看| 国产福利在线视频| 美日韩在线视频| 黄色在线网站噜噜噜| 日韩av日韩在线观看| 宅男噜噜噜66国产精品免费| 91超碰在线电影| 希岛爱理av免费一区二区| 视频一区视频二区视频三区高 | 91精品国产91久久久久麻豆 主演| 99综合在线| 九九热免费在线观看| 成人综合在线观看| 国产精品免费无码| 亚洲免费av观看| 国产美女激情视频| 91精品国产入口| 日本中文字幕一区二区有码在线| yw.139尤物在线精品视频| 92久久精品| 国产欧美精品va在线观看| 成人直播在线观看| 亚洲巨乳在线观看| 一区福利视频| 日本中文字幕精品—区二区| 国产成人日日夜夜| 91网站免费视频| 一区二区欧美国产| 中文字幕av片| 亚洲国产精久久久久久| 欧美成人精品一区二区男人看| 2019中文字幕免费视频| 不卡一区视频| 先锋影音日韩| 一本色道久久综合| 日本成人xxx| 日本一区二区视频在线| 久久狠狠高潮亚洲精品| 欧美精品三级在线观看| 国产九色在线| 97在线视频免费观看| 国产精品一区二区美女视频免费看 | 中文字幕男人天堂| 亚洲精品福利在线| 丝袜国产在线| 国产综合在线观看视频| 免费欧美一区| 亚洲 高清 成人 动漫| 国产成人免费av在线| 可以免费看av的网址| 欧美在线一二三四区| 三区在线观看| 久久久久久综合网天天| 国产色99精品9i| 亚洲成人精品电影在线观看| 亚洲欧美日本日韩| 在线精品一区二区三区| 亚洲午夜视频在线观看| 国产v在线观看| 欧美成人免费一级人片100| 欧洲成人一区| 神马影院我不卡午夜| 久久青草久久| 国产精品密蕾丝袜| 色狠狠一区二区三区香蕉| 深夜福利免费在线观看| 97在线免费观看视频| 精品国产导航| 自慰无码一区二区三区| 不卡影院免费观看| 日本最新中文字幕| 亚洲国产精品va在线看黑人| 国模雨婷捆绑高清在线| 国产精品区一区二区三在线播放| 伊人久久大香线| 亚洲综合中文网| 亚洲一区二区三区视频在线| 国内精品国产成人国产三级| 操日韩av在线电影| 涩涩屋成人免费视频软件| 国产欧美123| 成人禁用看黄a在线| 久久久国产精品成人免费| 日韩精品在线观看一区| 欧美片第1页| 亚洲国产精品日韩| 精品制服美女丁香| 中文字幕电影av| 精品国产a毛片| 麻豆mv在线观看| 日韩欧美精品久久| 韩国三级在线一区| 麻豆changesxxx国产| 亚洲精品久久视频| 韩国三级一区| 青少年xxxxx性开放hg| 国产成人av资源| 男人午夜免费视频| 日韩在线观看网站| 免费精品一区二区三区在线观看| 隔壁人妻偷人bd中字| www国产亚洲精品久久麻豆| 国产精品第六页| 另类图片亚洲另类| 老司机凹凸av亚洲导航| 国产主播中文字幕| 亚洲激情av在线| 女人偷人在线视频| 91在线播放国产| 国产精品日韩久久久| 老司机深夜福利网站| 亚洲第一av在线| 国产精品第一| 日韩精品视频在线观看视频| 久久久精品天堂| www精品国产| 国产成人精品最新| 欧美日韩影院| 中文天堂资源在线| 亚洲国产精品va在线观看黑人| 看片一区二区| av高清在线免费观看| 国产精品―色哟哟| 欧美特黄一级视频| 91精品国产综合久久香蕉922| 亚洲黄页一区| 九九这里只有精品视频| 精品爽片免费看久久|