久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

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

编程问答

express-cli入门_使用Express.js入门

發布時間:2023/11/29 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 express-cli入门_使用Express.js入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

express-cli入門

by Victor Ofoegbu

由Victor Ofoegbu

使用Express.js入門 (Getting off the ground with Express.js)

使用Node.js框架編寫Web應用 (Writing web apps with the Node.js framework)

A common moment of truth is when you develop a lot of applications that need the same or identical functionality. It’s now obvious that copying and pasting code isn’t scalable — you need a tool that was made for flexibility, minimality, and reusability.

一個常見的現實時刻是,當您開發許多需要相同或相同功能的應用程序時。 現在很明顯,復制和粘貼代碼是不可擴展的—您需要一種為靈活性,最小化和可重用性而設計的工具。

That’s where Express sits in the MERN stack. It’s a Node.js framework for building scalable web applications.

這就是Express位于MERN堆棧中的位置。 這是一個用于構建可伸縮Web應用程序的Node.js框架。

In this post, we’ll go deep into building web apps with the Express framework. We’ll look at Database integration, sessions, and cookies, templating engines to solidify our workflow, and finally production and security concerns.

在本文中,我們將深入研究使用Express框架構建Web應用程序。 我們將研究數據庫集成,會話和cookie,模板引擎以鞏固我們的工作流程,最后是生產和安全方面的問題。

This tutorial requires you to have Node.js and npm installed, and you should possess a basic understanding of Node.js and JavaScript generally. If you aren’t familiar with Node.js, here’s my last post: The only NodeJs introduction you’ll ever need. It’s a great place to start diving into Node.js.

本教程要求您安裝Node.js和npm,并且您應該對Node.js和JavaScript具有基本的了解。 如果您不熟悉Node.js,這是我的最后一篇文章: 您唯一需要的NodeJs簡介 。 這是開始深入研究Node.js的好地方。

讓我們做快遞! (Let’s do Express!)

Express was built by TJ Holowaychuk who got the inspiration from the Ruby on Rails framework Sinatra. The latest version of Express is 4.16.1. Express 4 became lighter by letting go of some of the modules that developers didn’t always use. So they could easily import them only when they needed. Makes sense right?

Express由TJ Holowaychuk構建,他從Ruby on Rails框架Sinatra獲得了靈感。 Express的最新版本是4.16.1。 Express 4通過放開一些開發人員并不總是使用的模塊而變得更輕便。 因此,他們可以僅在需要時輕松導入它們。 有道理吧?

To get started with Express, you need to install it and require it in your program.

要開始使用Express,您需要安裝它并在程序中require它。

1) Create a folder called express-app, cd into it and hit npm init. This creates our package.json file.

1)創建一個名為express-app的文件夾,將其放入cd ,然后單擊npm init 。 這將創建我們的package.json文件。

2) Still on the terminal or command line, hit npm install --save express. This will install express to the project. The double-dash save flag basically means we’re adding it to our package.json file.

2)仍然在終端或命令行上,單擊npm install --save express 。 這將把Express安裝到項目中。 雙破折號save標志基本上意味著我們將其添加到package.json文件中。

3) On the root of our express-app folder, create a server.js file and copy this inside.

3)在我們express-app文件夾的根目錄中,創建一個server.js文件并將其復制到其中。

const express = require('express'),app = express();app.get('/',(request,response)=>{response.send(‘Hello world’); });//Binding the server to a port(3000) app.listen(3000,()=>console.log(‘express server started at port 300’));

const express = require('express'), ? ? ?app = express();app.get('/',(request,response)=>{ ?response.send(‘Hello world’);});//Binding the server to a port(3000)app.listen(3000,()=>console.log(‘express server started at port 300’));

const express = require('express'),app = express(); app.get('/',(request,response)=> {response.send('Hello world');}); //綁定服務器到端口(3000)app.listen(3000,()=> console.log('express服務器從端口300開始'));

4) Go back to the terminal, still in the same folder, and hit node server.js. Head to your browser and visit localhost.

4)返回終端,仍然在同一文件夾中,然后單擊node server.js 。 前往瀏覽器并訪問localhost 。

We’re requiring our Express module. If you were quite observant, you must have noticed we didn’t need the http module like we do in pure Node.js apps. That’s because Express requires it, so we don’t need to do that again.

我們需要我們的Express模塊??。 如果您很觀察,您一定已經注意到我們不需要像純Node.js應用程序中那樣的http模塊。 那是因為Express需要它,所以我們不需要再做一次。

When we require ('express’), what gets exported to us is a function, so we can basically call it directly and assign it to the app variable. At this point, nothing’s gonna work till we actually handle the request. This is called routing and it means giving the client what they are asking for.

當我們require ('express') ,導出到我們的是一個函數,因此我們基本上可以直接調用它并將其分配給app變量。 在這一點上,在我們真正處理請求之前,什么都不會起作用。 這被稱為routing ,它意味著向客戶提供他們想要的東西。

Express gives us some basic verbs to do HTTP operations (such as GET, POST, PUT and DELETE). In our example here, we do an app.get() method which handles get requests to the server. It takes two arguments: the path of the request and a callback to handle the request.

Express為我們提供了一些用于HTTP操作的基本動詞(例如GET,POST,PUT和DELETE)。 在此處的示例中,我們執行一個app.get()方法來處理對服務器的獲取請求。 它有兩個參數:請求的path和處理請求的回調。

If you didn’t get this, I’ll explain more.

如果您不明白這一點,我將進一步說明。

A path is an address to a resource on a computer. A callback is a function passed to another function as an argument that is called when certain conditions happen.

路徑是計算機上資源的地址。 回調是作為參數傳遞給另一個函數的函數,當某些情況發生時將調用該函數。

You might remember this:

您可能還記得:

$('p').click(function(){console.log('You clicked me') });

Here, we add a callback to fire when p is clicked. See? It’s easy.

在這里,我們添加了一個單擊p時觸發的回調。 看到? 這很容易。

On the last line of server.js, we listen at port 3000 and console.log when we start the server.

在server.js的最后一行,我們在啟動服務器時偵聽端口3000和console.log。

I bet you can’t write apps with that. Let’s get meaty.

我敢打賭你不能用它編寫應用程序。 讓我們變得多肉。

在Express中路由 (Routing in Express)

Routing means assigning functions to respond to users’ requests. Express routers are basically middleware (meaning they have access to the request and response objects and do some heavy lifting for us).

路由是指分配功能以響應用戶的請求。 Express路由器基本上是中間件(這意味著它們可以訪問request和response對象并為我們做一些繁重的工作)。

Routing in Express follows this basic format:

Express中的路由遵循以下基本格式:

app.VERB(‘path’, callback…);

Where VERB is any of the GET, POST, PUT, and DELETE verbs.

VERB是GET , POST , PUT和DELETE動詞中的任何一個。

We can add as many callbacks as we desire. See an example here:

我們可以根據需要添加任意數量的回調。 在這里查看示例:

const express = require('express'),app = express();function sayHello(request,response,next){console.log(‘I must be called’);next(); }app.get('/', sayHello, (request, response)=>{response.send('sayHello'); });app.listen(3000,()=>console.log('Express server started at port 3000'));

Head to your terminal or command prompt and hit node server.js. You’ll see that the sayHello function fires before the response is sent to the browser.

轉到終端或命令提示符,然后單擊node server.js 。 您會看到在將響應發送到瀏覽器之前, sayHello函數將觸發。

The sayHello function takes three arguments (request, response, and next).

sayHello函數采用三個參數( request , response和next )。

The next()function, when called, moves control to the next middleware or route.

調用next()函數時,會將控制權移至下一個中間件或路由。

請求和響應對象 (The request and response objects)

The request object contains information about the incoming request. Here are the most useful properties and methods:

request對象包含有關傳入請求的信息。 以下是最有用的屬性和方法:

The request.params variable stores an object of named GET request parameters. For example, clear your server.js file and paste this inside:

request.params變量存儲一個名為GET請求參數的對象。 例如,清除您的server.js文件并將其粘貼到內部:

const express = require('express'),app = express();app.get('/:name/:age', (request, response)=>{response.send(request.params); });app.listen(3000,()=>console.log(‘Express server started at port 3000’));

Run this with node server.js, then head to your browser and run: https://localhost:3000/john/5

使用node server.js運行它,然后轉到瀏覽器并運行: https://localhost:3000/john/5

In the code above, we’re getting variables from the URL and sending them to the browser. The point is that the request.params is an object holding all those GET parameters. Notice the colon before the parameters. They differentiate route parameters from normal routes paths.

在上面的代碼中,我們從URL獲取變量并將其發送到瀏覽器。 關鍵是request.params是一個包含所有那些GET參數的對象。 注意參數前的冒號。 它們將路由參數與常規路由路徑區分開。

The request.body property stores POST form parameters.

request.body屬性存儲POST表單參數。

The request.query property is used to extract the GET form data. Here’s an example of that:

request.query屬性用于提取GET表單數據。 這是一個例子:

1) Create another folder called express-query, and then create two files: server.jsand form.html. Paste this into server.js :

1)創建另一個名為express-query文件夾,然后創建兩個文件: server.js和form.html 。 將此粘貼到server.js :

const express = require('express'),app = express();//route serves both the form page and processes form data app.get('/', (request, response)=>{console.log(request.query);response.sendFile(__dirname +'/form.html'); });app.listen(3000,()=>console.log('Express server started at port 3000'));

2) Copy this to the form.html file:

2)將其復制到form.html文件:

<!--action specifies that form be handled on the same page--> <form action='/' method='GET'><input type='text' name='name'/><input type='email' name='email'/><input type='submit'/> </form>

Run the code with node server.js, hit localhost:3000, and fill and submit the form in your browser. After submitting the form, the data you filled out gets logged to the console.

使用node server.js運行代碼,命中localhost:3000 ,然后在瀏覽器中填寫并提交表單。 提交表單后,您填寫的數據將記錄到控制臺。

request.headers hold key/pair values of the request received by the server. Servers and clients make use of headers to communicate their compatibility and constraints.

request.headers保留服務器接收到的請求的鍵/對值。 服務器和客戶端利用標頭來傳達其兼容性和約束。

request.accepts([‘json’,’html’])holds an array of data formats and returns the format the browser prefers to collect data in. We’ll also see this when dealing with Ajax forms.

request.accepts(['json','html'])保存一系列數據格式,并返回瀏覽器更喜歡收集數據的格式。我們在處理Ajax表單時也會看到這一點。

request.url stores data about the URL of the request.

request.url 存儲有關請求URL的數據。

request.ip: holds the IP (Internet protocol) address of the browser requesting for information.

request.ip:保存請求信息的瀏覽器的IP(Internet協議)地址。

The response object also ships with some convenient methods to get useful information about the outgoing request.

response對象還附帶了一些便捷的方法來獲取有關傳出請求的有用信息。

response.send(message) sends its argument to the browser.

response.send(message) 將其參數發送到瀏覽器。

response.json() sends its argument as data to the browser in JSON format.

response.json() 將其參數作為數據以JSON格式發送到瀏覽器。

response.cookie(name,value,duration) provides an interface to set cookies on browsers. We’ll talk about cookies too.

response.cookie(name,value,duration) 提供了在瀏覽器上設置Cookie的界面。 我們也將談論cookie。

response.redirect([redirect status], url) redirects the browser to the specified URL with the optional status.

response.redirect([redirect status], url)將瀏覽器重定向到具有可選狀態的指定URL。

response.render(‘file’,{routeData: routedata}) renders a view to the browser and takes an object containing data the router might need. You’ll understand it better when we see views.

response.render('file',{routeData: routedata})將視圖呈現給瀏覽器,并獲取一個包含路由器可能需要的數據的對象。 當我們看到視圖時,您會更好地理解它。

response.set(name,value) sets header values. But you don’t want to do that, as it gets in the way of the browser’s job.

response.set(name,value) 設置標題值。 但是您不想這樣做,因為它會妨礙瀏覽器的工作。

response.status(status)sets the status of a particular response (404, 200, 401 and so forth).

response.status(status)設置特定響應的狀態(404、200、401等)。

You don’t have to memorize all these. As we use them, you’ll subconsciously master them.

您不必記住所有這些。 當我們使用它們時,您將下意識地掌握它們。

快速路由器 (Express Router)

With Express Router, we can break our application into fragments that can have their own instances of express to work with. We can them bring them together in a very clean and modular way.

使用Express Router,我們可以將我們的應用程序分解為多個片段,這些片段可以具有自己的Express實例。 我們可以將它們以非常干凈和模塊化的方式整合在一起。

Let’s take for example. These four random URLs:

讓我們舉個例子。 這四個隨機網址:

localhost:3000/users/john

本地主機:3000 / users / john

localhost:3000/users/mark

本地主機:3000 /用戶/標記

localhost:3000/posts/newpost

本地主機:3000 / posts / newpost

localhost:3000/api

本地主機:3000 / api

Our normal approach of doing this with Express would be:

使用Express進行此操作的正常方法是:

const express = require('express'),app = express();//Different routes app.get('/users/john',(request,response)=>{response.send(`John’s page`); });app.get('/users/mark',(request,response)=>{response.send(`John’s page`); });app.get('/posts/newpost',(request,response)=>{response.send(`This is a new post`); });app.get('/api',(request,response)=>{response.send(‘Api endpoint’); });app.listen(3000,()=>console.log(‘Server started at port 3000’));

There’s nothing wrong with this pattern at this point. But it has potential for errors. When our routes are basically just five, there isn’t much of a problem. But when things grow and lots of functionality is required, putting all that code in our server.js isn’t something we want to do.

此時,此模式沒有任何問題。 但是它有潛在的錯誤。 當我們的路線基本上只有五條時,就沒什么問題了。 但是,當事情發展并且需要大量功能時,將所有代碼放入我們的server.js中并不是我們想要做的。

我們應該讓路由器為我們做到這一點 (We should let Router do this for us)

Create a folder called react-router in the root of our project, create a file inside it, and call it basic_router.js. Copy this right in:

在我們項目的根目錄中創建一個名為react-router的文件夾,在其中創建一個文件,并將其basic_router.js 。 將此權限復制到:

const express = require('express'),router = express.Router();//making use of normal routes router.get('/john',(request,response)=>{response.send('Home of user'); });router.get('/mark',(request,response)=>{response.send('Home of user'); });//exporting thee router to other modules module.exports = router;

We’re basically creating another instance of Express. This time, we’re calling the Router() function of Express. It’s possible to directly call express() as a function (as in our server.js) and call express.Router() also. This is because Express is exported as a function, and in JavaScript, functions are objects too.

我們基本上是在創建Express的另一個實例。 這次,我們調用Express的Router()函數。 可以直接調用express()作為一個函數(如在server.js ),也可以調用express.Router() 。 這是因為Express是作為函數導出的,在JavaScript中,函數也是對象。

We add routes to it as a normal Express app. But we don’t bind it to any port. The router object contains all the routes we’ve defined, so we export only that object so other parts of our program can make use of it too.

我們將路由添加為普通的Express應用。 但是我們不將其綁定到任何端口。 router對象包含我們定義的所有路由,因此我們僅導出該對象,因此程序的其他部分也可以使用它。

We create our main server.js, and add it as a middleware. Yes middlewares make work easier, remember?

我們創建主server.js ,并將其添加為中間件。 是的,中間件使工作更輕松,還記得嗎?

const express = require('express'),app = express();//requiring the basic_router.js app.use('/users',require('.react-router/basic_router'));//routes app.get('/posts/newpost',(request,response)=>{response.send('new post'); });app.get('/api',(request,response)=>{response.send('API route'); });app.listen(3000,()=>console.log('Express server started at port 3000'));

Now run this. Navigate to localhost:3000/user/john and localhost:3000/user/mark. See? things are quite easy to group at this point.

現在運行這個。 導航到localhost:3000/user/john和localhost:3000/user/mark 。 看到? 在這一點上,事情很容易歸類。

We can do this for every other route. Create another file for our APIs. We’ll call it api_route.js. Copy this right in:

我們可以針對其他所有路線執行此操作。 為我們的API創建另一個文件。 我們將其稱為api_route.js 。 將此權限復制到:

const express = require('express'),router = express.Router();router.get('/',(request,response)=>{response.send('Home of user'); });//some other endpoints to submit data module.exports = router;

Now, go back to our server.js and change the code to this:

現在,回到我們的server.js并將代碼更改為此:

const express = require('express'),app = express();app.use('/users',require('./basic_router'));app.use('/api',require('./api_route'));app.get('/posts/newpost',(request,response)=>{response.send('new post'); });app.listen(3000,()=>console.log('Express server started at port 3000'));

This is quite enough information to build basic web app routes.

這些信息足以構建基本的Web應用程序路由。

模板引擎 (Template engines)

Most of the time, you aren’t definitive about the number of pages you want your website to have. This means you’d want to keep things flexible, reusable, and clean.

在大多數情況下,您對網站的網頁數量不確定。 這意味著您希望保持事物的靈活性,可重用性和清潔性。

Imagine you have a footer that you might want to use on every page. Wouldn’t it be cool if you just put it in a file and embed it with a line of code on every page? Or how would like to lose the .html on your URL?

假設您有一個頁腳,可能要在每個頁面上使用。 如果只是將其放在文件中并在每一頁上嵌入一行代碼,那會不會很酷? 或者,如何丟失URL中的.html ?

These are just a few things template engines can do for us.

這些只是模板引擎可以為我們做的幾件事。

There are a lot of template engines at the moment. But we’ll be using Handlebars to see how template works. Luckily enough, the same principles apply to pretty much all template engines — there are just syntax changes.

目前有很多模板引擎。 但是我們將使用把手來查看模板的工作方式。 幸運的是,幾乎所有模板引擎都適用相同的原理-只是語法上的改變。

To make use of Handlebars, we install it.

為了利用車把,我們安裝了它。

npm install --save express-handlebars

require it in your file and configure your app to use it like so:

在您的文件中require它,并配置您的應用程序以使其使用,如下所示:

const express = require('express'),hbs = require('express-handlebars').create({defaultLayout:'main.hbs'}),app = express();app.engine('hbs', hbs.engine); app.set('view engine','hbs');

So let’s do a basic rendering with Handlebars:

