亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

テキスト

概述

中間件功能是可以訪問請求對象(req),響應對象(res)以及next應用程序請求 - 響應周期中的函數(shù)。該next功能是Express路由器中的一項功能,當被調(diào)用時,該功能執(zhí)行當前中間件之后的中間件。

中間件功能可以執(zhí)行以下任務:

  • 執(zhí)行任何代碼。

  • 對請求和響應對象進行更改。

  • 結(jié)束請求 - 響應循環(huán)。

  • 調(diào)用堆棧中的下一個中間件。

如果當前的中間件功能沒有結(jié)束請求 - 響應周期,則它必須調(diào)用next()以將控制傳遞給下一個中間件功能。否則,請求將被掛起。

下圖顯示了中間件函數(shù)調(diào)用的元素:


適用中間件功能的HTTP方法。中間件功能適用的路徑(路由)。中間件功能。中間件功能的回調(diào)參數(shù),按照慣例稱為“下一個”。對中間件功能的HTTP響應參數(shù),按照慣例稱為“res”。中間件功能的HTTP請求參數(shù),按慣例稱為“req”。

這是一個簡單的“Hello World”表達應用程序的例子。本文的其余部分將定義并向應用程序添加兩個中間件功能:一個調(diào)用myLogger打印簡單的日志消息,另一個調(diào)用requestTime顯示HTTP請求的時間戳。

var express = require('express')var app = express()app.get('/', function (req, res) {
  res.send('Hello World!')})app.listen(3000)

中間件功能myLogger

這是一個稱為“myLogger”的中間件功能的簡單示例。這個函數(shù)只是在對應用程序的請求通過時打印“LOGGED”。中間件功能被分配給一個名為的變量myLogger。

var myLogger = function (req, res, next) {
  console.log('LOGGED')  next()}

注意上面的呼叫next()。調(diào)用這個函數(shù)會調(diào)用應用程序中的下一個中間件功能。該next()函數(shù)不是Node.js或Express API的一部分,而是傳遞給中間件功能的第三個參數(shù)。該next()函數(shù)可以被命名為任何東西,但按照慣例,它總是被命名為“下一個”。為避免混淆,請始終使用此約定。

要加載中間件功能,請調(diào)用app.use(),指定中間件功能。例如,以下代碼會在myLogger到根路徑(/)的路由之前加載中間件功能。

var express = require('express')var app = express()var myLogger = function (req, res, next) {
  console.log('LOGGED')  next()}app.use(myLogger)app.get('/', function (req, res) {
  res.send('Hello World!')})app.listen(3000)

每次應用收到請求時,它都會向終端輸出“LOGGED”消息。

中間件加載順序非常重要:首先加載的中間件功能也首先執(zhí)行。

如果myLogger在到根路徑的路由之后加載,請求將永遠達不到它,并且應用程序不會打印“LOGGED”,因為根路徑的路由處理程序會終止請求 - 響應循環(huán)。

中間件功能myLogger僅打印消息,然后通過調(diào)用該next()函數(shù)將請求傳遞到堆棧中的下一個中間件功能。

中間件功能requestTime

接下來,我們將創(chuàng)建一個名為“requestTime”的中間件函數(shù),并將其添加為調(diào)用requestTime請求對象的屬性。

var requestTime = function (req, res, next) {
  req.requestTime = Date.now()  next()}

應用程序現(xiàn)在使用requestTime中間件功能。此外,根路徑路由的回調(diào)函數(shù)使用中間件功能添加到的屬性req(請求對象)。

var express = require('express')var app = express()var requestTime = function (req, res, next) {
  req.requestTime = Date.now()  next()}app.use(requestTime)app.get('/', function (req, res) {  var responseText = 'Hello World!<br>'
  responseText += '<small>Requested at: ' + req.requestTime + '</small>'
  res.send(responseText)})app.listen(3000)

當您向應用程序的根目錄發(fā)出請求時,應用程序現(xiàn)在會在瀏覽器中顯示請求的時間戳。

因為您可以訪問請求對象,響應對象,堆棧中的下一個中間件功能以及整個Node.js API,所以使用中間件功能的可能性是無限的。

有關(guān)Express中間件的更多信息,請參閱:使用Express中間件。

可配置的中間件

如果您需要中間件可配置,則導出一個接受選項對象或其他參數(shù)的函數(shù),然后根據(jù)輸入?yún)?shù)返回中間件實現(xiàn)。

File: my-middleware.js

module.exports = function(options) {  
    return function(req, res, next) {    
    // Implement the middleware function based on the options object    next()  }
    }

現(xiàn)在可以使用中間件,如下所示。

var mw = require('./my-middleware.js')app.use(mw({ option1: '1', option2: '2' }))
前の記事: 次の記事: