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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

hapi mysql项目实战路由初始化_用hapi.js mysql和nuxt.js(vue ssr)开发仿简书的博客项目...

發布時間:2024/10/8 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hapi mysql项目实战路由初始化_用hapi.js mysql和nuxt.js(vue ssr)开发仿简书的博客项目... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:

預覽:

開始:

npm i

把mysql配置好

npm run server or npm run dev

實現功能:

用戶: 登錄、注冊、用戶資料修改,詳情頁面,類似于簡書的文章數量、總字數、收獲的喜歡總數,文章刪除。

文章:文章詳情頁面,查看,評論,點贊和踩,文章閱讀次數統計

文章: 所有文章,支持分頁和按關鍵詞、時間查找

文章書寫:支持markdown和圖片拖拽上傳

首頁: 文章推薦,作者推薦,首頁輪播,頂部搜索文章和用戶

ssr 效果預覽:

類似于知乎的

seo 效果:

待補充

1 技術棧:

前端:axios、element-ui、nuxt.js、 ts

后端:node.js、hapi.js、sequelize(orm)、 hapi-auth(token)、 hapi-swagger(在線api文檔)、hapi-pagination(分頁)、joi(前端請求數據檢驗類似于element的表單校驗)、 mysql 和其他插件

2 技術細節介紹:

說明: 本文主要側重后端,最后的效果類似于我司后端

目錄結構:

├── assets // 靜態資源,css, 圖片等

├── client // 客戶端目錄,axios請求函數和其他輔助函數

├── components // vue組件目錄

├── config // 默認設置

├── layouts // nuxt視圖

├── middleware // nuxt 中間件

├── migrations // orm 數據遷移

├── models // orm 數據模型

├── nuxt.config.js

├── nuxt.config.ts

├── package-lock.json

├── package.json

├── pages // nuxt

├── plugins // hapi插件和nuxt插件

├── routes // hapi路由

├── seeders // 種子數據

├── server // app.js

├── static // 靜態資源

├── store // nuxt

├── tsconfig.json

├── uploads // 文件上傳目標目錄

└── utils // 輔助函數

前言:為什么是hapi.js ?

hapi官方文檔已經說了很多了(expresstohapi),這里最吸引我的是,不用安裝很多的插件(expres的話有很多的xx-parse插件...),就能滿足我的需求,而且hapi已經應用于商用了。

注意點:

我的這些代碼,在我目前的package.json的版本是能正常運行的,hapi版本大版本有時候會出現不兼容的,不同版本的hapi對應著不同的插件版本,所以需要和我的版本保持一致,我還遇到過nuxt.js v2.9運行加入ts出現不識別@component的情況,安裝2.8.x版本就沒有問題。

2.1 Sequelize建模

開發后臺第一個想到的是建立數據模型(建表),默認你已經安裝好了mysql

之前我自己用數據庫,不知道有orm這個工具的時候,會選擇自己用navicat這樣的圖形化工具建表或者直接用sql語句建表。這樣做有幾個缺點:

對數據庫的操作記錄不明確,我新建一個表或者新增字段,我后悔了,刪掉,我又后悔了,orm的數據遷移就可以用來做這些事情類似于git。

遷移新環境,用sql操作很麻煩,直接執行orm的命令自動建表。

數據模型,之前后臺程序與mysql聯系的時候,僅僅在建立了連接池,數據的關系,表結構這些我們其實并不知道。

執行增刪改查代碼更簡潔清晰

其他

注意:用orm在執行sql操作時,相當于我們用jquery執行dom操作,api簡單了,但還是需要對原來的有點了解

sequelize

sequelize就是node.js的promise orm工具,同時也支持其他數據庫.

使用

安裝插件:

npm i sequelize-cli -D

npm i sequelize

npm i mysql2

sequelize init

通過 sequelize-cli 初始化 sequelize,我們將得到一個好用的初始化結構:

// 可以安裝npx

node_modules/.bin/sequelize init

├── config # 項目配置目錄

| ├── config.json # 數據庫連接的配置

├── models # 數據庫 model

| ├── index.js # 數據庫連接的樣板代碼

├── migrations # 數據遷移的目錄

├── seeders # 數據填充的目錄

config/config.json

默認生成文件為一個 config.json 文件,文件里配置了開發、測試、生產三個默認的樣板環境,我們可以按需再增加更多的環境配置。這里我用config.js替代config.json,這樣配置更加靈活

修改后的 config/config.js 如下,僅預留了 development(開發) 與 production(生產) 兩個環境,開發環境與生產環境的配置參數可以分離在 .env 和 .env.prod 兩個不同的文件里,通過環境變量參數 process.env.NODE_ENV 來動態區分。

// config.js

if (process.env.NODE_ENV === 'production') {

require('env2')('./.env.prod')

} else {

require('env2')('./.env.dev')

}

const { env } = process

module.exports = {

'development': {

'username': env.MYSQL_USERNAME,

'password': env.MYSQL_PASSWORD,

'database': env.MYSQL_DB_NAME,

'host': env.MYSQL_HOST,

'port': env.MYSQL_PORT,

dialect: 'mysql',

logging: false, // mysql 執行日志

timezone: '+08:00'

// "operatorsAliases": false, // 此參數為自行追加,解決高版本 sequelize 連接警告

},

'production': {

'username': env.MYSQL_USERNAME,

'password': env.MYSQL_PASSWORD,

'database': env.MYSQL_DB_NAME,

'host': env.MYSQL_HOST,

'port': env.MYSQL_PORT,

dialect: 'mysql',

timezone: '+08:00'

// "operatorsAliases": false, // 此參數為自行追加,解決高版本 sequelize 連接警告

}

}

.env.dev

# 服務的啟動名字和端口,但也可以缺省不填值,默認值的填寫只是一定程度減少起始數據配置工作

HOST = 127.0.0.1

PORT = 80

# 端口最好就為80,不然axios url要改為絕對地址

# MySQL 數據庫鏈接配置

MYSQL_HOST = 111.111.111.111

MYSQL_PORT = 3306

MYSQL_DB_NAME = 數據庫名

MYSQL_USERNAME = 數據庫用戶名

MYSQL_PASSWORD = 數據庫密碼

JWT_SECRET = token密鑰

創建數據庫

npx sequelize db:create

創建遷移文件

npx migration:create --name user

在 migrations 的目錄中,會新增出一個 時間戳-user.js 的遷移文件,自動生成的文件里,包涵有 up 與 down 兩個空函數, up 用于定義表結構正向改變的細節,down 則用于定義表結構的回退邏輯。比如 up 中有 createTable 的建表行為,則 down 中配套有一個對應的 dropTable 刪除表行為。相當于是一條操作記錄記錄。修改后的用戶遷移文件如下:

'use strict'

module.exports = {

up: (queryInterface, Sequelize) => queryInterface.createTable(

'user',

{

uid: {

type: Sequelize.UUID,

primaryKey: true

},

nickname: {

type: Sequelize.STRING,

allowNull: false,

unique: true

},

avatar: Sequelize.STRING,

description: Sequelize.STRING,

username: {

type: Sequelize.STRING,

allowNull: false,

unique: true

},

password: {

type: Sequelize.STRING,

allowNull: false

},

created_time: Sequelize.DATE,

updated_time: Sequelize.DATE

},

{

charset: 'utf8'

}

),

down: queryInterface => queryInterface.dropTable('user')

}

執行遷移

npx sequelize db:migrate

sequelize db:migrate 的命令,可以最終幫助我們將 migrations 目錄下的遷移行為定義,按時間戳的順序,逐個地執行遷移描述,最終完成數據庫表結構的自動化創建。并且,在數據庫中會默認創建一個名為 SequelizeMeta 的表,用于記錄在當前數據庫上所運行的遷移歷史版本。已經執行過的不會再次執行,可以執行sequelize db:migrate:undo執行上個遷移文件的down命令。

種子數據

執行

sequelize seed:create --name init-user

類似的在seeders目錄下生成一份文件 時間戳-init-user.js

修改后

'use strict'

const uuid = require('uuid')

const timeStamp = {

created_time: new Date(),

updated_time: new Date()

}

const users = []

for (let i = 1; i < 5; i++) {

users.push(

{

uid: uuid(), username: 'zlj' + i, password: '123', nickname: '火鍋' + 1, ...timeStamp

}

)

}

module.exports = {

up: queryInterface => queryInterface.bulkInsert('user', users, { charset: 'utf-8' }),

down: (queryInterface, Sequelize) => {

const { Op } = Sequelize

return queryInterface.bulkDelete('user', { uid: { [Op.in]: users.map(v => v.uid) } }, {})

}

}

執行填充命令

sequelize db:seed:all

查看數據庫user表就多了一些記錄,其他的操作類似于遷移,更多的操作可以看文檔

7 定義模型

user表 models/user.js

const moment = require('moment')

module.exports = (sequelize, DataTypes) => sequelize.define(

'user',

{

uid: {

type: DataTypes.UUID,

primaryKey: true

},

avatar: DataTypes.STRING,

description: DataTypes.STRING,

nickname: {

type: DataTypes.STRING,

unique: true,

allowNull: false

},

username: {

type: DataTypes.STRING,

allowNull: false,

unique: true

},

password: {

type: DataTypes.STRING,

allowNull: false

},

created_time: {

type: DataTypes.DATE,

get () {

return moment(this.getDataValue('created_time')).format('YYYY-MM-DD HH:mm:ss')

}

},

updated_time: {

type: DataTypes.DATE,

get () {

return moment(this.getDataValue('updated_time')).format('YYYY-MM-DD HH:mm:ss')

}

}

},

{

tableName: 'user'

}

)

實例化seqlize

modes/index.js

'use strict'

const fs = require('fs')

const path = require('path')

const uuid = require('uuid')

const Sequelize = require('sequelize')

const basename = path.basename(__filename) // eslint-disable-line

const configs = require(path.join(__dirname, '../config/config.js'))

const db = {}

const env = process.env.NODE_ENV || 'development'

const config = {

...configs[env],

define: {

underscored: true,

timestamps: true,

updatedAt: 'updated_time',

createdAt: 'created_time',

hooks: {

beforeCreate (model) {

model.uid = uuid()

}

}

}

}

let sequelize

if (config.use_env_variable) {

sequelize = new Sequelize(process.env[config.use_env_variable], config)

} else {

sequelize = new Sequelize(config.database, config.username, config.password, config)

}

fs

.readdirSync(__dirname)

.filter((file) => {

return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js')

})

.forEach((file) => {

const model = sequelize.import(path.join(__dirname, file))

db[model.name] = model

})

Object.keys(db).forEach((modelName) => {

if (db[modelName].associate) {

db[modelName].associate(db)

}

})

db.sequelize = sequelize

db.Sequelize = Sequelize

// 外鍵關聯關系

// 假設你所有表建立好了

db.user.hasMany(db.article, { foreignKey: 'uid' })

db.article.belongsTo(db.user, { foreignKey: 'author' })

db.user.hasMany(db.comment, { foreignKey: 'uid' })

db.comment.belongsTo(db.user, { foreignKey: 'author' })

db.user.hasMany(db.article_like, { foreignKey: 'uid' })

db.article_like.belongsTo(db.user, { foreignKey: 'author' })

db.article.hasMany(db.comment)

db.comment.belongsTo(db.article)

db.article.hasMany(db.article_like)

db.article_like.belongsTo(db.article)

module.exports = db

本項目用到的功能

多表查詢、單表增刪改查、模型統一配置、遷移和種子填充、事務(刪除文章的時候,把文章相關的數據:評論,閱讀,點贊數據也一起刪了。)等。

2.2 Joi 請求參數校驗

joi可以對請求參數進行校驗

使用:

安裝

# 安裝適配 hapi v16 的 joi 插件

npm i joi@14

使用見2.3 config.validate,更多參考官方文檔

2.3 用hapi 寫接口

post: 登錄接口:

routes/user.js

const models = require('../models')

const Joi = require('@hapi/joi')

{

method: 'POST',

path: '/api/user/login',

handler: async (request, h) => {

const res = await models.user.findAll({

attributes: {

exclude: ['password', 'created_time', 'updated_time']

},

where: {

username: request.payload.username,

// 一般密碼存庫都會加密的,md5等

password: request.payload.password

}

})

const data = res[0]

if (res.length > 0) {

return h.response({

code: 0,

message: '登錄成功!',

data: {

// 寫入token

token: generateJWT(data.uid),

...data.dataValues

}

})

} else {

return h.response({

code: 10,

message: '用戶名或密碼錯誤'

})

}

},

config: {

auth: false,

tags: ['api', 'user'],

description: '用戶登錄',

validate: {

payload: {

username: Joi.string().required(),

password: Joi.string().required()

}

}

}

},

2.4 接口文檔swagger

安裝:

npm i hapi-swagger@10

npm i inert@5

npm i vision@5

npm i package@1

使用

├── plugins # hapi 插件配置

| ├── hapi-swagger.js

hapi-swagger.js

// plugins/hapi-swagger.js

const inert = require('@hapi/inert')

const vision = require('@hapi/vision')

const package = require('package')

const hapiSwagger = require('hapi-swagger')

module.exports = [

inert,

vision,

{

plugin: hapiSwagger,

options: {

documentationPath: '/docs',

info: {

title: 'my-blog 接口 文檔',

version: package.version

},

// 定義接口以 tags 屬性定義為分組

grouping: 'tags',

tags: [

{ name: 'user', description: '用戶接口' },

{ name: 'article', description: '文章接口' }

]

}

}

]

server/index.js

const pluginHapiSwagger = require('../plugins/hapi-swagger')

// 注冊插件

...