因此,讓我們使用Handlebars進行基本渲染:

  • Create a folder called express-handlebars, create a views folder, and inside the views folder create another folder called layouts.

    創建一個名為express-handlebars的文件夾,創建一個views文件夾,然后在views文件夾內創建另一個名為layouts文件夾。

  • 2) Create a server.js file and paste this inside:

    2)創建一個server.js文件并將其粘貼到內部:

    const express = require('express'),hbs = require('express-handlebars').create({defaultLayout:'main.hbs'}),app = express();//setting our app engine to handlebars app.engine('hbs', hbs.engine); app.set('view engine', 'hbs'); app.get('/',(request,response)=>{response.render('home',{title: 'Home'}); });app.get('/about',(request,response)=>{response.render(‘about’,{title: ‘About’}); });app.listen(3000,()=>console.log('Express server started at port 3000'));

    3) Inside the layouts folder, create a file main.hbs. Paste this inside:

    3)在layouts文件夾中,創建一個文件main.hbs 。 將此粘貼到里面:

    <!-- The main.hbs file will act as a default template for every view on the site --><!DOCTYPE html> <html> <head> <meta charset='UTF-8'><!-- The title variable will be replaced with the title of every page --><title>{{title}}</title> </head><body> <!-- Content of other pages will replace the body variable --> {{{body}}} </body> </html>

    4) Next, we’re going to create the separate views. Inside of the views folder, create two files — home.hbsand about.hbs. Paste the following inside home.hbs :

    4)接下來,我們將創建單獨的視圖。 在views文件夾中,創建兩個文件home.hbs和about.hbs 。 將以下內容粘貼到home.hbs :

    //home.hbs <!-- This is the Home view and will render into the main.hbs layout --><div>Hello, I’m the Home page and you’re welcome </div>

    and in our about.hbs :

    在我們的about.hbs :

    //about.hbs <!-- This is the About view and will also render into the main.hbs layout --><div>Hello, I’m the about page, what do you want to know about </div>

    Do a node server.js in your terminal and hit http://localhost:3000 on your browser.

    在終端中執行一個node server.js ,然后在瀏覽器中點擊http://localhost:3000 。

    What’s happening up here?

    這是怎么回事

    We first require express-handlebarsand create a defaultLayout, assigning it to main.hbs. This means that all our views will render into the main.hbs layout.

    我們首先需要express-handlebars并創建一個defaultLayout ,將其分配給main.hbs 。 這意味著我們所有的視圖都將呈現到main.hbs布局中。

    Take a look at the server.js. Just a few things changed right? Let’s start with these two lines:

    看一看server.js 。 只是幾件事改變了吧? 讓我們從這兩行開始:

    app.engine('hbs', hbs.engine); app.set(‘view engine’,’hbs’);

    The first line sets the app engine to hbs.engine and the second line sets the view engine property to handlebars. Quite straightforward right?

    第一行將應用程序引擎設置為hbs.engine ,第二行將視圖引擎屬性設置為車把。 很直接吧?

    The routes in our server.js are also a little different. Here’s the culprit:

    我們的server.js中的路由也有所不同。 這是罪魁禍首:

    response.render('home',{title: 'Home'});

    While .send()sends plain text to the browser, render() looks for the first parameter in the views folder and renders it to the browser. Most of the time, we might want to pass dynamic content to the view too. We give the render method an object as the second parameter. The object contains keys and values of data to be passed inside the view.

    .send()將純文本發送到瀏覽器時, render()在views文件夾中查找第一個參數,并將其呈現到瀏覽器。 大多數時候,我們可能也想將動態內容傳遞給視圖。 我們給render方法一個對象作為第二個參數。 該對象包含要在視圖內部傳遞的數據的鍵和值。

    Take this line in our main.hbs file in our layout folder.

    在布局文件夾中的main.hbs文件中使用此行。

    //main.hbs <title>{{title}}</title>

    The {{title}} is replaced with whatever is passed with the view. In our case, the {title: 'Home'}. We can pass as many values as we want to the view. Just add it as a property of the object.

    {{title}}被視圖傳遞的內容所代替。 在我們的例子中, {title: 'Home'} 。 我們可以向視圖傳遞任意數量的值。 只需將其添加為對象的屬性即可。

    When we do a response.render(), Express knows where to get the files we ask for. Let’s look into the about.hbs.

    當我們執行response.render() ,Express知道從哪里獲取我們要求的文件。 讓我們看一下about.hbs 。

    <!-- This is the About view and will render into the main.handlebars layout --> <div>Hello, I’m the about page, what do you want to know about </div>

    The content of this file replaces the body variable in our layout.handlebars:

    該文件的內容替換了我們layout.handlebars的body變量:

    {{{body}}}

    If you’re asking why we’re using two braces for {{title}} and three for the {{{body}}} , you’re on the right track.

    如果您要問為什么我們在{{title}}中使用兩個大括號,而在{{{body}}}中使用三個大括號,那么您的方向正確。

    When we use two braces, we spit out everything, even the HTML tags (unescaped). Here’s what I mean.

    當我們使用兩個大括號時,我們吐出了所有內容,甚至包括HTML標記(未轉義)。 這就是我的意思。

    If the content we want to send to the browser is <b>Hello world</b>, with two braces, Express will render it as <b&gt;Hello world</b>. If we make use of three braces, Express will understand that we want a bold text and render it as Hello world (bolded).

    如果我們要發送給瀏覽器的內容是<b>Hello wor </ b>,帶有兩個大括號,Express會將其ender it as <b&g t; Hello world </ b>。 如果我們使用三個大括號,Express將會理解我們想要一個純文本并將其呈現為Hello world(粗體)。

    This is basically how template engines work in Express. Handlebars provides a one page documentation. I consider it a good place to start.

    基本上,這就是Express中模板引擎的工作方式。 車把提供一頁文檔。 我認為這是一個不錯的起點。

    在Express中呈現靜態內容 (Rendering static content in express)

    Have you ever thought of where we’ll store our CSS, JavaScript files, and images? Well, Express provides a middleware to make the server know where to find static content.

    您是否想到過將CSS,JavaScript文件和圖像存儲在何處? 好吧,Express提供了一個中間件,使服務器知道在哪里可以找到靜態內容。

    Here’s how to make use of it:

    使用方法如下:

    app.use(express.static(__dirname +'public'));

    Put this at the top of your server.js, right after the require statements. __dirname holds the path where the program is being run from.

    將其放在require。語句之后的server.js頂部。 __dirname包含從中運行程序的路徑。

    If you didn’t get that, try this.

    如果沒有得到,請嘗試此操作。

    Delete everything on your server.js, and put this inside:

    刪除server.js上的所有內容,并將其放入其中:

    console.log(__dirname);

    console.log(__dirname);

    Head to your command line, and run node server.js. It shows you the path to the file node that is running.

    轉到命令行,然后運行node server.js 。 它向您顯示正在運行的文件節點的路徑。

    Where we store our static content is up to us. We might want to name it assetsor whatever, but you have to make sure you append it to the dirname like so:

    我們存儲靜態內容的位置取決于我們。 我們可能想將其命名為assets或其他名稱,但是您必須確保將其附加到dirname如下所示:

    express.static(__dirname + ‘static_folder_name’).

    快速中間件 (Express Middleware)

    Middleware are functions that encapsulate functionality. They perform operations on HTTP requests and give us a high-level interface to customize them. Most middleware take three arguments: request, response objects, and a next function. In error handling middleware, there’s an additional parameter: the err object, which can tell us about the error and let us pass it to other middleware.

    中間件是封裝功能的功能。 它們對HTTP請求執行操作,并為我們提供了高級界面以對其進行自定義。 大多數中間件采用三個參數: requestresponse對象和next函數。 在錯誤處理中間件中,還有一個附加參數: err對象,它可以告訴我們錯誤并將其傳遞給其他中間件。

    We add middleware to our server by using app.use(name_of_middleware). It’s also important to note that middleware are used in the same order they were added. I’ll show you an example later if you don’t understand.

    我們使用app.use(name_of_middleware)將中間件添加到服務器中。 同樣重要的是要注意,中間件的使用順序與添加時相同。 如果您不了解,我稍后將為您提供示例。

    With this definition, we can also see route functions like app.get(), app.post() and so on, as middleware, except that they are applied to particular HTTP verb requests. You might also find it interesting to know that there’s an app.all()route that is applied to all HTTP requests not considering if they were a GET, POST, or other request.

    通過此定義,我們還可以將路由函數app.get() , app.post()等視為中間件,只是將它們應用于特定的HTTP動詞請求。 您可能還會發現有趣的是,有一條app.all()路由應用于所有HTTP請求,而不考慮它們是GET,POST還是其他請求。

    //This middleware will be called for every request. GET or POST app.all((request,response)=>{console.log('Hello world'); })

    Route handlers take two parameters, the path to match and the middleware to execute.

    路由處理程序采用兩個參數,即匹配路徑和要執行的中間件。

    app.get('/',(request,,response)=>{response.send(‘Hello world’); });

    If the path is left out, the middleware applies to every GET request.

    如果路徑被忽略,則中間件將應用于每個GET請求。

    //Every GET request will call this middleware app.get((request,response)=>{response.send(‘Hello world’); });

    In our example above, once we send a GETrequest, our server responds to the browser by sending a ‘Hello world’ message and then terminates until there’s another request.

    在上面的示例中,一旦我們發送GET請求,我們的服務器就會通過發送'Hello world'消息來響應瀏覽器,然后終止直到有另一個請求。

    But we might want more than one middleware to be called. There’s a way to do this. Remember our next function? We could make use of it to push control to another middleware.

    但是我們可能希望調用多個中間件。 有一種方法可以做到這一點。 還記得我們的next功能嗎? 我們可以利用它來將控制推到另一個中間件。

    Let’s see how this works. Copy and paste this code into our server.js:

    讓我們看看它是如何工作的。 將此代碼復制并粘貼到我們的server.js:

    const express = require('express'),app = express();//setting the port app.set(‘port’, process.env.PORT || 3000);//first middleware app.use((request,respone,next)=>{console.log(`processing for data for ${request.url}`);next(); });//second middleware app.use((request,response,next)=>{console.log(`The response.send will terminate the request`); response.send(`Hello world`); });//third middleware app.use((request,respone,next)=>{console.log(`I’ll never get called`); });app.listen(3000,()=>console.log('Express server started at port 3000'));

    From the terminal, hit node server.js and take a look at the terminal. Head to your browser and open up localhost:3000. Look at your console again, and you’ll see something similar.

    在終端上,單擊node server.js并查看終端。 轉到瀏覽器并打開localhost:3000 。 再次查看您的控制臺,您會看到類似的內容。

    Express server started at port 3000 processing for data for / The response.send will terminate the request

    Our first middleware executes every time a request is received. It writes something to the console and calls the next()function. Calling the next() function tells Express to not terminate the request object but sends control to the next middleware. Anytime we write a middleware without calling the next function, Express terminates the requestobject.

    每當收到請求時,我們的第一個中間件就會執行。 它將一些內容寫入控制臺并調用next()函數。 調用next()函數告訴Express不要終止request對象,而是將控制權發送給下一個中間件。 每當我們編寫中間件而沒有調用next函數時,Express都會終止request對象。

    In the second middleware, we pass the next() function as an argument but we never call it. This terminates the request object and the third middleware never gets called. Note that if we never sent anything to the browser in the second middleware, the client will eventually timeout.

    在第二個中間件中,我們將next()函數作為參數傳遞,但是我們從不調用它。 這將終止request對象,并且永遠不會調用第三個中間件。 請注意,如果我們從不向第二個中間件中的瀏覽器發送任何內容,則客戶端最終將超時。

    Here are some useful middleware in Express.js:

    這是Express.js中一些有用的中間件:

    • Morgan — log each request

      Morgan-記錄每個請求

    • CORS — enables Cross Origin Request Sharing

      CORS —啟用跨源請求共享

    • body-parser — a middleware to parse the request.body in Express apps

      body-parser —在Express應用程序中解析request.body的中間件

    • Multer — Node.js middleware for handling multipart/form-data

      Multer —用于處理multipart/form-data Node.js中間件

    • session — simple session middleware for Express.js

      會話 — Express.js的簡單會話中間件

    • errorhandler — development-only error handler middleware

      errorhandler —僅開發錯誤處理程序中間件

    • serve-favicon — favicon serving middleware

      serve-favicon —提供服務的favicon中間件

    • csurf — Node.js CSRF protection middleware

      csurf — Node.js CSRF保護中間件

    • Passport — Simple, unobtrusive authentication

      護照 -簡單,簡單的身份驗證

    • Merror — A RESTful-friendly Express Middleware for HTTP error handling and error responses

      Merror — RESTful友好的Express中間件,用于HTTP錯誤處理和錯誤響應

    • Expressa — express middleware for easily making REST APIs

      Expressa —用于輕松制作REST API的快速中間件

    在Express中處理表單數據 (Handling form data in Express)

    The web’s main function is communication. Express provides us with tools to understand what clients request and how to respond properly.

    網絡的主要功能是通信。 Express為我們提供了了解客戶要求以及如何正確響應的工具。

    Express basically has two places to store client data. The request.querystring(for GET request) and the request.body (for POST requests). On the client side, it’s ideal to use the POST method for form submission because most browsers place limits on the length of the querystring and additional data is lost. If you don’t know what a query string is, it’s the part after your URL that contains data and does not fit properly into your routing path system. In case you don’t quite understand what a query string is, here’s an example:

    Express基本上有兩個地方可以存儲客戶端數據。 request.querystring(用于GET請求)request.body(用于POST請求) 。 在客戶端,使用POST方法進行表單提交是理想的,因為大多數瀏覽器都會限制querystring的長度,并且會丟失其他數據。 如果您不知道查詢字符串是什么,則它是URL后面的部分,其中包含數據,并且不適合您的路由路徑系統。 如果您不太了解查詢字符串是什么,請看以下示例:

    facebook.com/users?name=Victor&age=100&occupation=whatever

    From the point where the question mark begins is called the query string. It passes data to the server but exposes it in the URL.

    從問號開始的地方稱為查詢字符串。 它將數據傳遞到服務器,但在URL中公開。

    It’s also good practice to keep the query string as clean as possible. Sending large data with GET requests makes the query string messy.

    保持查詢字符串盡可能整潔也是一個好習慣。 使用GET請求發送大數據會使查詢字符串混亂。

    Let’s see a demo. We’ll take some data from our client via GET and send it back to them.

    讓我們看一個演示。 我們將通過GET從客戶那里獲取一些數據,并將其發送回給他們。

    Create a folder, call it form-data , and create two files inside: server.js and form.html. Paste this into the server.js file and form.html files respectively:

    創建一個文件夾,將其稱為form-data ,并在其中創建兩個文件: server.js和form.html 。 分別將其粘貼到server.js文件和form.html文件中:

    //server.js fileconst express = require('express'),app = express();//setting the port app.set('port', process.env.PORT || 3000);// app.get('/',(request,response)=>{response.sendFile(__dirname +'/form.html'); });app.get('/process',(request,response)=>{console.log(request.query);response.send(`${request.query.name} said ${request.query.message}`); });app.listen(3000,()=>{console.log('Express server started at port 3000'); });//form.html<!DOCTYPE html> <html><head><meta charset='UTF-8'><title>Form page</title><style>*{margin:0;padding:0;box-sizing: border-box;font-size: 20px;}input{margin:20px;padding:10px;}input[type=”text”],textarea {width:200px;margin:20px;padding:5px;height:30px;display: block;}textarea{resize:none;height:60px;}</style></head> <body><form action='/process' method='GET'><input type='text' name='name' placeholder='name'/><textarea name='message' placeholder='message'></textarea><input type='submit'/></form> </body> </html>

    Run node server.js, head to localhost:3000, fill the form and submit it.

    運行node server.js ,轉至localhost:3000 ,填寫表格并提交。

    Here’s what the result would look like.

    結果如下所示。

    In our server.js file here, we have to two GET routes. One for localhost:3000 and localhost:3000/process.

    在這里的server.js文件中,我們必須有兩個GET路由。 一個用于localhost:3000和localhost:3000/process 。

    app.get(‘/’,(request,response)=>{response.sendFile(__dirname + ‘/form.html’); });

    And

    app.get(‘/process’,(request,response)=>{response.send(`${request.query.name} said ${request.query.message}`); });

    Head to your your console. You’ll see an object. This proves that our request.query is an object that contains all queries and their values.

    進入您的控制臺。 您會看到一個對象。 這證明我們的request.query是一個包含所有查詢及其值的對象。

    {name: 'victor',message: 'Hello world' }

    If you take a look at our form in the form.htmlpage, you’ll notice our form has action and methodattributes. The actionattribute specifies the page or route that should handle the form’s data (‘process’ in this case). When the form gets submitted, it sends a GET request to the processroute with the content of our form as querystringdata.

    如果您在form.html頁面上查看我們的表單,您會發現我們的表單具有action和method屬性。 action屬性指定應處理表單數據的頁面或路由(在這種情況下為“過程”)。 提交表單后,它將GET請求發送到process路由,表單的內容作為querystring數據。

    Our server.js file also handles the request for the process path and sends data passed from our form.html to the browser and console.

    我們的server.js文件還處理對流程路徑的請求,并將從form.html傳遞的數據發送到瀏覽器和控制臺。

    Let’s see how we would handle this with the POST method. It’s time to clear our server.jsfile. Copy and paste this code into server.js:

    讓我們看看如何使用POST方法處理此問題。 現在該清除我們的server.js文件了。 將此代碼復制并粘貼到server.js :

    //server.jsconst express = require('express'),app = express(),//You must require the body-parser middleware to access request.body in express bodyParser = require('body-parser');//configuring bodyparser app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true }));//setting our port app.set('port', process.env.PORT || 3000);//Get route for localhost:3000 app.get('/',(request,response)=>{response.sendFile(__dirname +'/form.html'); });//POST route for form handling app.post('/',(request,response)=>{console.log(request.body); response.send(`${request.body.name} said ${request.body.message}`); });app.listen(3000,()=>{console.log('Express server started at port 3000'); });

    If you look closely, the first different thing we’re doing is requiring and using body-parser. Body-parser is a middleware that makes POST data available in our request.body. Bear in mind that the request.body won’t work without the body-parser middleware.

    如果仔細觀察,我們要做的第一件事就是需要并使用body-parser 。 Body-parser是一個中間件,可在我們的request.body提供POST數據。 請記住,沒有body-parser中間件, request.body將無法工作。

    You might also notice we have both GET and POST route handlers. The GET middleware shows the form and the POST middleware processes it. It’s possible for both of them to use one route path because they have different methods.

    您可能還會注意到我們同時具有GET和POST路由處理程序。 GET中間件顯示表單,而POST中間件對其進行處理。 由于它們使用的方法不同,因此它們都可能使用一條路由路徑。

    We couldn’t do this for our first example because our form method was GET. Obviously, you can’t have two GET requests for the same route and have both of them send data to the browser. That’s why our first example processed the form on the /process path.

    對于第一個示例,我們無法執行此操作,因為我們的表單方法是GET。 顯然,對于相同的路由,您不能有兩個GET請求,并且它們都必須將數據發送到瀏覽器。 這就是為什么我們的第一個示例在/process路徑上處理表單。

    處理AJAX表單 (Handling AJAX forms)

    Handling Ajax forms with Express is quite straightforward. Express provides us with a request.xhrproperty to tell us if a request is sent via AJAX. We can couple that with the request.accepts()method we talked about earlier. It helps us determine what format the browser wants the data in. If the client will like JSON, well, we’ll just give it JSON.

    使用Express處理Ajax表單非常簡單。 Express為我們提供了request.xhr屬性,以告知我們是否通過AJAX發送了請求。 我們可以將其與前面討論的request.accepts()方法結合使用。 它可以幫助我們確定瀏覽器需要哪種格式的數據。如果客戶端喜歡JSON,那么我們就給它JSON。

    Let’s modify our form.html to use AJAX and our server.js to accept AJAX and send JSON.

    讓我們修改form.html以使用AJAX,并修改server.js接受AJAX并發送JSON。

    <!DOCTYPE html> <html><head><meta charset='UTF-8'><title>Form page</title><script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js'></script><style>*{margin:0;padding:0;box-sizing: border-box;font-size: 20px;}input{margin:20px;padding:10px;}input[type=”text”],textarea {width:200px;margin:20px;padding:5px;height:30px;display: block;}textarea{resize:none;height:60px;}</style></head> <body><div></div><form action='/' method='POST'><input type='text' name='name' placeholder='name'/><textarea name='message' placeholder='message'></textarea><input type='submit'/></form><script>$('form').on('submit',makeRequest);function makeRequest(e){e.preventDefault();$.ajax({url:'/',type : 'POST',success: function(data){if(data.message){$('div').html(data.message);} else {$('div').html('Sorry, an error occured');}},error: function(){$('div').html('Sorry, an error occurred');}});}</script></body> </html>//server.jsconst express = require('express'),app = express(),bodyParser = require('body-parser');//configuring the body-parser middleware app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true }));//setting our app port app.set('port', process.env.PORT || 3000);//Route for get requests. app.get('/',(request,response)=>{response.sendFile(__dirname +'/form.html'); });//Route to handle POST form requests. app.post('/',(request,response)=>{ //we check if the request is an AJAX one and if accepts JSONif(request.xhr || request.accepts('json, html')==='json'){response.send({message:'Just wanted to tell you. It worked'});} else {//Do something else by reloading the page.} });app.listen(3000,()=>{console.log('Express server started at port 3000'); });

    這是這樣的 (Here’s how this works)

    Not much changes here — we just added a way to vet if the request was made with AJAX.

    這里沒有太多更改-如果請求是使用AJAX進行的,我們只是添加了一種方法來審核。

    So here’s what we’re doing. We made the request an AJAX one with the POST method. We linked to jQuery CDN. In the script tag, we attach an event handler for the submit event. When we do this, we prevent the default behavior of reloading the page.

    這就是我們正在做的。 我們使用POST方法將請求設為AJAX請求。 我們鏈接到jQuery CDN。 在腳本標簽中,我們為Submit事件附加了一個事件處理程序。 當我們這樣做時,我們防止了重新加載頁面的默認行為。

    We then use the jQuery $.ajax() method to make an AJAX request. The server responds with an object with a messageproperty, which we then append to the empty div.

    然后,我們使用jQuery $.ajax()方法發出AJAX請求。 服務器以帶有message屬性的對象作為響應,然后將其附加到空div上。

    If you aren’t familiar with AJAX, I once wrote some articles on AJAX. Check them out: A gentle introduction to AJAX and Easier asynchronous requests with jQuery.

    如果您不熟悉AJAX,我曾經寫過一些有關AJAX的文章。 查看它們: AJAX和jQuery的異步請求的輕松 介紹 。

    Node.js應用程序中的數據庫 (Databases in Node.js apps)

    MongoDB and CouchDB are some database systems that are suitable for Node.js applications. This doesn’t completely rule out the possibility of using other databases. We’ll look at MongoDB, but you can choose any one you like.

    MongoDB和CouchDB是一些適用于Node.js應用程序的數據庫系統。 這并不完全排除使用其他數據庫的可能性。 我們將研究MongoDB,但是您可以選擇任何一個。

    Documents replace rows in a relational database like MySQL. In MongoDB and other document-based databases, data is stored and retrieved in an object format. This means we can have deeply nested structures.

    文檔替換了關系數據庫(如MySQL)中的行。 在MongoDB和其他基于文檔的數據庫中,數據以對象格式存儲和檢索。 這意味著我們可以擁有深層嵌套的結構。

    If you consider objects in JavaScript, there’s no way to validate that the value of an object property is a particular type. Here’s what I mean:

    如果考慮使用JavaScript中的對象,則無法驗證對象屬性的值是特定類型。 這就是我的意思:

    const obj = { text : 1234}

    const obj = { text : 1234}

    There’s no way to make sure the value of textis a string.

    無法確保text的值是字符串。

    Fortunately, there’s Mongoose. Mongoose allows you define schemas that strongly validate data and ensure they match objects or documents in a MongoDB. Mongoose is an Object Document Mapper (ODM).

    幸運的是,有貓鼬。 Mongoose允許您定義用于強烈驗證數據并確保它們與MongoDB中的對象或文檔匹配的架構。 貓鼬是一個對象文檔映射器(ODM)。

    An introduction to Mongoose is a nice place to start exploring and working with Mongoose.

    貓鼬入門是開始探索和使用貓鼬的好地方。

    Express中的會話和Cookie (Sessions and Cookies in Express)

    HTTP is stateless. Meaning any request or response sent by the browser or server respectively maintains no information (state) about the previous or future requests and responses. Every single request has all it takes to evoke a new server response.

    HTTP是無狀態的。 意味著瀏覽器或服務器發送的任何請求或響應分別不保留有關先前或將來的請求和響應的信息(狀態)。 每個單個請求都具有引發新服務器響應所需要的一切。

    But there has to be a way for servers to remember clients as they browse through the site so they don’t have to enter passwords on every page.

    但是服務器必須有一種方法來記住客戶端,因為客戶端在瀏覽網站時不必在每個頁面上都輸入密碼。

    The web has been innovative enough to make use of cookies and sessions. Cookies are basically small files stored on the client’s machine. When clients send requests, the server uses it to identify them. More like a passport, the server then knows it’s them and applies all their preferences.

    網絡已經足夠創新,可以使用cookie和會話。 Cookies基本上是存儲在客戶端計算機上的小文件。 客戶端發送請求時,服務器使用它來識別請求。 服務器更像護照,然后會知道是他們并應用他們的所有首選項。

    So the idea would be to store files on the client’s machine. While this is not a bad idea, we want to make sure we don’t abuse the user’s storage by storing huge amounts of data. On the other side of things, we understand that if we want to make things harder to guess and more secure, we make it longer and more complex. How can we achieve these two concurrently?

    因此,想法是將文件存儲在客戶端計算機上。 雖然這不是一個壞主意,但我們要確保我們不會通過存儲大量數據來濫用用戶的存儲。 在另一方面,我們了解到,如果我們想使事情變得更難以猜測和更加安全,那么我們將使其變得更長,更復雜。 我們如何同時實現這兩個目標?

    People came up with sessions. So the idea of sessions is that instead of storing all the information on the client’s cookie, the server stores an identifier in the cookie (a small string). When the client sends requests, the server takes that unique string and matches it to the user’s data on the server. This way, we get to store any amount of data and still remember users.

    人們提出了會議。 因此,會話的想法是,服務器將標識符存儲在cookie中(一個小字符串),而不是將所有信息存儲在客戶端的cookie中。 當客戶端發送請求時,服務器將使用該唯一字符串并將其與服務器上用戶的數據進行匹配。 這樣,我們可以存儲任何數量的數據,并且仍然記住用戶。

    To make use of cookies in Express, we need to require the cookie-parser middleware. Remember our middleware?

    要在Express中使用cookie,我們需要cookie-parser中間件。 還記得我們的中間件嗎?

    I’m not in the best position to explain this in depth. But someone did it better here: Express sessions.

    我無法最好地深入解釋這一點。 但是有人在這里做得更好: 快速會議 。

    Express應用程序中的安全性 (Security in Express apps)

    The web is not secured by default. Packets are the way data is sent over the web. These packets are unencrypted by default. When we think about web security, the first place to start is to secure those packets.

    默認情況下,網絡不受保護。 數據包是通過網絡發送數據的方式。 這些數據包默認情況下是未加密的。 考慮網絡安全時,首先要確保這些數據包的安全。

    HTTPS: That’s no new word! Like you might have guessed, the difference between HTTP and HTTPS is the S (Security). HTTPS encrypts packets traveling through the web so people don’t do malicious things with it.

    HTTPS :這不是一個新詞! 就像您可能已經猜到的那樣,HTTP和HTTPS之間的區別是S(安全性)。 HTTPS會對通過網絡傳輸的數據包進行加密,因此人們不會對其進行惡意處理。

    那么我該如何獲取HTTPS? (So how do I go about getting HTTPS?)

    Chill, let’s take it slow. To get HTTPS, you need to approach a Certificate Authority (CA). HTTPS is based on the server having a public key certificate, sometimes called an SSL. CAs assign certificates to qualified servers. You have to also understand that CAs make root certificates that get installed when you install your browser. So browsers can easily communicate with servers with certificates too.

    冷靜,讓我們慢慢來。 要獲取HTTPS,您需要聯系證書頒發機構(CA)。 HTTPS基于具有公共密鑰證書(有時稱為SSL)的服務器。 CA將證書分配給合格的服務器。 您還必須了解,CA會生成在安裝瀏覽器時安裝的根證書。 因此,瀏覽器也可以輕松地通過證書與服務器通信。

    Good news: Anybody can make their own certificates.

    好消息 :任何人都可以制作自己的證書。

    Bad news: The browsers can’t recognize those certificates because they weren’t installed as root certificates.

    壞消息 :瀏覽器無法識別這些證書,因為它們不是作為根證書安裝的。

    Impossible: You can’t configure all the browsers in the world during installation to recognize your certificate.

    不可能 :您無法在安裝過程中配置世界上所有的瀏覽器來識別您的證書。

    I can tell what you’re thinking now. You’re thinking that you can create your own certificate for testing and development and get one in production. Well, that’s smart and possible.

    我可以告訴你現在在想什么。 您在考慮可以創建自己的用于測試和開發的證書并在生產中獲得證書。 好吧,這很聰明而且可能。

    The browser will give you warnings, but you are aware of the problem so it won’t be much of an issue. Here’s a post that walks you through creating your own certificate.

    瀏覽器會向您發出警告,但是您已經知道了問題,因此不會有太大的問題。 這里有一個職位是引導您完成創建您自己的證書。

    How to Set Up HTTPS Locally Without Getting Annoying Browser Privacy ErrorsSetting up HTTPS locally can be tricky business. Even if you do manage to wrestle self-signed certificates into…deliciousbrains.com

    如何在不引起瀏覽器隱私錯誤的情況下 在本地設置HTTPS可能是一件棘手的事情。 即使您確實設法將自簽名證書摔入…… Deliciousbrains.com

    Enough talking. Let’s assume you now have the SSL certificate. Here’s how to make it work with your Express app.

    聊夠了。 假設您現在擁有SSL證書。 這是使其與Express應用程序一起使用的方法。

    在您的Node應用程序中啟用HTTPS (Enabling HTTPS in your Node app)

    We need to make use of the https module for HTTPS. After obtaining our credentials from a Certificate Authority, we’ll include it as an argument to the createServer() method.

    我們需要對HTTPS使用https模塊。 從證書頒發機構獲得我們的憑據后,我們會將其作為參數添加到createServer() 方法。

    //server.jsconst express = require('express'),https = require('https'),http = require('http'),fs = require('fs'),app = express();//credentials obtained from a Certificate Authority var options = {key: fs.readFileSync('/path/to/key.pem'),cert: fs.readFileSync('/path/to/cert.pem') };//Binding the app on different ports so the app can be assessed bt HTTP and HTTPS http.createServer(app).listen(80); https.createServer(options, app).listen(443);

    Notice we’re requiring httpand https. This is because we want to respond to both. In our program, we’re making use of the fs module (file-system).

    注意,我們需要http和https. 這是因為我們想對兩者做出回應。 在我們的程序中,我們正在使用fs模塊(文件系統)。

    We basically provide the path to where our SSL key and certificate is stored. A module or something. Observe that we’re making use of the readFileSync method instead of the readFile. If you understand Node.js architecture, you’ll infer that we want to read the file synchronously before running any other lines of code.

    我們基本上提供了SSL密鑰和證書的存儲路徑。 模塊或其他東西。 觀察到我們正在使用readFileSync 方法,而不是readFile 。 如果您了解Node.js架構,則可以推斷我們希望在運行任何其他代碼行之前同步讀取文件。

    Running this code asynchronously might lead to situations where aspects of our code that require the content of the file don’t get them on time.

    異步運行此代碼可能會導致以下情況:需要文件內容的代碼某些方面無法按時得到。

    The last two lines bind the HTTP and HTTPS to two different ports and take different arguments. Why are we doing this?

    最后兩行將HTTP和HTTPS綁定到兩個不同的端口,并采用不同的參數。 我們為什么這樣做呢?

    At most times, we want our server to still listen to requests with HTTP and maybe redirect them to HTTPS.

    在大多數情況下,我們希望我們的服務器仍然使用HTTP偵聽請求,甚至可以將其重定向到HTTPS。

    Note: the default port for HTTPS is 443.

    注意 :HTTPS的默認端口是443。

    To do this basic redirect, we’ll install and require a module express-force-ssl at the top of our program like so:

    要執行此基本重定向,我們將在程序頂部安裝并需要一個模塊express-force-ssl ,如下所示:

    npm install express-force-ssl

    And configure like so:

    并像這樣配置:

    const express_force_ssl = require('express-force-ssl'); app.use(express_force_ssl);

    Now, our server can take care of both HTTP and HTTPS requests effectively.

    現在,我們的服務器可以有效地處理HTTP和HTTPS請求。

    跨站請求偽造(CSRF) (Cross-Site Request Forgery (CSRF))

    This is the other big thing you’d want to protect yourself from. It happens when requests come to your server but not directly from your user. For example, you have an active session on Facebook.com and you have another tab open. Malicious scripts can run on the other site and make requests to Facebook’s server.

    這是您要保護自己免受傷害的另一件大事。 當請求到達您的服務器而不是直接來自用戶時,就會發生這種情況。 例如,您在Facebook.com上有一個活動會話,并且打開了另一個選項卡。 惡意腳本可以在其他站點上運行,并向Facebook服務器發出請求。

    A way to handle this is to ensure that requests come only from your website. That’s quite easy. We assign an ID to users and attach it to forms, so when they submit, we can match up the ID and deny access if it doesn’t match.

    處理此問題的一種方法是確保請求僅來自您的網站。 那很容易。 我們為用戶分配一個ID并將其附加到表單,因此當他們提交表單時,我們可以匹配該ID并在不匹配時拒絕訪問。

    Luckily, there’s a middleware that handles this — csurfmiddleware. Here’s how to use it:

    幸運的是,有一個可以處理此csurf中間件csurf中間件。 使用方法如下:

    npm install csurf

    To use it in our program:

    要在我們的程序中使用它:

    const express = require('express'),body_parser = require('body-parser'),hbs = require('express-handlebars').create({defaultLayout: 'main',extname:'hbs'});session = require('express-session'),csurf = require('csurf'),app = express();//setting the app port app.set('port', process.env.PORT || 3000);//configuring the app for handlebars app.engine('hbs', hbs.engine); app.set('view engine', 'hbs');//setting up a session csrf app.use(session({name: 'My session csrf',secret: 'My super session secret',cookie: {maxAge: null,httpOnly: true,secure: true}}));app.use(csurf());//configuring the body parser middleware app.use(body_parser.urlencoded());//Route to login app.get('/login', (request,response)=>{console.log(request.csrfToken());response.render('login',{csrfToken : request.csrfToken(),title: 'Login'}); });app.listen(3000,()=>console.log('Express app started at port 3000'));<b>Here's the generated csrf token</b> ({{csrfToken}})<br><br><form method='POST' action='/process'><!--?We pass the _csrf token as a hidden input --><input type='hidden' name='_csrf' csurf={{csrfToken}}/><input type='text' name='name'/><input type='submit'/> </form>

    Run node server.js , head to your browser localhost:3000, fill the form and submit. Also check in your command line and see the token logged.

    運行node server.js ,轉到瀏覽器localhost:3000 ,填寫表格并提交。 另外,請在命令行中檢查并查看已記錄的令牌。

    What we’re doing is generating and passing the csrfToken to our login view.

    我們正在做的是生成csrfToken并將其csrfToken到我們的登錄視圖。

    Note: The csurf module requires express-session module to work. We configure our session CSRF and pass it to the view via the response.render() method.

    注意: csurf模塊需要express-session模塊才能工作。 我們配置會話CSRF并通過response.render()方法將其傳遞給視圖。

    Our view can now append it to the form or any other sensitive request.

    現在,我們的視圖可以將其追加到表單或任何其他敏感請求。

    So what happens when the browser doesn’t get the CSRF token from the browser forms? It spits an error. Make sure you have an error handling route in your Express application, or else your application might misbehave.

    那么當瀏覽器沒有從瀏覽器表單中獲取CSRF令牌時會發生什么呢? 它吐出一個錯誤。 確保Express應用程序中有錯誤處理路線,否則您的應用程序可能行為不當。

    認證方式 (Authentication)

    One step to reduce authentication problems is to let people sign up and sign in with third-party apps (Facebook, Twitter, Google,+ and so on). A whole lot of people have these accounts, and you can also have access to some of their data like emails and usernames. Modules like passport.js provide a very elegant interface to handle such authentications.

    減少身份驗證問題的一個步驟是讓人們注冊并使用第三方應用程序(Facebook,Twitter,Google等)登錄。 很多人都有這些帳戶,您也可以訪問他們的某些數據,例如電子郵件和用戶名。 諸如passport.js模塊提供了一個非常優雅的界面來處理這種身份驗證。

    Here’s the official passport.js documentation. I think it’s a nice place to start.

    這是官方的password.js文檔 。 我認為這是一個不錯的起點。

    Another step to reduce authentication problems is to always encrypt all passwords and decrypt them back when showing them to the users.

    減少身份驗證問題的另一步是,始終加密所有密碼,并在向用戶顯示密碼時將其解密。

    One more thing. I see this on a lot of websites. They set crazy criteria for users’ password on the site. I understand that they’re trying to make passwords more secure, but think about it. Whose job is it? The developer or the user?

    還有一件事。 我在很多網站上都看到了這一點。 他們為網站上的用戶密碼設置了瘋狂的條件。 我了解他們正在嘗試使密碼更安全,但請考慮一下。 這是誰的工作? 開發人員還是用戶?

    The user should be least bothered about security issues. When criteria like these are set on passwords, users have no other option than to use passwords they’ll never remember. I know the web is getting better and we’ll figure out a way to make authentication better.

    用戶應該至少對安全問題感到困擾。 當在密碼上設置此類條件時,用戶別無選擇,只能使用他們永遠不會記住的密碼。 我知道網絡越來越好,我們將找出一種使身份驗證更好的方法。

    Till then I think we can end this here.

    到那時,我認為我們可以在這里結束。

    This is a lot of information. But you need more than this to build scalable web applications. Here are some insightful books for learning more about Express.

    這是很多信息。 但是,您不僅僅需要構建可伸縮的Web應用程序。 這是一些有見地的書,可用于進一步了解Express。

    If this was useful, you should follow me on Twitter for more useful stuff.

    如果這有用,您應該在Twitter上關注我,以獲取更多有用的信息。

  • Express in action by Evan Hahn.

    快速行動由埃文·哈恩 。

  • Getting MEAN with Express, Mongo, Angular and Node by Simon Holmes.

    Simon Holmes通過Express,Mongo,Angular和Node獲得MEAN 。

  • 翻譯自: https://www.freecodecamp.org/news/getting-off-the-ground-with-expressjs-89ada7ef4e59/

    express-cli入門

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的express-cli入门_使用Express.js入门的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    国产高清不卡无码视频 | 人妻插b视频一区二区三区 | 成人女人看片免费视频放人 | 成年美女黄网站色大免费视频 | 国产成人午夜福利在线播放 | 亚洲中文字幕在线无码一区二区 | 天堂а√在线地址中文在线 | 在线天堂新版最新版在线8 | 欧美国产日韩久久mv | 性生交大片免费看l | 十八禁视频网站在线观看 | 老司机亚洲精品影院无码 | 国产免费久久久久久无码 | 国产无遮挡又黄又爽又色 | 欧美黑人乱大交 | 精品国产麻豆免费人成网站 | 无码av最新清无码专区吞精 | 日本熟妇浓毛 | 天天摸天天碰天天添 | 四虎永久在线精品免费网址 | 国产成人亚洲综合无码 | 精品一区二区不卡无码av | 丰满少妇高潮惨叫视频 | 国产区女主播在线观看 | 国产精品久免费的黄网站 | 午夜福利不卡在线视频 | 国产亚洲精品久久久闺蜜 | 少妇人妻大乳在线视频 | 国产人妻久久精品二区三区老狼 | 久久午夜夜伦鲁鲁片无码免费 | 国产成人午夜福利在线播放 | 久久精品人人做人人综合试看 | 国模大胆一区二区三区 | 一本久道久久综合婷婷五月 | 色综合久久88色综合天天 | 老司机亚洲精品影院无码 | 精品熟女少妇av免费观看 | 无码人妻精品一区二区三区不卡 | 人妻体内射精一区二区三四 | 无套内谢老熟女 | 国内揄拍国内精品人妻 | 中文字幕色婷婷在线视频 | 免费国产成人高清在线观看网站 | 精品国产一区av天美传媒 | 国产超级va在线观看视频 | 永久免费精品精品永久-夜色 | 国产精品二区一区二区aⅴ污介绍 | 欧美性猛交xxxx富婆 | 人人爽人人爽人人片av亚洲 | 色窝窝无码一区二区三区色欲 | 一本久道久久综合婷婷五月 | 国产激情艳情在线看视频 | 无码任你躁久久久久久久 | 亚洲中文无码av永久不收费 | 97久久精品无码一区二区 | 日本精品少妇一区二区三区 | 中文毛片无遮挡高清免费 | 欧美成人午夜精品久久久 | 午夜嘿嘿嘿影院 | 国产超级va在线观看视频 | 成人免费无码大片a毛片 | 伊人久久大香线蕉午夜 | 日本免费一区二区三区最新 | 欧美激情一区二区三区成人 | 99视频精品全部免费免费观看 | 夜先锋av资源网站 | 蜜臀av无码人妻精品 | 97久久国产亚洲精品超碰热 | 亚洲精品国产第一综合99久久 | 人人妻人人澡人人爽精品欧美 | 久久 国产 尿 小便 嘘嘘 | 国产精品高潮呻吟av久久4虎 | 国产午夜亚洲精品不卡下载 | 日本xxxx色视频在线观看免费 | 日韩少妇白浆无码系列 | 色窝窝无码一区二区三区色欲 | 久久国产劲爆∧v内射 | √天堂资源地址中文在线 | 丰满人妻精品国产99aⅴ | 久久综合香蕉国产蜜臀av | 夜夜影院未满十八勿进 | 永久免费观看国产裸体美女 | 国产成人无码一二三区视频 | 精品国产一区二区三区四区在线看 | 亚洲国产高清在线观看视频 | 亚洲狠狠色丁香婷婷综合 | 日本肉体xxxx裸交 | 嫩b人妻精品一区二区三区 | 动漫av一区二区在线观看 | 亚洲欧洲日本无在线码 | 欧美三级a做爰在线观看 | av在线亚洲欧洲日产一区二区 | 高清无码午夜福利视频 | 国产国产精品人在线视 | 日本熟妇大屁股人妻 | 欧美精品在线观看 | 岛国片人妻三上悠亚 | 亚洲成熟女人毛毛耸耸多 | 美女黄网站人色视频免费国产 | 永久黄网站色视频免费直播 | 精品国产一区二区三区四区在线看 | 国产亚洲日韩欧美另类第八页 | 国产综合久久久久鬼色 | 精品少妇爆乳无码av无码专区 | 欧美日本免费一区二区三区 | 国产人妻久久精品二区三区老狼 | 又大又黄又粗又爽的免费视频 | 中文字幕人成乱码熟女app | 亚洲成a人一区二区三区 | 精品欧美一区二区三区久久久 | 亚洲精品国产a久久久久久 | 亚洲熟悉妇女xxx妇女av | 国产偷国产偷精品高清尤物 | 久热国产vs视频在线观看 | 亚洲aⅴ无码成人网站国产app | 国产午夜亚洲精品不卡 | 欧洲vodafone精品性 | 国产办公室秘书无码精品99 | 久久国产精品_国产精品 | 国产精品国产三级国产专播 | 男女性色大片免费网站 | 亚洲国产精品久久久久久 | a片在线免费观看 | 青草视频在线播放 | 精品国产麻豆免费人成网站 | 国产麻豆精品精东影业av网站 | 2020久久香蕉国产线看观看 | 无码精品国产va在线观看dvd | 精品国产aⅴ无码一区二区 | 人妻体内射精一区二区三四 | 成人影院yy111111在线观看 | 久久天天躁夜夜躁狠狠 | 一个人免费观看的www视频 | 国产办公室秘书无码精品99 | 婷婷六月久久综合丁香 | 国产精品久久久午夜夜伦鲁鲁 | 又色又爽又黄的美女裸体网站 | 麻豆av传媒蜜桃天美传媒 | 精品亚洲韩国一区二区三区 | 老子影院午夜伦不卡 | 国内少妇偷人精品视频免费 | 国产av一区二区三区最新精品 | 丰满少妇熟乱xxxxx视频 | 精品久久久久久亚洲精品 | 激情爆乳一区二区三区 | 亚洲精品久久久久avwww潮水 | 无码精品国产va在线观看dvd | 亚洲国产成人a精品不卡在线 | 激情内射亚州一区二区三区爱妻 | 77777熟女视频在线观看 а天堂中文在线官网 | 露脸叫床粗话东北少妇 | 成人免费视频在线观看 | 波多野结衣高清一区二区三区 | 一个人看的视频www在线 | 欧美日韩一区二区三区自拍 | 欧美一区二区三区 | 国产成人无码专区 | 天堂亚洲免费视频 | 亚洲国产av美女网站 | 最新国产乱人伦偷精品免费网站 | 香蕉久久久久久av成人 | 日韩av无码中文无码电影 | 欧美一区二区三区视频在线观看 | 国产成人综合在线女婷五月99播放 | √8天堂资源地址中文在线 | 婷婷五月综合激情中文字幕 | 国色天香社区在线视频 | 伦伦影院午夜理论片 | 国产精品无码一区二区三区不卡 | 久久精品无码一区二区三区 | 国内综合精品午夜久久资源 | 亚洲成色www久久网站 | 人妻体内射精一区二区三四 | 成 人影片 免费观看 | 免费看少妇作爱视频 | 大色综合色综合网站 | 亚洲精品欧美二区三区中文字幕 | 天天拍夜夜添久久精品 | 免费视频欧美无人区码 | 丰满少妇女裸体bbw | 亚洲性无码av中文字幕 | 国产成人av免费观看 | 精品日本一区二区三区在线观看 | 俄罗斯老熟妇色xxxx | 伊人久久大香线蕉午夜 | 国产香蕉尹人综合在线观看 | 免费网站看v片在线18禁无码 | 久久人人97超碰a片精品 | 男女超爽视频免费播放 | 97久久精品无码一区二区 | 无码一区二区三区在线观看 | 国产亚洲精品久久久久久久久动漫 | 狠狠噜狠狠狠狠丁香五月 | 国产成人无码区免费内射一片色欲 | 少妇久久久久久人妻无码 | 最新国产乱人伦偷精品免费网站 | 97色伦图片97综合影院 | 久久午夜无码鲁丝片午夜精品 | 精品人妻人人做人人爽 | 精品国产一区二区三区av 性色 | 在线欧美精品一区二区三区 | 日日摸日日碰夜夜爽av | 少妇性荡欲午夜性开放视频剧场 | 亚洲一区二区三区在线观看网站 | 国产极品美女高潮无套在线观看 | 国产精品爱久久久久久久 | 国产电影无码午夜在线播放 | 中文字幕无线码免费人妻 | 国内精品一区二区三区不卡 | 国产在线aaa片一区二区99 | 亚洲男人av天堂午夜在 | 西西人体www44rt大胆高清 | 国产乱子伦视频在线播放 | 亚洲精品国偷拍自产在线观看蜜桃 | v一区无码内射国产 | 又粗又大又硬又长又爽 | 少妇无码av无码专区在线观看 | 啦啦啦www在线观看免费视频 | 中文字幕人妻丝袜二区 | 精品夜夜澡人妻无码av蜜桃 | 久久精品中文字幕大胸 | 99久久精品午夜一区二区 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 国产精品福利视频导航 | 又大又紧又粉嫩18p少妇 | 色 综合 欧美 亚洲 国产 | 中文字幕色婷婷在线视频 | 日韩欧美群交p片內射中文 | 婷婷五月综合缴情在线视频 | 日本免费一区二区三区最新 | 人人澡人摸人人添 | 国产人妻大战黑人第1集 | 国产精品免费大片 | 欧美老妇与禽交 | 乱人伦中文视频在线观看 | 国产卡一卡二卡三 | 成在人线av无码免观看麻豆 | 67194成是人免费无码 | 人妻少妇精品无码专区动漫 | 亚洲国产高清在线观看视频 | 日日碰狠狠丁香久燥 | 欧洲精品码一区二区三区免费看 | 特大黑人娇小亚洲女 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 性啪啪chinese东北女人 | www国产亚洲精品久久网站 | 中文无码精品a∨在线观看不卡 | 国产一区二区不卡老阿姨 | 国产午夜无码视频在线观看 | 亚洲成av人片在线观看无码不卡 | 少妇人妻av毛片在线看 | 国产亚洲日韩欧美另类第八页 | 欧洲熟妇色 欧美 | 久久久精品成人免费观看 | 中文字幕无码av波多野吉衣 | 欧美自拍另类欧美综合图片区 | 亚洲色偷偷偷综合网 | 国产亚洲视频中文字幕97精品 | 麻豆国产人妻欲求不满谁演的 | 麻豆av传媒蜜桃天美传媒 | 一本色道婷婷久久欧美 | 亚洲日本一区二区三区在线 | 欧美第一黄网免费网站 | 国产精品.xx视频.xxtv | 亚洲中文无码av永久不收费 | 中文字幕乱码中文乱码51精品 | 国产口爆吞精在线视频 | 成在人线av无码免费 | 亚洲精品一区三区三区在线观看 | 中文字幕人妻丝袜二区 | 在线观看国产一区二区三区 | 人妻无码αv中文字幕久久琪琪布 | 成人精品视频一区二区 | 日本一区二区更新不卡 | 美女扒开屁股让男人桶 | 欧洲vodafone精品性 | 亚洲色无码一区二区三区 | 高潮毛片无遮挡高清免费 | 中文字幕无码免费久久99 | 好屌草这里只有精品 | 国产乱子伦视频在线播放 | 国产人妻精品一区二区三区不卡 | 国产熟妇高潮叫床视频播放 | 俺去俺来也www色官网 | 台湾无码一区二区 | 国产综合在线观看 | 男女猛烈xx00免费视频试看 | 国产精品手机免费 | 日韩亚洲欧美精品综合 | 国产真实乱对白精彩久久 | 男人和女人高潮免费网站 | 性色欲网站人妻丰满中文久久不卡 | 成熟妇人a片免费看网站 | 国产精品99久久精品爆乳 | 中文久久乱码一区二区 | 日本高清一区免费中文视频 | 亚洲春色在线视频 | 亚洲国产精品久久久久久 | 日本免费一区二区三区最新 | 粉嫩少妇内射浓精videos | 西西人体www44rt大胆高清 | 久久综合给久久狠狠97色 | 久久久亚洲欧洲日产国码αv | 鲁鲁鲁爽爽爽在线视频观看 | 少妇人妻偷人精品无码视频 | 夜夜高潮次次欢爽av女 | 老熟妇仑乱视频一区二区 | 少妇邻居内射在线 | 国产日产欧产精品精品app | 国产亚洲欧美日韩亚洲中文色 | 国产人妻精品一区二区三区 | 亚洲成a人片在线观看无码3d | 亚洲欧美日韩国产精品一区二区 | 国产熟女一区二区三区四区五区 | 精品偷拍一区二区三区在线看 | 久久久久国色av免费观看性色 | 亚洲 激情 小说 另类 欧美 | 国产精品国产自线拍免费软件 | 麻豆av传媒蜜桃天美传媒 | 国产成人无码av在线影院 | 中文字幕日韩精品一区二区三区 | 国产亲子乱弄免费视频 | 麻豆蜜桃av蜜臀av色欲av | 国产性生大片免费观看性 | 成人动漫在线观看 | 国产精品爱久久久久久久 | 欧美日韩久久久精品a片 | 中文字幕无码日韩专区 | 四虎影视成人永久免费观看视频 | 亚洲自偷自偷在线制服 | 亚洲欧洲中文日韩av乱码 | 国产精品成人av在线观看 | 国产精品va在线播放 | 成人三级无码视频在线观看 | 性色欲网站人妻丰满中文久久不卡 | 88国产精品欧美一区二区三区 | 午夜无码人妻av大片色欲 | 青青久在线视频免费观看 | 一个人看的视频www在线 | 18黄暴禁片在线观看 | 国产真实乱对白精彩久久 | 国产成人无码午夜视频在线观看 | 欧美日本免费一区二区三区 | 久久午夜夜伦鲁鲁片无码免费 | 兔费看少妇性l交大片免费 | 无码国模国产在线观看 | √8天堂资源地址中文在线 | 国产精品二区一区二区aⅴ污介绍 | 欧美国产亚洲日韩在线二区 | 亚洲欧美精品伊人久久 | а天堂中文在线官网 | 一本色道婷婷久久欧美 | 人妻尝试又大又粗久久 | 妺妺窝人体色www婷婷 | 国产免费无码一区二区视频 | 无遮挡国产高潮视频免费观看 | 麻豆国产丝袜白领秘书在线观看 | 狠狠色噜噜狠狠狠7777奇米 | 少妇被粗大的猛进出69影院 | 精品无码成人片一区二区98 | 亚洲另类伦春色综合小说 | 天天摸天天透天天添 | 2020最新国产自产精品 | 夜夜高潮次次欢爽av女 | 西西人体www44rt大胆高清 | 色一情一乱一伦一区二区三欧美 | 久久久久久久久888 | 国产sm调教视频在线观看 | 99麻豆久久久国产精品免费 | 亚洲热妇无码av在线播放 | 少妇的肉体aa片免费 | 丰满肥臀大屁股熟妇激情视频 | 久久精品中文闷骚内射 | 理论片87福利理论电影 | 少妇无套内谢久久久久 | 天堂а√在线中文在线 | 熟女少妇在线视频播放 | 欧美激情综合亚洲一二区 | 最新版天堂资源中文官网 | 天天综合网天天综合色 | 波多野42部无码喷潮在线 | 色综合久久88色综合天天 | 久久zyz资源站无码中文动漫 | 精品国产一区二区三区四区在线看 | 久久精品中文字幕大胸 | 亚洲成a人片在线观看无码 | 欧美 丝袜 自拍 制服 另类 | 狠狠综合久久久久综合网 | 欧美性生交活xxxxxdddd | 午夜精品一区二区三区的区别 | 香蕉久久久久久av成人 | 综合激情五月综合激情五月激情1 | 午夜福利试看120秒体验区 | 精品久久久无码中文字幕 | 性欧美videos高清精品 | 色五月五月丁香亚洲综合网 | 欧美大屁股xxxxhd黑色 | 成年女人永久免费看片 | 亚洲精品欧美二区三区中文字幕 | 国产亚洲精品久久久久久大师 | 色综合久久久无码网中文 | 偷窥日本少妇撒尿chinese | 久久人人爽人人人人片 | 久9re热视频这里只有精品 | 日本精品久久久久中文字幕 | 欧美丰满老熟妇xxxxx性 | 国内精品人妻无码久久久影院蜜桃 | 国产成人综合在线女婷五月99播放 | 奇米影视7777久久精品人人爽 | 大乳丰满人妻中文字幕日本 | 人人澡人人妻人人爽人人蜜桃 | 久久亚洲国产成人精品性色 | 日日天日日夜日日摸 | 成人精品天堂一区二区三区 | 女人被男人躁得好爽免费视频 | 精品人妻av区 | 中文无码成人免费视频在线观看 | 国产午夜福利100集发布 | 无码免费一区二区三区 | 丰满人妻一区二区三区免费视频 | 露脸叫床粗话东北少妇 | 国产精品久久久 | 日韩精品无码免费一区二区三区 | 国产精品-区区久久久狼 | 精品无码av一区二区三区 | 免费人成在线观看网站 | 在教室伦流澡到高潮hnp视频 | 亚洲色大成网站www | 中文字幕无码热在线视频 | 中文字幕乱码中文乱码51精品 | 欧美人与禽zoz0性伦交 | 日本丰满护士爆乳xxxx | 久久aⅴ免费观看 | 国产av久久久久精东av | 激情亚洲一区国产精品 | 中文字幕人妻无码一区二区三区 | 高清无码午夜福利视频 | 欧美刺激性大交 | 欧美xxxx黑人又粗又长 | 欧美xxxxx精品 | 欧美激情一区二区三区成人 | 99久久久国产精品无码免费 | 人妻无码αv中文字幕久久琪琪布 | 欧美 日韩 亚洲 在线 | 性欧美牲交在线视频 | 欧美高清在线精品一区 | 成 人影片 免费观看 | 一本色道久久综合亚洲精品不卡 | 青草视频在线播放 | 色欲av亚洲一区无码少妇 | 亚洲色偷偷偷综合网 | 日本熟妇大屁股人妻 | 无套内谢的新婚少妇国语播放 | 亚洲欧洲中文日韩av乱码 | 小sao货水好多真紧h无码视频 | 一本精品99久久精品77 | 在线观看免费人成视频 | 小鲜肉自慰网站xnxx | 精品无码国产自产拍在线观看蜜 | 丰满岳乱妇在线观看中字无码 | 亚洲а∨天堂久久精品2021 | 国产午夜手机精彩视频 | 亚洲精品国产精品乱码视色 | 成熟妇人a片免费看网站 | 福利一区二区三区视频在线观看 | 日韩人妻无码一区二区三区久久99 | 人妻人人添人妻人人爱 | 青草青草久热国产精品 | 国产激情精品一区二区三区 | 六十路熟妇乱子伦 | 亚洲码国产精品高潮在线 | 久久综合给久久狠狠97色 | 中文字幕av日韩精品一区二区 | 亚洲成av人片在线观看无码不卡 | 性生交片免费无码看人 | 亚洲精品综合五月久久小说 | 亚洲啪av永久无码精品放毛片 | 国产真实伦对白全集 | 亚洲成a人一区二区三区 | 骚片av蜜桃精品一区 | 内射爽无广熟女亚洲 | 国产莉萝无码av在线播放 | 黄网在线观看免费网站 | 日韩av无码一区二区三区 | 国产熟女一区二区三区四区五区 | 国产精品人妻一区二区三区四 | 午夜男女很黄的视频 | 亚洲自偷精品视频自拍 | 玩弄中年熟妇正在播放 | 无码人妻av免费一区二区三区 | 人妻少妇精品无码专区动漫 | 超碰97人人射妻 | 999久久久国产精品消防器材 | 狠狠色噜噜狠狠狠7777奇米 | 麻豆国产97在线 | 欧洲 | 一本精品99久久精品77 | 荫蒂被男人添的好舒服爽免费视频 | 国内揄拍国内精品人妻 | 人妻少妇精品视频专区 | 成人免费无码大片a毛片 | 欧美怡红院免费全部视频 | 一区二区传媒有限公司 | 免费视频欧美无人区码 | 欧美日本免费一区二区三区 | 国产偷抇久久精品a片69 | 三上悠亚人妻中文字幕在线 | 日产国产精品亚洲系列 | 中文字幕av伊人av无码av | 国产亚洲精品精品国产亚洲综合 | 国产精品久久国产三级国 | 午夜肉伦伦影院 | 亚洲男人av香蕉爽爽爽爽 | 影音先锋中文字幕无码 | 狠狠cao日日穞夜夜穞av | 国产免费久久精品国产传媒 | 久久99精品久久久久久动态图 | 久久综合色之久久综合 | 欧洲欧美人成视频在线 | 国产欧美亚洲精品a | 5858s亚洲色大成网站www | 国产精品久免费的黄网站 | 国产乱人伦偷精品视频 | 亚洲日韩精品欧美一区二区 | 免费国产成人高清在线观看网站 | 精品国产av色一区二区深夜久久 | 精品夜夜澡人妻无码av蜜桃 | 任你躁在线精品免费 | 亚洲精品国产精品乱码不卡 | 亚洲精品国偷拍自产在线观看蜜桃 | 亚洲国产精华液网站w | 99国产欧美久久久精品 | 无套内射视频囯产 | 日本www一道久久久免费榴莲 | 久久久久久久女国产乱让韩 | 国产性生大片免费观看性 | 又紧又大又爽精品一区二区 | 男女作爱免费网站 | 久久久精品欧美一区二区免费 | 性欧美牲交在线视频 | 精品人妻av区 | 国产乱人偷精品人妻a片 | 国产在线精品一区二区三区直播 | 欧美激情内射喷水高潮 | 亚洲成av人片在线观看无码不卡 | 久久综合狠狠综合久久综合88 | 亚洲欧洲中文日韩av乱码 | 久久人人爽人人人人片 | 亚洲成a人片在线观看无码3d | 熟妇女人妻丰满少妇中文字幕 | 大胆欧美熟妇xx | 中文字幕精品av一区二区五区 | 任你躁国产自任一区二区三区 | 日本熟妇乱子伦xxxx | 亚洲成av人片天堂网无码】 | 国内精品人妻无码久久久影院蜜桃 | 国产色在线 | 国产 | 久久国语露脸国产精品电影 | 欧美 亚洲 国产 另类 | 欧美猛少妇色xxxxx | 久久国产36精品色熟妇 | 一区二区三区高清视频一 | 精品一区二区三区无码免费视频 | 四虎国产精品一区二区 | 国产精品第一区揄拍无码 | 亚洲中文字幕va福利 | 牛和人交xxxx欧美 | 东京热一精品无码av | 国产精品久久久久久亚洲影视内衣 | 国产av无码专区亚洲awww | 超碰97人人做人人爱少妇 | 精品国偷自产在线视频 | 欧美freesex黑人又粗又大 | 久久午夜夜伦鲁鲁片无码免费 | 色婷婷欧美在线播放内射 | 日本欧美一区二区三区乱码 | 一本久久伊人热热精品中文字幕 | 日韩人妻无码中文字幕视频 | 国产亚洲精品精品国产亚洲综合 | 国产又粗又硬又大爽黄老大爷视 | 女人被爽到呻吟gif动态图视看 | 国产精品久久久久久久影院 | 色综合久久中文娱乐网 | 午夜熟女插插xx免费视频 | 精品国产福利一区二区 | 久久婷婷五月综合色国产香蕉 | 精品久久久久香蕉网 | 国产精品.xx视频.xxtv | 国产在线精品一区二区三区直播 | 色情久久久av熟女人妻网站 | 久久久精品456亚洲影院 | 亚洲精品综合五月久久小说 | 色一情一乱一伦一视频免费看 | 久久亚洲中文字幕精品一区 | 国内精品久久久久久中文字幕 | 久久久久免费精品国产 | 丰满少妇高潮惨叫视频 | 亚洲午夜久久久影院 | www国产亚洲精品久久久日本 | 国产综合久久久久鬼色 | 免费男性肉肉影院 | 免费无码一区二区三区蜜桃大 | 精品午夜福利在线观看 | 少女韩国电视剧在线观看完整 | 欧美激情一区二区三区成人 | 欧美怡红院免费全部视频 | a片在线免费观看 | 一本久道久久综合婷婷五月 | 国产精品久久久av久久久 | 最近免费中文字幕中文高清百度 | 日韩亚洲欧美精品综合 | 水蜜桃亚洲一二三四在线 | 欧美 日韩 亚洲 在线 | 熟女少妇在线视频播放 | 国产精品美女久久久网av | 国产午夜手机精彩视频 | 老熟妇乱子伦牲交视频 | 国产精品毛片一区二区 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 亚洲一区av无码专区在线观看 | 国产精品va在线播放 | 一本色道婷婷久久欧美 | 人人妻人人澡人人爽精品欧美 | 国产午夜亚洲精品不卡下载 | 欧美自拍另类欧美综合图片区 | 亚洲熟妇色xxxxx欧美老妇y | 国精品人妻无码一区二区三区蜜柚 | 成熟妇人a片免费看网站 | 亚洲色欲色欲欲www在线 | 波多野结衣av在线观看 | 国产免费久久精品国产传媒 | 久久久久se色偷偷亚洲精品av | 亚洲人成网站免费播放 | 亚洲国产综合无码一区 | 女人被男人爽到呻吟的视频 | 在线 国产 欧美 亚洲 天堂 | 日日摸天天摸爽爽狠狠97 | 中文字幕乱码亚洲无线三区 | 婷婷综合久久中文字幕蜜桃三电影 | 又粗又大又硬毛片免费看 | 免费观看的无遮挡av | 一本大道久久东京热无码av | 日韩精品无码一本二本三本色 | 国产精品沙发午睡系列 | 曰韩无码二三区中文字幕 | 1000部啪啪未满十八勿入下载 | 俺去俺来也www色官网 | 国内精品久久久久久中文字幕 | 亚洲天堂2017无码 | 亚洲经典千人经典日产 | 激情国产av做激情国产爱 | 精品一二三区久久aaa片 | 少妇激情av一区二区 | aa片在线观看视频在线播放 | 国产乱人偷精品人妻a片 | 丝袜人妻一区二区三区 | 亚洲成a人片在线观看日本 | 丰满人妻翻云覆雨呻吟视频 | 久久亚洲精品成人无码 | 东京一本一道一二三区 | 色婷婷综合激情综在线播放 | 日韩人妻无码中文字幕视频 | 亚洲中文字幕在线无码一区二区 | 国产欧美熟妇另类久久久 | 天堂无码人妻精品一区二区三区 | 欧美国产亚洲日韩在线二区 | 一个人看的www免费视频在线观看 | 精品无人区无码乱码毛片国产 | 无码精品人妻一区二区三区av | 亚洲精品国产精品乱码不卡 | 青春草在线视频免费观看 | 久久午夜无码鲁丝片 | 久久国产精品精品国产色婷婷 | 国产午夜无码视频在线观看 | 99久久精品午夜一区二区 | 欧美自拍另类欧美综合图片区 | 亚洲精品成人福利网站 | 欧美35页视频在线观看 | 国产精品亚洲专区无码不卡 | 亲嘴扒胸摸屁股激烈网站 | 无码福利日韩神码福利片 | 2019午夜福利不卡片在线 | 人妻少妇精品无码专区二区 | 国产片av国语在线观看 | 亚洲人成网站色7799 | 国内丰满熟女出轨videos | 国产精品久久精品三级 | 中国大陆精品视频xxxx | 久久久婷婷五月亚洲97号色 | 亚洲综合无码一区二区三区 | 精品一区二区不卡无码av | 性做久久久久久久久 | 国产亚洲欧美日韩亚洲中文色 | 成人欧美一区二区三区黑人免费 | 日日摸日日碰夜夜爽av | 久久久久成人片免费观看蜜芽 | 日韩欧美中文字幕在线三区 | 日本精品久久久久中文字幕 | 漂亮人妻洗澡被公强 日日躁 | 欧美老妇与禽交 | 少妇人妻偷人精品无码视频 | 日本精品久久久久中文字幕 | 九九在线中文字幕无码 | 99久久精品午夜一区二区 | 99精品久久毛片a片 | 亚洲欧美综合区丁香五月小说 | 欧美变态另类xxxx | 在线亚洲高清揄拍自拍一品区 | 精品国产av色一区二区深夜久久 | 九九综合va免费看 | 成人综合网亚洲伊人 | 成人免费视频一区二区 | 欧美老熟妇乱xxxxx | 国产成人无码一二三区视频 | 久久精品99久久香蕉国产色戒 | 国产97人人超碰caoprom | 亚洲区小说区激情区图片区 | 中文字幕人妻丝袜二区 | 久久综合给合久久狠狠狠97色 | 东京无码熟妇人妻av在线网址 | 亚洲国产午夜精品理论片 | 免费观看激色视频网站 | 无码人妻久久一区二区三区不卡 | 国产艳妇av在线观看果冻传媒 | 乱人伦中文视频在线观看 | 天堂а√在线中文在线 | 国产精品久免费的黄网站 | 国内精品九九久久久精品 | 九九久久精品国产免费看小说 | 国产精品成人av在线观看 | 国产亚洲精品久久久ai换 | 欧美 丝袜 自拍 制服 另类 | 久久精品99久久香蕉国产色戒 | 国产成人精品优优av | 国产无遮挡又黄又爽又色 | 999久久久国产精品消防器材 | 人人澡人人透人人爽 | 日本一本二本三区免费 | 夫妻免费无码v看片 | 亚洲欧美综合区丁香五月小说 | 成 人影片 免费观看 | 亚洲午夜久久久影院 | 又大又硬又黄的免费视频 | 野外少妇愉情中文字幕 | 黑人大群体交免费视频 | 亚洲精品成a人在线观看 | 国产精华av午夜在线观看 | 免费无码av一区二区 | 国产精品毛多多水多 | 亚洲综合无码久久精品综合 | 宝宝好涨水快流出来免费视频 | 呦交小u女精品视频 | 国产精品欧美成人 | 男人扒开女人内裤强吻桶进去 | 天堂久久天堂av色综合 | 国精产品一品二品国精品69xx | 国产成人无码一二三区视频 | 国产三级精品三级男人的天堂 | 精品一区二区不卡无码av | 成人无码影片精品久久久 | 亚洲一区二区三区四区 | 东京一本一道一二三区 | 丝袜足控一区二区三区 | 欧美35页视频在线观看 | 亚洲自偷精品视频自拍 | 国产另类ts人妖一区二区 | 免费看男女做好爽好硬视频 | 亚洲乱亚洲乱妇50p | 又湿又紧又大又爽a视频国产 | 国产香蕉97碰碰久久人人 | 日韩人妻少妇一区二区三区 | 成人欧美一区二区三区 | 久久精品无码一区二区三区 | 亚洲一区二区三区 | 97精品国产97久久久久久免费 | 中文字幕av日韩精品一区二区 | 中文无码精品a∨在线观看不卡 | 久久99精品国产.久久久久 | 日本又色又爽又黄的a片18禁 | 日韩av无码中文无码电影 | 亚洲一区二区三区国产精华液 | 亚洲无人区午夜福利码高清完整版 | 亚洲欧美国产精品专区久久 | 中文字幕无码免费久久99 | 成人av无码一区二区三区 | 色欲综合久久中文字幕网 | 亚洲精品久久久久中文第一幕 | 激情五月综合色婷婷一区二区 | 鲁大师影院在线观看 | 久久这里只有精品视频9 | 亚洲精品鲁一鲁一区二区三区 | 欧美黑人巨大xxxxx | 日本精品少妇一区二区三区 | 国产小呦泬泬99精品 | 免费人成在线观看网站 | 天堂无码人妻精品一区二区三区 | 亚洲国产精品久久久天堂 | 欧美三级a做爰在线观看 | 日日天干夜夜狠狠爱 | 特黄特色大片免费播放器图片 | 国内精品人妻无码久久久影院 | 欧美真人作爱免费视频 | 欧美 丝袜 自拍 制服 另类 | 日日摸天天摸爽爽狠狠97 | 久久久久久久久蜜桃 | 欧美兽交xxxx×视频 | 无码吃奶揉捏奶头高潮视频 | 亚洲爆乳精品无码一区二区三区 | 久久综合网欧美色妞网 | 久久国产精品二国产精品 | 无码成人精品区在线观看 | 国产成人无码av一区二区 | 强辱丰满人妻hd中文字幕 | 亚洲成在人网站无码天堂 | 久久人人爽人人爽人人片av高清 | 亚洲s码欧洲m码国产av | 亚洲爆乳大丰满无码专区 | 日本大香伊一区二区三区 | 免费看男女做好爽好硬视频 | 国产精品免费大片 | 女人被男人躁得好爽免费视频 | 日日摸日日碰夜夜爽av | 精品成在人线av无码免费看 | 色一情一乱一伦一区二区三欧美 | 免费国产黄网站在线观看 | 国产乱码精品一品二品 | 色窝窝无码一区二区三区色欲 | 精品成人av一区二区三区 | 日本高清一区免费中文视频 | 在线看片无码永久免费视频 | 亚洲春色在线视频 | 中文字幕av无码一区二区三区电影 | 免费国产黄网站在线观看 | 国产无遮挡又黄又爽又色 | 国产美女精品一区二区三区 | 无遮挡啪啪摇乳动态图 | 欧美 亚洲 国产 另类 | 日日天干夜夜狠狠爱 | 领导边摸边吃奶边做爽在线观看 | 亚洲中文无码av永久不收费 | 天堂无码人妻精品一区二区三区 | 国模大胆一区二区三区 | 日本熟妇人妻xxxxx人hd | 18禁黄网站男男禁片免费观看 | 亚洲伊人久久精品影院 | 亚洲码国产精品高潮在线 | 国产精品无码一区二区三区不卡 | 亚洲国产高清在线观看视频 | а天堂中文在线官网 | 国产午夜视频在线观看 | 亚洲色偷偷偷综合网 | 俄罗斯老熟妇色xxxx | 亚洲综合色区中文字幕 | 日韩av无码中文无码电影 | 亚洲综合伊人久久大杳蕉 | 国产成人综合美国十次 | 欧美阿v高清资源不卡在线播放 | 亚洲小说图区综合在线 | 免费无码av一区二区 | 黑人巨大精品欧美一区二区 | 午夜无码区在线观看 | 国产人成高清在线视频99最全资源 | 精品熟女少妇av免费观看 | 国产精品视频免费播放 | 少妇太爽了在线观看 | 亚洲a无码综合a国产av中文 | 国产在线精品一区二区高清不卡 | 扒开双腿疯狂进出爽爽爽视频 | 国产农村妇女高潮大叫 | 精品久久久久久亚洲精品 | 成 人影片 免费观看 | 98国产精品综合一区二区三区 | 99国产精品白浆在线观看免费 | 国产欧美熟妇另类久久久 | 天天躁日日躁狠狠躁免费麻豆 | 女高中生第一次破苞av | 一个人看的www免费视频在线观看 | 在线播放亚洲第一字幕 | 久久综合色之久久综合 | 国产香蕉尹人综合在线观看 | 国产精品久久久久影院嫩草 | 国产亚洲精品久久久久久 | 精品一区二区不卡无码av | 亚洲日本va中文字幕 | 亚洲成a人一区二区三区 | 国产激情综合五月久久 | 国产亚洲tv在线观看 | 99精品久久毛片a片 | 国产精品亚洲五月天高清 | 午夜熟女插插xx免费视频 | 欧美国产日产一区二区 | 午夜精品久久久内射近拍高清 | 亚洲精品国产a久久久久久 | 女人被爽到呻吟gif动态图视看 | 国产 浪潮av性色四虎 | 激情国产av做激情国产爱 | 久久精品女人天堂av免费观看 | 牛和人交xxxx欧美 | 久久精品中文字幕一区 | 中文亚洲成a人片在线观看 | 精品厕所偷拍各类美女tp嘘嘘 | 国产亚洲人成在线播放 | 午夜免费福利小电影 | 乱人伦人妻中文字幕无码久久网 | 日日碰狠狠丁香久燥 | 午夜精品久久久内射近拍高清 | 国产尤物精品视频 | 中文字幕乱码亚洲无线三区 | 在线成人www免费观看视频 | 疯狂三人交性欧美 | 亚洲欧美精品aaaaaa片 | 久久久久久av无码免费看大片 | 久久久久久a亚洲欧洲av冫 | 人人爽人人澡人人高潮 | 国产后入清纯学生妹 | 色一情一乱一伦一视频免费看 | 国产无av码在线观看 | 黑人粗大猛烈进出高潮视频 | 亚洲爆乳无码专区 | 欧美日韩在线亚洲综合国产人 | 天天做天天爱天天爽综合网 | 亚洲午夜福利在线观看 | 精品无人区无码乱码毛片国产 | 少妇厨房愉情理9仑片视频 | 亚洲精品久久久久中文第一幕 | 西西人体www44rt大胆高清 | 久久久久久国产精品无码下载 | 丝袜美腿亚洲一区二区 | 熟妇激情内射com | 精品偷自拍另类在线观看 | 国内精品一区二区三区不卡 | 67194成是人免费无码 | 亚洲精品国偷拍自产在线观看蜜桃 | 一本大道久久东京热无码av | 天堂а√在线地址中文在线 | 久久人人爽人人人人片 | 天天爽夜夜爽夜夜爽 | 丰满妇女强制高潮18xxxx | 亚洲一区二区三区四区 | 人人妻人人澡人人爽欧美一区九九 | 亚洲gv猛男gv无码男同 | 亚洲日韩乱码中文无码蜜桃臀网站 | 久久精品无码一区二区三区 | 狠狠色噜噜狠狠狠7777奇米 | 无码国产激情在线观看 | 久久综合久久自在自线精品自 | 性生交大片免费看女人按摩摩 | 377p欧洲日本亚洲大胆 | 色窝窝无码一区二区三区色欲 | 精品乱码久久久久久久 | 牲欲强的熟妇农村老妇女 | 丰满少妇弄高潮了www | 午夜熟女插插xx免费视频 | 国内精品一区二区三区不卡 | 久久久精品国产sm最大网站 | 久久伊人色av天堂九九小黄鸭 | 亚洲精品一区二区三区四区五区 | 成 人 免费观看网站 | 老太婆性杂交欧美肥老太 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 国产精品二区一区二区aⅴ污介绍 | 波多野结衣av一区二区全免费观看 | 成熟女人特级毛片www免费 | 天堂亚洲2017在线观看 | 国产成人人人97超碰超爽8 | 久久综合九色综合欧美狠狠 | 中文字幕乱码中文乱码51精品 | 亚洲精品成人福利网站 | 亚洲国产精华液网站w | 99久久精品日本一区二区免费 | 草草网站影院白丝内射 | 日产精品99久久久久久 | 麻豆精品国产精华精华液好用吗 | 天堂一区人妻无码 | 国内精品久久久久久中文字幕 | 久久zyz资源站无码中文动漫 | 内射爽无广熟女亚洲 | 国产午夜福利亚洲第一 | 牲欲强的熟妇农村老妇女 | 国产成人亚洲综合无码 | 无码人妻丰满熟妇区五十路百度 | 日韩精品无码一区二区中文字幕 | 精品成在人线av无码免费看 | 97精品国产97久久久久久免费 | 免费看男女做好爽好硬视频 | 国产精品毛多多水多 | 久久亚洲国产成人精品性色 | 漂亮人妻洗澡被公强 日日躁 | 男女作爱免费网站 | 精品日本一区二区三区在线观看 | 老熟妇乱子伦牲交视频 | 久久综合给合久久狠狠狠97色 | 成人女人看片免费视频放人 | 全黄性性激高免费视频 | 欧美怡红院免费全部视频 | 午夜福利一区二区三区在线观看 | 久久久久亚洲精品男人的天堂 | 国产麻豆精品一区二区三区v视界 | 成人免费无码大片a毛片 | 久久精品中文字幕一区 | 久久久久免费看成人影片 | 国产精品对白交换视频 | 久久精品99久久香蕉国产色戒 | 日韩人妻少妇一区二区三区 | 色一情一乱一伦一视频免费看 | 成人无码精品一区二区三区 | 欧美xxxx黑人又粗又长 | 俄罗斯老熟妇色xxxx | 国产真实乱对白精彩久久 | 亚洲人成网站色7799 | 一本大道久久东京热无码av | 亚洲va中文字幕无码久久不卡 | 欧美性猛交内射兽交老熟妇 | 国产av人人夜夜澡人人爽麻豆 | 午夜成人1000部免费视频 | 久久久中文字幕日本无吗 | 中文字幕色婷婷在线视频 | 国产成人无码区免费内射一片色欲 | 性生交大片免费看女人按摩摩 | 国内精品久久毛片一区二区 | 成人无码视频在线观看网站 | 精品国产青草久久久久福利 | 久久精品女人天堂av免费观看 | 天堂亚洲免费视频 | 永久免费精品精品永久-夜色 | 丰满人妻被黑人猛烈进入 | 377p欧洲日本亚洲大胆 | 牲欲强的熟妇农村老妇女 | 大地资源网第二页免费观看 | 超碰97人人射妻 | 伊人久久大香线焦av综合影院 | 国产精品久久久久影院嫩草 | 国产乱人伦av在线无码 | 亚洲综合无码久久精品综合 | 一本色道久久综合亚洲精品不卡 | 99久久人妻精品免费二区 | 欧美日韩人成综合在线播放 | 人妻夜夜爽天天爽三区 | 丰满肥臀大屁股熟妇激情视频 | 又大又黄又粗又爽的免费视频 | 久久国产精品_国产精品 | 人妻少妇精品视频专区 | 成熟妇人a片免费看网站 | 久久久av男人的天堂 | 鲁一鲁av2019在线 | 亚洲欧美日韩综合久久久 | 人人妻人人澡人人爽欧美一区九九 | 亚洲国产综合无码一区 | 在线精品亚洲一区二区 | 色综合久久久无码中文字幕 | 丁香啪啪综合成人亚洲 | 久久综合九色综合97网 | 精品无码av一区二区三区 | 国产手机在线αⅴ片无码观看 | 一二三四社区在线中文视频 | 国产在线精品一区二区三区直播 | 久久久无码中文字幕久... | 国产特级毛片aaaaaa高潮流水 | 未满成年国产在线观看 | 俄罗斯老熟妇色xxxx | 日日摸夜夜摸狠狠摸婷婷 | 55夜色66夜色国产精品视频 | 亚洲伊人久久精品影院 | 国产美女极度色诱视频www | 中文字幕久久久久人妻 | 国产色xx群视频射精 | 国产亚洲日韩欧美另类第八页 | 国产又爽又猛又粗的视频a片 | 色 综合 欧美 亚洲 国产 | 中文字幕无码免费久久99 | 日本一卡2卡3卡四卡精品网站 | 久久成人a毛片免费观看网站 | av无码久久久久不卡免费网站 | 福利一区二区三区视频在线观看 | 成人aaa片一区国产精品 | 一二三四社区在线中文视频 | 日韩亚洲欧美精品综合 | 亚洲无人区午夜福利码高清完整版 | 偷窥村妇洗澡毛毛多 | 色综合久久久无码网中文 | 国产精品美女久久久久av爽李琼 | 国产亚洲精品久久久久久国模美 | 成人免费无码大片a毛片 | 国产亚洲人成在线播放 | 图片小说视频一区二区 | 一本大道久久东京热无码av | 日本乱偷人妻中文字幕 | 久久久久99精品成人片 | 欧美成人高清在线播放 | 国产免费无码一区二区视频 | 少妇性l交大片 | 女人和拘做爰正片视频 | 日本饥渴人妻欲求不满 | 久久久国产一区二区三区 | 精品国产一区av天美传媒 | 国产精品久久久av久久久 | 欧美freesex黑人又粗又大 | 清纯唯美经典一区二区 | 玩弄人妻少妇500系列视频 | 国产69精品久久久久app下载 | 亚洲国产综合无码一区 | 无码国模国产在线观看 | 在线亚洲高清揄拍自拍一品区 | 成人无码视频在线观看网站 | 久久国语露脸国产精品电影 | 男人和女人高潮免费网站 | 性欧美熟妇videofreesex | 欧美丰满老熟妇xxxxx性 | 亚洲日韩乱码中文无码蜜桃臀网站 | 狠狠亚洲超碰狼人久久 | 久久久久久a亚洲欧洲av冫 | 亚洲色偷偷偷综合网 | 久久99精品久久久久久动态图 | 97久久国产亚洲精品超碰热 | 高清国产亚洲精品自在久久 | 国产精品a成v人在线播放 | 精品人妻人人做人人爽 | 日产精品99久久久久久 | 亚洲中文字幕va福利 | 一个人免费观看的www视频 | 亚洲人成影院在线观看 | 国产av剧情md精品麻豆 | 97久久国产亚洲精品超碰热 | 老熟女乱子伦 | 麻豆蜜桃av蜜臀av色欲av | 午夜理论片yy44880影院 | 欧美日韩在线亚洲综合国产人 | 狠狠色噜噜狠狠狠7777奇米 | 亚洲综合无码久久精品综合 | 日本欧美一区二区三区乱码 | 久久精品人妻少妇一区二区三区 | 国产成人一区二区三区在线观看 | 成年美女黄网站色大免费全看 | 欧美freesex黑人又粗又大 | 丰满妇女强制高潮18xxxx | 久久亚洲国产成人精品性色 | 亚洲综合伊人久久大杳蕉 | 午夜精品久久久久久久 | 久久人妻内射无码一区三区 | 人人妻人人藻人人爽欧美一区 | 亚洲熟妇色xxxxx欧美老妇 | 日韩视频 中文字幕 视频一区 | 99精品国产综合久久久久五月天 | 色婷婷欧美在线播放内射 | 成 人 免费观看网站 | 欧美成人午夜精品久久久 | 亚洲人成人无码网www国产 | av无码久久久久不卡免费网站 | 欧美性生交xxxxx久久久 | 欧美精品免费观看二区 | 国产激情艳情在线看视频 | 玩弄中年熟妇正在播放 | 又大又黄又粗又爽的免费视频 | 天天躁夜夜躁狠狠是什么心态 | 欧美兽交xxxx×视频 | 少妇太爽了在线观看 | 香蕉久久久久久av成人 | 久久久久久久久蜜桃 | 好屌草这里只有精品 | 欧美熟妇另类久久久久久不卡 | 少女韩国电视剧在线观看完整 | 无码人妻黑人中文字幕 | 欧美丰满熟妇xxxx性ppx人交 | 少妇无码av无码专区在线观看 | 国产av一区二区精品久久凹凸 | 国产极品美女高潮无套在线观看 | 天堂无码人妻精品一区二区三区 | 国内精品九九久久久精品 | 夜精品a片一区二区三区无码白浆 | 国产又爽又猛又粗的视频a片 | 色诱久久久久综合网ywww | 国产精品无套呻吟在线 | av无码电影一区二区三区 | 丝袜人妻一区二区三区 | 男女下面进入的视频免费午夜 | 人人妻人人澡人人爽欧美一区 | 精品夜夜澡人妻无码av蜜桃 | 日韩人妻少妇一区二区三区 | 色综合久久中文娱乐网 | 东京无码熟妇人妻av在线网址 | 精品aⅴ一区二区三区 | 人人超人人超碰超国产 | 中文字幕无码热在线视频 | 亚洲精品综合五月久久小说 | 亚洲国产成人a精品不卡在线 | 国产激情一区二区三区 | 欧美丰满老熟妇xxxxx性 | 久久精品无码一区二区三区 | aa片在线观看视频在线播放 | 女高中生第一次破苞av | 荫蒂添的好舒服视频囗交 | 亚洲国产成人a精品不卡在线 | 亚洲の无码国产の无码影院 | 国内精品一区二区三区不卡 | 一个人看的www免费视频在线观看 | 高潮毛片无遮挡高清免费视频 | 国产成人无码区免费内射一片色欲 | 正在播放老肥熟妇露脸 | 丰满人妻被黑人猛烈进入 | 无码精品人妻一区二区三区av | 嫩b人妻精品一区二区三区 | 日韩精品无码免费一区二区三区 | 伊人久久大香线焦av综合影院 | 我要看www免费看插插视频 | 自拍偷自拍亚洲精品10p | 黑人粗大猛烈进出高潮视频 | 久久99精品久久久久久动态图 | 欧美怡红院免费全部视频 | 76少妇精品导航 | 国产97人人超碰caoprom | 国产热a欧美热a在线视频 | 激情爆乳一区二区三区 | 国产一精品一av一免费 | 中文无码伦av中文字幕 | 欧美亚洲日韩国产人成在线播放 | 亚洲色欲色欲欲www在线 | 国产在线无码精品电影网 | 欧美精品一区二区精品久久 | 色婷婷久久一区二区三区麻豆 | 亚洲精品国偷拍自产在线麻豆 | 天天综合网天天综合色 | 无码av岛国片在线播放 | 日韩av无码一区二区三区不卡 | 日日碰狠狠躁久久躁蜜桃 | 丰满人妻一区二区三区免费视频 | 欧美人与善在线com | 国产女主播喷水视频在线观看 | 精品国产国产综合精品 | 荡女精品导航 | 欧美日韩视频无码一区二区三 | 欧美成人免费全部网站 | 成人无码影片精品久久久 | 精品亚洲韩国一区二区三区 | 好屌草这里只有精品 | 久久99精品久久久久婷婷 | 日本一区二区三区免费高清 | 黑森林福利视频导航 | 久久久中文字幕日本无吗 | 亚洲国产av精品一区二区蜜芽 | 无码av岛国片在线播放 | 无码精品国产va在线观看dvd | 偷窥村妇洗澡毛毛多 | 中文字幕无码免费久久99 | 精品久久久久久人妻无码中文字幕 | 精品国产福利一区二区 | 久久97精品久久久久久久不卡 | 76少妇精品导航 | 影音先锋中文字幕无码 | 又大又硬又黄的免费视频 | 青春草在线视频免费观看 | 久久伊人色av天堂九九小黄鸭 | 成人欧美一区二区三区 | 欧美性黑人极品hd | 亚洲va中文字幕无码久久不卡 | 欧美成人午夜精品久久久 | www国产亚洲精品久久久日本 | 少妇人妻偷人精品无码视频 | 免费无码av一区二区 | www一区二区www免费 | 台湾无码一区二区 | 黑人大群体交免费视频 | 一本一道久久综合久久 | 日本大乳高潮视频在线观看 | 黑人大群体交免费视频 | 久久综合给久久狠狠97色 | 一本久久a久久精品vr综合 | 纯爱无遮挡h肉动漫在线播放 | a片在线免费观看 | 曰本女人与公拘交酡免费视频 | 久久99精品国产麻豆蜜芽 | 日产国产精品亚洲系列 | 成熟人妻av无码专区 | 亚欧洲精品在线视频免费观看 | 国产日产欧产精品精品app | 国产精品高潮呻吟av久久4虎 | 香港三级日本三级妇三级 | 成人性做爰aaa片免费看 | 国产精品香蕉在线观看 | 麻豆成人精品国产免费 | 久久久av男人的天堂 | 成人片黄网站色大片免费观看 | 中文字幕 亚洲精品 第1页 | 欧美日韩久久久精品a片 | 日韩av无码一区二区三区不卡 | 麻豆国产人妻欲求不满谁演的 | 国产精品久久久久9999小说 | 亚洲 a v无 码免 费 成 人 a v | 亚洲 高清 成人 动漫 | 亚洲熟悉妇女xxx妇女av | 国产精品无码成人午夜电影 | 无码国产色欲xxxxx视频 | 娇妻被黑人粗大高潮白浆 | 免费国产黄网站在线观看 | 国产在热线精品视频 | 无码人妻少妇伦在线电影 | 男女作爱免费网站 | 婷婷五月综合缴情在线视频 | 国产做国产爱免费视频 | 中文字幕日产无线码一区 | 成人片黄网站色大片免费观看 | 国产一区二区不卡老阿姨 | 日本一区二区三区免费播放 | 精品厕所偷拍各类美女tp嘘嘘 | 精品国产麻豆免费人成网站 | 日本xxxx色视频在线观看免费 | 欧美变态另类xxxx | 免费人成在线观看网站 | 国产香蕉尹人综合在线观看 | 精品 日韩 国产 欧美 视频 | 疯狂三人交性欧美 | 亚洲精品国产精品乱码视色 | 乌克兰少妇xxxx做受 | 久久久久人妻一区精品色欧美 | 青青久在线视频免费观看 | 国产小呦泬泬99精品 | 露脸叫床粗话东北少妇 | 无码av最新清无码专区吞精 | 无码免费一区二区三区 | 日韩亚洲欧美中文高清在线 | 成 人 网 站国产免费观看 | 亚洲一区二区观看播放 | 久久久婷婷五月亚洲97号色 | 四虎永久在线精品免费网址 | 国产亚洲人成在线播放 | 国产av久久久久精东av | 亚洲欧美国产精品久久 | 人妻少妇被猛烈进入中文字幕 | 无码精品人妻一区二区三区av | 牛和人交xxxx欧美 | 亚洲va中文字幕无码久久不卡 | 性做久久久久久久免费看 | 99久久精品日本一区二区免费 | 少妇太爽了在线观看 | 又大又硬又黄的免费视频 | 久久99精品久久久久婷婷 | 2020久久香蕉国产线看观看 | 国产在线精品一区二区三区直播 | 无人区乱码一区二区三区 | 人妻中文无码久热丝袜 | 性史性农村dvd毛片 | 亚洲欧美国产精品久久 | 精品人妻av区 | 国产肉丝袜在线观看 | 55夜色66夜色国产精品视频 | 国产国语老龄妇女a片 | 亚洲中文字幕无码一久久区 | 久久国内精品自在自线 | 亚洲国产高清在线观看视频 | 老司机亚洲精品影院 | 天堂无码人妻精品一区二区三区 | 久热国产vs视频在线观看 | 欧美国产亚洲日韩在线二区 | 亚洲欧美日韩成人高清在线一区 | 亚洲人成影院在线观看 | 蜜桃臀无码内射一区二区三区 | 欧美日韩亚洲国产精品 | www国产亚洲精品久久网站 | 久久午夜夜伦鲁鲁片无码免费 | 国产精品久久久久久亚洲毛片 | 欧美大屁股xxxxhd黑色 | 国产亲子乱弄免费视频 | 欧美激情一区二区三区成人 | 亚洲欧美日韩国产精品一区二区 | 日日摸夜夜摸狠狠摸婷婷 | 欧美人与动性行为视频 | 夜夜影院未满十八勿进 | 免费男性肉肉影院 | 女人和拘做爰正片视频 | 午夜免费福利小电影 | 欧美成人家庭影院 | 欧美精品无码一区二区三区 | 88国产精品欧美一区二区三区 | 欧美性猛交内射兽交老熟妇 | 宝宝好涨水快流出来免费视频 | 狠狠噜狠狠狠狠丁香五月 | 久久97精品久久久久久久不卡 | 2020久久香蕉国产线看观看 | 国产人妻大战黑人第1集 | 精品无码国产自产拍在线观看蜜 | 精品无码成人片一区二区98 | 亚洲啪av永久无码精品放毛片 | 久久久久99精品成人片 | 欧美人与善在线com | 国产无遮挡又黄又爽又色 | 55夜色66夜色国产精品视频 | 国产卡一卡二卡三 | 无码一区二区三区在线 | 国产一区二区三区精品视频 | 成人欧美一区二区三区黑人 | 亚洲成av人片天堂网无码】 | 国产精品永久免费视频 | 精品乱子伦一区二区三区 | 久久精品国产一区二区三区 | 蜜臀av在线播放 久久综合激激的五月天 | 国产亚洲精品久久久久久大师 | 疯狂三人交性欧美 | 无码人妻丰满熟妇区毛片18 | 国产激情综合五月久久 | 欧美丰满熟妇xxxx性ppx人交 | 亚洲精品国产精品乱码视色 | 又大又紧又粉嫩18p少妇 | 国产亚洲精品久久久久久国模美 | 中文字幕人妻无码一区二区三区 | 人妻尝试又大又粗久久 | 国产亚洲精品久久久久久国模美 | 精品人妻人人做人人爽夜夜爽 | 国产综合在线观看 | 漂亮人妻洗澡被公强 日日躁 | 日本va欧美va欧美va精品 | 荫蒂被男人添的好舒服爽免费视频 | 人人超人人超碰超国产 | 日日摸日日碰夜夜爽av | 欧美日韩一区二区综合 | 国产熟女一区二区三区四区五区 | 在线а√天堂中文官网 | 图片区 小说区 区 亚洲五月 | 天天拍夜夜添久久精品 | 性做久久久久久久免费看 | 国产精品久久精品三级 | 天天燥日日燥 | 波多野结衣高清一区二区三区 | 日日天干夜夜狠狠爱 | 亚洲中文字幕无码中字 | 国产又爽又猛又粗的视频a片 | 成人综合网亚洲伊人 | 日日噜噜噜噜夜夜爽亚洲精品 | 欧美日韩在线亚洲综合国产人 | 婷婷六月久久综合丁香 | 亚洲中文字幕av在天堂 | 性啪啪chinese东北女人 | 77777熟女视频在线观看 а天堂中文在线官网 | 网友自拍区视频精品 | 国产色视频一区二区三区 | av无码不卡在线观看免费 | 国产精品内射视频免费 | 亚洲精品国产a久久久久久 | 曰本女人与公拘交酡免费视频 | 少妇性俱乐部纵欲狂欢电影 | 亚洲伊人久久精品影院 | 中文字幕av无码一区二区三区电影 | 性啪啪chinese东北女人 | 国产人妻精品一区二区三区不卡 | 久久精品国产日本波多野结衣 | 最近免费中文字幕中文高清百度 | 狠狠噜狠狠狠狠丁香五月 | 男人扒开女人内裤强吻桶进去 | 日本大乳高潮视频在线观看 | 捆绑白丝粉色jk震动捧喷白浆 | 亚洲第一无码av无码专区 | 久久这里只有精品视频9 | 亚洲精品一区三区三区在线观看 | 国色天香社区在线视频 | 无码人妻精品一区二区三区不卡 | 丰满护士巨好爽好大乳 | 久激情内射婷内射蜜桃人妖 | 精品无码国产自产拍在线观看蜜 | 性色欲情网站iwww九文堂 | 激情人妻另类人妻伦 | 国内揄拍国内精品少妇国语 | 久久精品成人欧美大片 | 日欧一片内射va在线影院 | av香港经典三级级 在线 | 亚洲综合色区中文字幕 | 无码精品人妻一区二区三区av | 久久久久久久女国产乱让韩 | 久久久国产精品无码免费专区 | 黄网在线观看免费网站 | 成 人影片 免费观看 | 亚洲人交乣女bbw | 男女爱爱好爽视频免费看 | 青草视频在线播放 | 免费国产黄网站在线观看 | 日日躁夜夜躁狠狠躁 | 国精品人妻无码一区二区三区蜜柚 | aⅴ亚洲 日韩 色 图网站 播放 | 国产激情艳情在线看视频 | 久久人人爽人人爽人人片av高清 | 风流少妇按摩来高潮 | 国产成人精品久久亚洲高清不卡 | 高清不卡一区二区三区 | 两性色午夜视频免费播放 | 鲁一鲁av2019在线 | 国产av久久久久精东av | 国产成人精品三级麻豆 | 亚洲 另类 在线 欧美 制服 | 中文字幕av日韩精品一区二区 | 5858s亚洲色大成网站www | 欧美精品无码一区二区三区 | 国产绳艺sm调教室论坛 | 日本肉体xxxx裸交 | 在线成人www免费观看视频 | 无套内谢的新婚少妇国语播放 | 日日鲁鲁鲁夜夜爽爽狠狠 | 丰满肥臀大屁股熟妇激情视频 | 久久国产自偷自偷免费一区调 | 亚洲一区二区三区国产精华液 | 97久久超碰中文字幕 | 国内精品人妻无码久久久影院 | aⅴ在线视频男人的天堂 | 久久久久av无码免费网 | 亚洲 激情 小说 另类 欧美 | 国产无遮挡又黄又爽又色 | 欧洲精品码一区二区三区免费看 | 欧美一区二区三区视频在线观看 | 中文亚洲成a人片在线观看 | 久久久精品国产sm最大网站 | 丁香花在线影院观看在线播放 | 欧美成人免费全部网站 | 欧美日韩一区二区三区自拍 | 精品一区二区三区无码免费视频 | 欧美一区二区三区视频在线观看 | 成人精品视频一区二区 | 亚洲精品成a人在线观看 | 久久久久久国产精品无码下载 | 国产小呦泬泬99精品 | av在线亚洲欧洲日产一区二区 | 2019午夜福利不卡片在线 | 久久无码专区国产精品s | 国产激情综合五月久久 | 日韩精品a片一区二区三区妖精 | 国产成人综合在线女婷五月99播放 | ass日本丰满熟妇pics | 熟女俱乐部五十路六十路av | 人妻少妇精品视频专区 | 国产又粗又硬又大爽黄老大爷视 | 无码人妻av免费一区二区三区 | 色婷婷综合激情综在线播放 | 强伦人妻一区二区三区视频18 | 国产亚洲人成在线播放 | 亚洲s码欧洲m码国产av | 男人的天堂2018无码 | 精品国产aⅴ无码一区二区 | 亚洲色www成人永久网址 | 人妻少妇精品视频专区 | 亚洲精品无码国产 | 久久zyz资源站无码中文动漫 | 欧美猛少妇色xxxxx | 成年美女黄网站色大免费视频 | 99精品国产综合久久久久五月天 | 久久精品国产大片免费观看 | 狂野欧美激情性xxxx | 亚洲狠狠色丁香婷婷综合 | 成人女人看片免费视频放人 | 久久天天躁夜夜躁狠狠 | 无码人妻精品一区二区三区不卡 | 久久精品人人做人人综合 | 激情人妻另类人妻伦 | 亚洲精品综合一区二区三区在线 | 欧美日韩一区二区免费视频 | 国产无av码在线观看 | 蜜臀av在线播放 久久综合激激的五月天 | 大乳丰满人妻中文字幕日本 | 日本熟妇浓毛 | 免费无码av一区二区 | 夜精品a片一区二区三区无码白浆 | 国产熟女一区二区三区四区五区 | 国产精品久久精品三级 | 少妇性荡欲午夜性开放视频剧场 | 亚洲精品国产品国语在线观看 | 亚洲无人区一区二区三区 | 久久99精品久久久久久 | www国产亚洲精品久久久日本 | 久精品国产欧美亚洲色aⅴ大片 | 亚洲精品中文字幕久久久久 | 极品尤物被啪到呻吟喷水 | 老头边吃奶边弄进去呻吟 | 国产高潮视频在线观看 | 蜜桃av抽搐高潮一区二区 | 77777熟女视频在线观看 а天堂中文在线官网 | 久热国产vs视频在线观看 | 波多野结衣av在线观看 | 亚洲日韩av片在线观看 | 久久久久成人片免费观看蜜芽 | 国产亚av手机在线观看 | 久久久久久久女国产乱让韩 | 国产av剧情md精品麻豆 | 国产午夜无码精品免费看 | 蜜桃av抽搐高潮一区二区 | 国产色精品久久人妻 | 免费乱码人妻系列无码专区 | 亚洲 日韩 欧美 成人 在线观看 | 国产成人综合美国十次 | 日本熟妇人妻xxxxx人hd | 强开小婷嫩苞又嫩又紧视频 | 久久精品国产精品国产精品污 | 亚洲乱码国产乱码精品精 | 初尝人妻少妇中文字幕 | 国产三级精品三级男人的天堂 | 丝袜 中出 制服 人妻 美腿 | 精品国产aⅴ无码一区二区 | 成人亚洲精品久久久久 | 久久久久se色偷偷亚洲精品av | 国产9 9在线 | 中文 | 牲欲强的熟妇农村老妇女 | 亚洲一区av无码专区在线观看 | 丰满人妻被黑人猛烈进入 | 高潮毛片无遮挡高清免费视频 | 波多野结衣av在线观看 | 麻豆国产人妻欲求不满 | 无码人妻黑人中文字幕 | 国产熟女一区二区三区四区五区 | 天天摸天天碰天天添 | 国产莉萝无码av在线播放 | 国产午夜手机精彩视频 | 久久无码专区国产精品s | 人妻天天爽夜夜爽一区二区 | 青草青草久热国产精品 | 亚洲va欧美va天堂v国产综合 | 377p欧洲日本亚洲大胆 | 久久久精品欧美一区二区免费 | 国产口爆吞精在线视频 | 午夜无码区在线观看 | 少妇无码吹潮 | 思思久久99热只有频精品66 | 国产成人精品三级麻豆 | 亚洲中文字幕成人无码 | 鲁鲁鲁爽爽爽在线视频观看 | 亚洲精品中文字幕乱码 | 亚洲精品一区二区三区四区五区 | 综合网日日天干夜夜久久 | 亚洲国产精品毛片av不卡在线 | 久久久久久亚洲精品a片成人 | 亚洲国精产品一二二线 | 国语精品一区二区三区 | 亚洲欧美日韩国产精品一区二区 | 又大又紧又粉嫩18p少妇 | 人妻aⅴ无码一区二区三区 | 久久久久久久人妻无码中文字幕爆 | 久久久久久a亚洲欧洲av冫 | 在线观看免费人成视频 | 最近中文2019字幕第二页 | 丰满诱人的人妻3 | 黄网在线观看免费网站 | 男女爱爱好爽视频免费看 | 婷婷五月综合激情中文字幕 | 国产精品久久久久9999小说 | 成人欧美一区二区三区黑人免费 | 国模大胆一区二区三区 | 中文字幕av伊人av无码av | 国产精品自产拍在线观看 | 亚洲の无码国产の无码影院 | 人人爽人人澡人人高潮 | 波多野结衣aⅴ在线 | 老司机亚洲精品影院无码 | 图片区 小说区 区 亚洲五月 | 狂野欧美激情性xxxx | 欧美35页视频在线观看 | 国内老熟妇对白xxxxhd | 成人毛片一区二区 | 97色伦图片97综合影院 | 精品久久久无码人妻字幂 | 色婷婷av一区二区三区之红樱桃 | 5858s亚洲色大成网站www | 成人无码影片精品久久久 | 久久国语露脸国产精品电影 | 国内精品一区二区三区不卡 | 亚洲精品一区二区三区大桥未久 | 思思久久99热只有频精品66 | 扒开双腿吃奶呻吟做受视频 | 鲁鲁鲁爽爽爽在线视频观看 | 久久久中文久久久无码 | 欧美喷潮久久久xxxxx | 亚洲精品www久久久 | 三上悠亚人妻中文字幕在线 | 欧美肥老太牲交大战 | 自拍偷自拍亚洲精品被多人伦好爽 | 成人aaa片一区国产精品 | 亚洲爆乳无码专区 | 欧美日本精品一区二区三区 | 日本免费一区二区三区最新 | 少妇高潮一区二区三区99 | 人人澡人摸人人添 | 久久久国产一区二区三区 | 日本又色又爽又黄的a片18禁 | 久久国产36精品色熟妇 | 亚洲欧美日韩成人高清在线一区 |