await server.register([

// 為系統使用 hapi-swagger

...pluginHapiSwagger

]

...

打開你的dev.host:dev.port/docs

可以查看我線上的

2.5 token認證hapi-auth-jwt2

cookie hapi已經幫你解析好了,文件上傳也是

安裝:

npm i hapi-auth-jwt2@8

配置:

├── plugins # hapi 插件配置

│ ├── hapi-auth-jwt2.js # jwt 配置插件

hapi-auth-jwt2.js

const validate = (decoded) => {

// eslint disable

// decoded 為 JWT payload 被解碼后的數據

const { exp } = decoded

if (new Date(exp * 1000) < new Date()) {

const response = {

code: 4,

message: '登錄過期',

data: '登錄過期'

}

return { isValid: true, response }

}

return { isValid: true }

}

module.exports = (server) => {

server.auth.strategy('jwt', 'jwt', {

// 需要自行在 config/index.js 中添加 jwtSecret 的配置,并且通過 process.env.JWT_SECRET 來進行 .git 版本庫外的管理。

key: process.env.JWT_SECRET,

validate,

verifyOptions: {

ignoreExpiration: true

}

})

server.auth.default('jwt')

}

注冊插件

server/index.js

const hapiAuthJWT2 = require('hapi-auth-jwt2')

...

await server.register(hapiAuthJWT2)

...

效果:

默認情況下所有的接口都需要token認證的

可以將某個接口(比如登錄接口)config.auth = false不開啟

回到上面的登錄接口,用戶名和密碼檢驗成功就生成token

const generateJWT = (uid) => {

const payload = {

userId: uid,

exp: Math.floor(new Date().getTime() / 1000) + 24 * 60 * 60

}

return JWT.sign(payload, process.env.JWT_SECRET)

}

handler () {

const res = await models.user.findAll({

attributes: {

exclude: ['password', 'created_time', 'updated_time']

},

where: {

username: request.payload.username,

password: request.payload.password

}

})

const data = res[0]

if (res.length > 0) {

return h.response({

code: 0,

message: '登錄成功!',

data: {

token: generateJWT(data.uid),

...data.dataValues

}

})

} else {

return h.response({

code: 10,

message: '用戶名或密碼錯誤'

})

}

}

前端拿到toke塞在頭部就好了

client/api/index.ts

request.interceptors.request.use((config: AxiosRequestConfig): AxiosRequestConfig => {

const token = getToken()

if (token) { config.headers.authorization = token }

return config

})

請求頭增加Joi校驗

const jwtHeaderDefine = {

headers: Joi.object({

authorization: Joi.string().required()

}).unknown()

}

// 某個接口

...

validate: {

...jwtHeaderDefine,

params: {

uid: Joi.string().required()

}

}

...

可以從swagger在線文檔中文看出變化

2.6 加入分頁hapi-pagination

安裝

npm i hapi-pagination@3

配置

plugins/hapi-pagination.js

const hapiPagination = require('hapi-pagination')

const options = {

query: {

page: {

name: 'the_page' // The page parameter will now be called the_page

},

limit: {

name: 'per_page', // The limit will now be called per_page

default: 10 // The default value will be 10

}

},

meta: {

location: 'body', // The metadata will be put in the response body

name: 'metadata', // The meta object will be called metadata

count: {

active: true,

name: 'count'

},

pageCount: {

name: 'totalPages'

},

self: {

active: false // Will not generate the self link

},

first: {

active: false // Will not generate the first link

},

last: {

active: false // Will not generate the last link

}

},

routes: {

include: ['/article'] // 需要開啟的路由

}

}

module.exports = {

plugin: hapiPagination,

options

}

注冊插件

const pluginHapiPagination = require('./plugins/hapi-pagination');

await server.register([

pluginHapiPagination,

])

加入參數校驗

const paginationDefine = {

limit: Joi.number().integer().min(1).default(10)

.description('每頁的條目數'),

page: Joi.number().integer().min(1).default(1)

.description('頁碼數'),

pagination: Joi.boolean().description('是否開啟分頁,默認為true')

}

// 某個接口

// joi校驗

...

validate: {

query: {

...paginationDefine

}

}

...

數據庫查詢

const { rows: results, count: totalCount } = await models.xxxx.findAndCountAll({

limit: request.query.limit,

offset: (request.query.page - 1) * request.query.limit,

});

3 最后

歡迎到線上地址體驗完整功能

1 踩坑總結:

碰到接口500的情況,可以在model的操作后面捕獲錯誤,比如models.findAll().catch(e => console.log(e))

注意版本兼容問題,插件和hapi或者nuxt版本的兼容

nuxt.config.ts的配置不生效可以執行tsc nuxt.config.ts手動編譯

在asyncData中請數據,不寫絕對地址,會默認請求80端口的

2 開發收獲

熟悉了基本的后端開發流程

插件不兼容或者有其他需求的情況下,必須自己看英文文檔,看到英文文檔能淡定了

后端開發需要做的工作蠻多的,從接口到部署等,以后工作中要相互理解

3 參考

總結

以上是生活随笔為你收集整理的hapi mysql项目实战路由初始化_用hapi.js mysql和nuxt.js(vue ssr)开发仿简书的博客项目...的全部內容,希望文章能夠幫你解決所遇到的問題。

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

欧美日本日韩aⅴ在线视频 插插插色综合 | 一级理论片在线观看 | 久久综合九色综合欧美就去吻 | 欧美久久久 | 成人国产精品一区二区 | 亚洲黄色大片 | 天天爱天天操天天爽 | 麻豆国产网站 | 国产91免费观看 | 在线免费精品视频 | 一级黄色a视频 | 久久亚洲影视 | 国产精品久久av | 西西www444| 五月天激情综合 | 97超碰精品 | 五月婷婷久久综合 | 久久久久久久久久久久影院 | 中国一级片在线 | 国产女人18毛片水真多18精品 | 99c视频高清免费观看 | 国产成人精品免高潮在线观看 | 在线国产一区二区三区 | 久久色视频 | 狠狠干夜夜操天天爽 | 亚洲日韩中文字幕在线播放 | 免费看三级黄色片 | 国产三级香港三韩国三级 | 日韩两性视频 | 免费试看一区 | 久热色超碰 | 亚州精品在线视频 | 美女福利视频网 | 精品亚洲欧美无人区乱码 | 中文字幕国产亚洲 | 免费看片色 | 国产视频精品免费 | 免费在线观看av不卡 | 日韩中文字幕亚洲一区二区va在线 | 久久久久激情视频 | 四月婷婷在线观看 | 久操97| 在线国产视频观看 | 天天爽天天爽天天爽 | 西西4444www大胆艺术 | 久久免费视频国产 | 日本韩国精品一区二区在线观看 | 国产精品成人a免费观看 | 国产精品1区2区在线观看 | 亚洲精品成人av在线 | 一级精品视频在线观看宜春院 | 黄色福利| 久草精品视频在线观看 | 美女视频黄网站 | 在线观看视频黄 | 在线观看免费视频你懂的 | 免费视频你懂得 | 四虎国产精品成人免费影视 | 亚洲三级网站 | 六月激情婷婷 | 一级a性色生活片久久毛片波多野 | 成人三级视频 | 国内精品一区二区 | 国产亚洲字幕 | 亚洲欧美综合精品久久成人 | 国产超碰97 | 久久刺激视频 | 欧美日韩网址 | 亚洲成人第一区 | 免费在线观看视频a | 免费黄色a级毛片 | 国产专区日韩专区 | 久久久精品福利视频 | 国产精品入口麻豆 | 一区 在线观看 | 久久香蕉电影 | 久久天堂亚洲 | 九九热免费精品视频 | 成人国产精品免费观看 | 色综合天天狠天天透天天伊人 | 日韩手机在线观看 | 久久精品老司机 | 日韩av网站在线播放 | 午夜丰满寂寞少妇精品 | 国产欧美中文字幕 | 亚洲免费永久精品国产 | 国产精品麻豆视频 | 精品国产乱码久久久久久1区2匹 | 久久激情久久 | 久久在线播放 | 日韩激情视频在线观看 | 久久久久女教师免费一区 | 久久免费视频一区 | 人人插人人 | 97精品国自产拍在线观看 | 成年人av在线播放 | 久久久精品网站 | 国产精品久久久久久久久久不蜜月 | 夜夜骑天天操 | 伊人伊成久久人综合网小说 | 国产精品视频地址 | 99久久夜色精品国产亚洲96 | 四虎www.| 久久se视频 | 国产一区二三区好的 | 色噜噜狠狠狠狠色综合久不 | 精品久久在线 | 久久成人精品 | 亚洲天堂网在线观看视频 | 色99色| 久久久亚洲影院 | 日日摸日日碰 | 亚洲区另类春色综合小说 | 亚洲va欧美va | 精品国产一区二区三区四区vr | 中文字幕av有码 | 97视频入口免费观看 | 国产三级久久久 | 色狠狠综合 | 日本乱视频| 午夜av一区 | 久久久久久久国产精品 | 日本性生活免费看 | 日韩超碰 | 亚洲精品玖玖玖av在线看 | 国产精品久久久99 | 91av成人 | 狠狠狠狠狠狠狠狠干 | 欧美美女视频在线观看 | 国产成人精品一区二区三区免费 | 91精品综合在线观看 | 日本视频不卡 | 国产日韩欧美在线免费观看 | 黄色一二级片 | 国产精品一区二区中文字幕 | 国产成人一区二区三区影院在线 | 中国精品一区二区 | 在线观看日韩中文字幕 | 黄网站免费大全入口 | 国产对白av | 国产日本在线观看 | 有没有在线观看av | 9色在线视频 | 欧美91视频 | 婷婷网在线| 国产一区二区在线观看视频 | 亚洲夜夜综合 | 久久久久久美女 | 亚洲免费av在线播放 | 欧美一区免费在线观看 | 玖玖玖精品 | 国产精品美女www爽爽爽视频 | 亚洲精品国产第一综合99久久 | 黄色一区二区在线观看 | 日韩精品久久一区二区三区 | 在线观看韩日电影免费 | 一级精品视频在线观看宜春院 | 91av观看 | 激情综合网在线观看 | 久久久久国产精品视频 | 亚洲人毛片 | 日本不卡一区二区三区在线观看 | 综合精品久久 | 美女网站色免费 | 国产精品久久久久久久久久久久久久 | 国产精品二区在线观看 | 国产精品一码二码三码在线 | 欧美精品久久久久久久亚洲调教 | 国产日韩精品欧美 | 国产精品久久久久久久久毛片 | 久久精品欧美日韩精品 | 免费在线观看一区 | 成人久久久精品国产乱码一区二区 | 天天操人 | 免费成人在线观看 | 国产91精品在线观看 | 中文字幕日韩免费视频 | 日韩欧美视频在线观看免费 | 亚洲六月丁香色婷婷综合久久 | 奇米777777 | 日韩免费在线观看 | 91精选在线 | 在线观看 亚洲 | 久久久久久久久久久网 | 成人动态视频 | 久久99影院 | 日日夜夜狠狠 | 国产高清精品在线观看 | 在线国产激情视频 | 人人插人人舔 | 在线小视频 | 欧美analxxxx | 国产成人亚洲在线观看 | 日韩欧美不卡 | 成人a视频片观看免费 | 黄色电影在线免费观看 | 国产精久久久久久妇女av | 欧美大片在线看免费观看 | 国产精品黄 | 天天曰天天射 | 亚洲日本在线一区 | 久艹视频在线免费观看 | 欧洲亚洲国产视频 | 亚洲国产成人在线播放 | 成人免费观看视频网站 | 免费看黄的视频 | 五月婷婷久久丁香 | 久久理论片| 不卡的av电影在线观看 | 天天操,夜夜操 | 在线观看中文字幕亚洲 | 日韩精品一区二区三区在线播放 | 久久成年视频 | 婷婷综合视频 | 一区二三国产 | 三级a视频 | 人人舔人人射 | 免费视频你懂得 | 888av | 色婷婷国产精品一区在线观看 | 激情伊人 | av在线电影网站 | 成人国产精品免费观看 | 国产视频在线观看一区二区 | 中文字幕欧美日韩va免费视频 | 国产99精品在线观看 | 91视频在线免费看 | 综合天天色| 国产xvideos免费视频播放 | 黄色成人av网址 | 欧美精品久久久久久久久免 | 久热国产视频 | 黄色网址在线播放 | 国产精品成久久久久 | 狠狠躁天天躁 | 欧美伦理一区二区三区 | 日韩高清网站 | 狠狠色伊人亚洲综合网站色 | 欧美中文字幕第一页 | 中文字幕在线观看完整版电影 | 91视频首页 | 日韩在观看线 | 日日碰狠狠添天天爽超碰97久久 | 久久精品2 | 国产原创av片 | 日日夜夜婷婷 | 激情伊人五月天久久综合 | 婷婷在线视频 | 免费一级片在线 | 精品一区二区电影 | 五月婷婷av| 国产综合91 | 天天操夜夜想 | 国产午夜三级一区二区三桃花影视 | 久久久2o19精品 | 中文字幕 第二区 | 天天射天天操天天色 | 色网免费观看 | 久久久久国产精品厨房 | 免费三级黄色 | 久久夜视频 | www.久久成人 | 久久人人爽人人爽 | 国产成人精品午夜在线播放 | 99久久久国产精品免费观看 | 性色xxxxhd| 一本一本久久a久久精品综合 | 久久成视频 | 国产1区2区 | 日批在线看 | 亚洲精品综合一区二区 | 色综合在 | 西西444www大胆高清图片 | 黄网站免费久久 | 99视频在线观看视频 | 中文字幕无吗 | 免费黄色在线网站 | 国产精品私拍 | 999国内精品永久免费视频 | 99热国产在线中文 | 91免费国产在线观看 | 国产精品99蜜臀久久不卡二区 | 欧美日韩有码 | 又黄又网站 | 91在线在线观看 | 在线之家免费在线观看电影 | 91电影福利 | 中文字幕久久精品亚洲乱码 | 国产精品一区二区三区电影 | 中文字幕一区二区三区久久蜜桃 | av超碰免费在线 | 免费在线成人 | 999国内精品永久免费视频 | 夜夜爽www | 亚洲精品午夜视频 | 国产糖心vlog在线观看 | 色综合在 | 91久久久国产精品 | 麻豆久久一区 | www.av免费| 在线成人一区二区 | 国产经典三级 | 手机看片 | 黄a网站 | 成人一级片免费看 | 在线 国产 亚洲 欧美 | 欧美激情操| 日韩午夜三级 | 欧美成人h版电影 | 在线观看av免费观看 | 日韩理论片 | 在线看的毛片 | 成人午夜电影免费在线观看 | 久久公开视频 | 免费日韩一区 | 在线中文字幕视频 | 最近2019好看的中文字幕免费 | 亚洲天堂网视频在线观看 | 久久精品麻豆 | 国产精品对白一区二区三区 | 欧美日在线观看 | 国产夫妻性生活自拍 | 亚洲国产理论片 | 夜夜夜精品 | 久久精品综合一区 | 国产精品国产自产拍高清av | 久久久一本精品99久久精品 | 久久久国产电影 | 波多野结衣在线观看视频 | 久久美女电影 | 日本性久久 | 久久有精品 | 久久久久久久免费 | 久久久久久国产精品免费 | av大全在线免费观看 | 久一在线 | 五月天激情视频 | 三级av中文字幕 | 超碰在线个人 | 日韩国产高清在线 | 日韩精品极品视频 | 国产激情电影综合在线看 | 亚洲精品久久久久中文字幕m男 | 精品国产免费av | av网站免费看 | 日韩欧美亚州 | 五月天激情视频在线观看 | 日日夜夜精品视频天天综合网 | 蜜桃视频在线视频 | 亚洲精品在线免费 | 99在线热播 | 日本黄色免费观看 | 美女免费网站 | 西西4444www大胆艺术 | 中文字幕第| 国产美女在线精品免费观看 | 九九精品视频在线看 | 日韩欧美网址 | 日日操日日操 | 久久草av | 波多野结衣视频一区 | 久久综合天天 | 亚洲国产精品电影 | 中文字幕在线免费看 | 99国产精品一区二区 | 久久精品一区二区三区国产主播 | 国产高清免费观看 | av大片免费 | 精品1区2区 | 麻豆你懂的 | 97网| 亚洲精品黄色在线观看 | 欧美激情综合五月色丁香 | 久久美女电影 | 久久久免费网站 | 成年人免费观看国产 | 亚洲视频,欧洲视频 | 亚洲精品999 | 最新中文字幕在线资源 | 免费观看黄 | 久久精品视频2 | 国内精品视频在线 | 亚洲综合精品视频 | 午夜精品久久久久久久99无限制 | 免费一级片久久 | 日韩区欧美久久久无人区 | 九九久久国产 | 久久久久久久精 | 欧美嫩草影院 | 黄色免费观看网址 | 又黄又爽的视频在线观看网站 | 伊人五月 | 国产 色| 久久美女免费视频 | 国产成人精品一区在线 | 日韩av片无码一区二区不卡电影 | 亚洲视频免费在线 | 久久国产热 | 丰满少妇高潮在线观看 | 国产女人18毛片水真多18精品 | 91久久丝袜国产露脸动漫 | 亚洲欧洲一区二区在线观看 | 欧美日韩久 | 五月天亚洲综合小说网 | 久久亚洲专区 | 久久免费看a级毛毛片 | 久久久久久激情 | 在线观看免费黄视频 | 国产精品18久久久久久不卡孕妇 | 青青河边草观看完整版高清 | 伊人黄| 久久国产精品久久久久 | 久久高清国产 | 精品免费视频. | 91精品日韩 | 综合网成人| 久久短视频 | 国产黄色精品 | 中文字幕有码在线观看 | 国产精品久久久久久久久蜜臀 | 国产欧美精品一区二区三区四区 | 在线91精品 | 国产精品久久久久999 | 在线不卡的av | 久久精品国产一区二区 | 久久成人人人人精品欧 | 一本大道久久精品懂色aⅴ 五月婷社区 | 国产亚洲字幕 | www久久国产 | 日韩在线免费电影 | 黄色三级久久 | 亚洲1区在线 | 欧美性色网站 | 日韩电影中文 | 欧美一区二区三区免费看 | 中文字幕日韩有码 | 美女视频免费一区二区 | 高清av免费一区中文字幕 | 在线免费视频你懂的 | 人人干天天干 | 欧美日本在线视频 | 综合色播| 九九爱免费视频 | 国产精品久久久久一区二区三区共 | 久草视频播放 | h久久| 国产在线观看一 | 西西www444 | 日日干av | 一区二区视频免费在线观看 | 国产网站av| 五月丁婷婷 | 婷婷亚洲综合 | 四虎国产精品成人免费影视 | 久久久亚洲电影 | 777视频在线观看 | 亚洲精品综合一区二区 | 国产破处在线视频 | 99九九热只有国产精品 | 欧美黑人xxxx猛性大交 | 久草国产在线观看 | 欧美日韩在线视频一区二区 | 精品主播网红福利资源观看 | 久久久国产在线视频 | av天天澡天天爽天天av | 在线观看韩日电影免费 | 国产精品永久免费观看 | 狠狠精品 | 亚洲人成精品久久久久 | 国产精品高潮呻吟久久久久 | 日本xxxxav| 成人黄色片免费看 | 久久久久国产一区二区三区 | 五月天色中色 | 国产永久免费 | 日韩有码专区 | 欧美日bb | 免费网站在线观看成人 | 久久久久国产一区二区三区四区 | 一级黄色片在线播放 | 丝袜少妇在线 | 麻豆视频在线播放 | 成人久久亚洲 | 国产视频一区精品 | 色婷婷www | 久久久久久蜜av免费网站 | 色av资源网 | 在线免费黄色 | 夜夜操网站 | 日日夜夜爱 | 亚洲色图 校园春色 | 成年人在线免费看片 | 99精品久久99久久久久 | 久久网站免费 | 8x成人在线 | 亚洲片在线资源 | 米奇狠狠狠888 | 免费观看成人网 | 中文字幕在线免费观看 | 久久视频在线免费观看 | 欧美日韩在线免费观看 | 国产精品va在线播放 | 国产精品第一页在线 | 在线观看91视频 | 五月婷婷中文网 | 国产一级片网站 | 免费观看xxxx9999片 | 99久久99久久精品国产片果冰 | 久久伊人免费视频 | 久一网站 | 欧美黑人性猛交 | 久草9视频 | 夜夜躁狠狠燥 | 最新高清无码专区 | 不卡国产视频 | 亚洲在线视频播放 | 手机在线黄色网址 | 又黄又刺激的视频 | 国产精品igao视频网网址 | 色88久久 | 波多野结衣亚洲一区二区 | 亚洲专区中文字幕 | 国产一区欧美在线 | 麻豆成人在线观看 | 中文久草 | 亚洲精品在线免费观看视频 | 国产精品一区电影 | 婷婷亚洲综合五月天小说 | 国产亚洲精品免费 | 久久超级碰 | 日本精a在线观看 | 看v片 | 亚洲精品乱码久久久久v最新版 | 欧美少妇影院 | 欧美视频在线二区 | 91日本在线播放 | 在线色吧| 国产在线观看你懂的 | 激情丁香5月| 天天色天天草天天射 | 婷婷久久网| 97福利在线观看 | 一区视频在线 | 免费观看一区 | 日日草天天草 | 97超碰在线资源 | 狠狠色狠狠色综合日日小说 | 伊人精品影院 | 日韩午夜剧场 | 国产精品一区二区在线免费观看 | 久久久久久久电影 | 免费看av片网站 | 久久精品这里热有精品 | 欧美成人区 | 精品国产一区二区在线 | 欧美精品在线观看 | 亚洲精品视频免费观看 | 欧美在线1 | 免费在线一区二区 | 日韩小视频网站 | 91视频免费视频 | 91看片在线 | 婷婷丁香色综合狠狠色 | 欧美日韩在线观看一区 | 欧美成年人在线视频 | 免费人成在线观看 | 91精品办公室少妇高潮对白 | 超碰公开在线 | 91精品国产成人www | 波多野结衣日韩 | 国产拍在线| 婷婷色av | 亚洲日本va午夜在线影院 | 午夜精品一区二区三区免费视频 | 久久亚洲免费视频 | 五月天网站在线 | 国内精品久久久 | 日韩在线观看网址 | 精品欧美小视频在线观看 | 黄色小说免费观看 | 国产主播大尺度精品福利免费 | 国产一区二区三精品久久久无广告 | 国产麻豆视频免费观看 | 国产中文字幕视频在线 | 免费色视频网站 | 天天夜夜狠狠操 | 久久久国产精品网站 | 精品美女在线观看 | 日本不卡久久 | 日韩精品一区在线播放 | 2021国产精品 | 久久精品一区 | 亚洲国产精品久久久 | 激情欧美丁香 | 欧美日韩久久一区 | a视频免费在线观看 | 97超碰在线久草超碰在线观看 | 高清一区二区三区av | 久久这里只有精品久久 | 国产成人不卡 | av动图| 成人国产电影在线观看 | 日本在线视频网址 | 丝袜美女在线 | 久久精品久久精品久久 | 久久成人18免费网站 | 欧美在线一二区 | 国产在线观看网站 | 伊人手机在线 | 18久久久久久 | 中文字幕免费观看 | 国产精品免费久久 | 97综合在线 | 久久国产精品99久久久久久丝袜 | 天天综合久久 | 九九九视频在线 | 色是在线视频 | 国产精品9区 | 国产婷婷vvvv激情久 | 最近最新最好看中文视频 | 91精品国产一区二区在线观看 | 99精品视频在线免费观看 | 97在线观看免费高清完整版在线观看 | 中文字幕日韩高清 | 精品久久精品久久 | 99免费在线| 久久99视频 | 成人在线一区二区三区 | 91桃色国产在线播放 | 天天爽综合网 | 狠狠躁天天躁综合网 | 成人 国产 在线 | 免费看一级特黄a大片 | 99热这里只有精品久久 | 天天插日日操 | 日韩精品一区在线观看 | 欧美性做爰猛烈叫床潮 | 中文字幕日本电影 | 久久蜜臀av | 天堂av在线7 | 亚洲va欧美| 亚洲乱码精品久久久 | 亚洲专区一二三 | 亚洲成aⅴ人在线观看 | 激情电影在线观看 | av一区二区三区在线 | 91看片看淫黄大片 | 国产成人精品久久二区二区 | 亚洲国产精品人久久电影 | 国产精品毛片一区二区 | av在线一级 | 亚洲精品免费在线观看 | 欧美 激情 国产 91 在线 | 精品久久久久久久久中文字幕 | 色网站免费在线观看 | 国产精品一区二区久久久 | 成人精品一区二区三区电影免费 | 1024手机看片国产 | 成人av久久 | 九九热免费观看 | 午夜精品久久一牛影视 | 亚洲性少妇性猛交wwww乱大交 | 国产一级黄色av | 免费精品在线观看 | 日韩欧美视频在线播放 | 欧美精品免费视频 | 日日日爽爽爽 | 国产正在播放 | 国产精品入口a级 | 国产99自拍 | 狠狠操夜夜| 久久精品一二三区白丝高潮 | 国产中文字幕视频在线 | 国产精品久久久久久久久毛片 | 亚洲国产精品人久久电影 | 久久天| 日韩激情中文字幕 | 日本一区二区三区免费看 | 丁香资源影视免费观看 | 亚洲乱码久久 | 又紧又大又爽精品一区二区 | 色婷婷丁香| 三级av免费观看 | 久久久久久不卡 | 成人午夜片av在线看 | av中文字幕不卡 | 欧美成人高清 | 国产色综合天天综合网 | 欧美日韩国产综合一区二区 | 国产中文字幕视频在线观看 | 国产69精品久久久久99 | 日批视频在线观看免费 | 色婷婷av一区二 | 久久国产高清 | 国产又粗又猛又黄又爽视频 | 免费看一及片 | 国产精品96久久久久久吹潮 | 国产亚洲精品美女 | 伊人久在线 | www日韩欧美 | 精品国产一区二区三区蜜臀 | 国产亚洲精品女人久久久久久 | 国产香蕉av| 国产精品日韩欧美 | 欧美在线视频a | 亚洲一级电影 | 久久高清精品 | 成人av在线看 | 免费看国产精品 | 中文字幕在线久一本久 | 免费看污片 | 国产中文在线观看 | 久久99精品一区二区三区三区 | 香蕉视频国产在线观看 | 日韩成人在线免费观看 | 天堂av网址 | 中文字幕在线观看免费高清电影 | 免费高清在线观看成人 | 久久人人爽人人人人片 | 成人9ⅰ免费影视网站 | 激情视频免费在线观看 | 在线成人观看 | 国产精品一区二区av日韩在线 | 日韩精品免费在线视频 | 久久国产电影 | 999视频精品 | 国产精品久久久久久婷婷天堂 | 久久久免费看 | 日本女人的性生活视频 | 色五婷婷 | 狠狠色丁婷婷日日 | 国产一区在线免费 | 99久热在线精品视频成人一区 | 东方av在 | 一区二区电影在线观看 | 国产 日韩 欧美 中文 在线播放 | 亚洲国产综合在线 | 久草线| 国产乱对白刺激视频在线观看女王 | 欧美日韩视频 | 亚洲区另类春色综合小说 | 精品一区二三区 | 人人爱爱 | 69久久久 | 国产午夜精品免费一区二区三区视频 | 天天添夜夜操 | 五月婷婷六月综合 | 69xxxx欧美| 欧美国产精品一区二区 | 免费国产在线精品 | www.成人sex| 成人羞羞视频在线观看免费 | av在线永久免费观看 | 日韩专区在线观看 | 国产伦精品一区二区三区在线 | 成人一级免费电影 | 超碰在线人人爱 | 豆豆色资源网xfplay | 欧美激情综合色综合啪啪五月 | 男女免费av | 国内精品亚洲 | 日韩精品免费一区二区三区 | 亚洲精品视频www | 亚洲国产偷 | 亚洲综合色视频在线观看 | 少妇bbw搡bbbb搡bbbb | 中文字幕乱码亚洲精品一区 | 91亚洲国产成人久久精品网站 | 国产探花 | 国产精品门事件 | 国产精品久久久久久久av大片 | 日本黄色免费大片 | 欧美亚洲国产精品久久高清浪潮 | 韩国一区二区三区视频 | 成人午夜电影在线播放 | 欧美精品乱码99久久影院 | 成人在线视频一区 | 香蕉影视 | 在线电影中文字幕 | 久久久精品国产一区二区三区 | 99久久婷婷国产一区二区三区 | 国产一级做a爱片久久毛片a | 精品久久久国产 | 国产一区二区三精品久久久无广告 | 欧美午夜一区二区福利视频 | 在线高清一区 | 综合网av| 狠狠操综合网 | 日韩av一区二区在线播放 | 亚洲三级黄色 | 一区二区中文字幕在线播放 | 久久久www成人免费毛片 | 91精品在线视频观看 | 欧美激情视频一二三区 | 91精品视频免费看 | 国偷自产中文字幕亚洲手机在线 | 亚洲精品中文在线资源 | 亚洲精品视 | 91看片在线免费观看 | 久久精品亚洲一区二区三区观看模式 | 丁香婷婷亚洲 | 亚洲精品色 | 在线中文字幕电影 | 91探花国产综合在线精品 | 国产精品淫 | 天天射天天艹 | 日韩在线| 国产精品视频地址 | 国产99久久久精品视频 | 又黄又爽又刺激 | 欧美精品二区 | av免费观看高清 | 久久综合久久八八 | 国产精品成人一区二区三区吃奶 | 中文字幕韩在线第一页 | 中日韩三级视频 | 久久婷婷色 | 色噜噜日韩精品欧美一区二区 | 精品国产人成亚洲区 | 国产精品美女免费视频 | 久久久精品高清 | 91视频在线观看大全 | 亚洲国产中文字幕在线观看 | 在线影院av | 国产丝袜在线 | 久久99国产精品二区护士 | 日韩午夜在线观看 | 国产视频一二三 | 久久99精品国产麻豆宅宅 | 青青啪| av一级免费| 日韩在线 一区二区 | 一级电影免费在线观看 | 日本特黄特色aaa大片免费 | 久久公开视频 | 黄色网www | 美女视频黄免费网站 | 99在线观看免费视频精品观看 | 国产精品久久久久久欧美 | 狠狠色噜噜狠狠狠狠2021天天 | 色综合夜色一区 | 丁香电影小说免费视频观看 | 日韩视频1 | 国产精品美女视频 | 少妇精69xxtheporn| 九色自拍视频 | 国产又黄又猛又粗 | 日韩视频免费观看高清 | 午夜av一区二区三区 | 黄色av高清 | 少妇bbbb搡bbbb搡bbbb | 久久久久 | 婷婷伊人综合 | 香蕉视频亚洲 | 91亚洲狠狠婷婷综合久久久 | 91丨九色丨国产在线 | 日韩免费av在线 | 麻豆国产露脸在线观看 | 亚洲午夜精 | 精品国产自在精品国产精野外直播 | 国内精品久久久久久久久久久 | 国产最新福利 | 99久久国产免费免费 | 国产高清 不卡 | 456免费视频 | 国产精品热视频 | 欧美日韩亚洲在线观看 | av高清不卡 | 成人播放器| 亚洲一区久久久 | 国模一二三区 | 色婷婷综合久久久久中文字幕1 | 国内小视频在线观看 | 在线三级av | 精品久久免费看 | 久久久久亚洲国产 | 亚洲伦理中文字幕 | 亚洲在线激情 | 久久精品亚洲精品国产欧美 | 九九九九九精品 | 久久高视频 | 免费在线激情电影 | 国产黄色片免费 | 亚洲男模gay裸体gay | 亚洲欧美成人综合 | 色丁香久久| 三级黄色在线 | 国产精品永久久久久久久久久 | 日韩精品在线免费观看 | 色在线视频网 | 国产又粗又猛又黄视频 | 久久精品亚洲 | 亚洲成av人片在线观看www | 伊人色综合久久天天网 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 日本韩国欧美在线观看 | 国产一区在线免费观看视频 | 免费一级片在线观看 | 中文字幕高清视频 | 天天色天天射天天综合网 | 中文字幕一区二区三区在线播放 | 日韩超碰在线 | 成人国产精品久久久久久亚洲 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 久久天天操 | 一区二区国产精品 | 免费看污在线观看 | 国产欧美在线一区 | 蜜桃视频日韩 | 欧美激情va永久在线播放 | 视频一区二区国产 | 中文字幕在线观看免费高清电影 | 日韩高清一二区 | 久久99久久99精品免观看软件 | 在线日韩av | 国产亚洲精品美女久久 | 992tv在线观看| 国产视频精品久久 | 久久精品在线免费观看 | 97中文字幕| 天天色婷婷 | 中文字幕一区二区三区在线观看 | 免费成人av | 国产色中涩 | 国产亚洲视频在线免费观看 | 正在播放亚洲精品 | 精品色999| 天天干天天干天天干 | 亚洲最大av网站 | 西西www444 | 欧洲亚洲女同hd | 国产一区免费看 | 国产午夜麻豆影院在线观看 | 国产精品高潮呻吟久久久久 | 99麻豆视频| 久久爱992xxoo| 五月婷婷电影网 | 伊人五月天综合 | 射射色 | 日韩视频免费观看高清完整版在线 | 久久久久在线视频 | 五月婷婷综合在线视频 | 久久精品婷婷 | 亚洲精品一区二区三区四区高清 | 免费精品在线视频 | 成人在线视频一区 | 狠色在线 | 国产精品99久久久久久宅男 | 免费看污在线观看 | 天堂av一区二区 | 欧美久草网 | 日韩sese| 国内精品久久久久久久影视麻豆 | 狠狠干激情 | 久久久久久久久网站 | 丝袜美腿亚洲综合 | 在线观看av麻豆 | 欧美色精品天天在线观看视频 | a视频免费在线观看 | 久久婷婷网 | 69久久99精品久久久久婷婷 | 国产精品s色| 99久久精品国产一区二区三区 | 久久国产网 | 国产精品a久久久久 | 欧美日本日韩aⅴ在线视频 插插插色综合 | av高清一区| 久免费 | 精品国产视频一区 | 国产特级毛片aaaaaa | 国产精品免费久久 | 久久久免费精品 | 国产在线不卡精品 | www黄色com | 久久国产视屏 | 91chinesexxx| 九色91在线视频 | 天天操夜夜操夜夜操 | 久久久久欠精品国产毛片国产毛生 | 亚洲免费av一区二区 | 黄色大片日本 | 国产区 在线 | 国产美女黄网站免费 | 国产精品久久久久久久久软件 | 欧美小视频在线 | 91尤物国产尤物福利在线播放 | 久久夜色精品国产欧美一区麻豆 | 日韩欧美在线综合网 | 免费看片黄色 | 久久久免费在线观看 | 91桃色在线观看视频 | 亚洲 中文字幕av | 中文字幕亚洲在线观看 | 亚洲成av片人久久久 | 亚洲精品乱码久久久久久蜜桃不爽 | 久久综合成人 | 亚洲在线视频播放 | 欧美日韩不卡在线观看 |