国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
什麼是 Next.js 中間件?
Next.js 中介軟體處理順序
常見的 Next.js 中間件用例
在 Next.js 專案中使用中間件
中介軟體功能
匹配器
組合多個中間件功能
Clerk 和 Next.js 中間件
Next.js 中間件的限制
結(jié)論
首頁 web前端 js教程 Next.js 中的中間件是什麼

Next.js 中的中間件是什麼

Jan 17, 2025 am 02:29 AM

What is middleware in Next.js

Next.js 中間件為應(yīng)用程式中的請求處理提供強大的自訂功能。 它允許攔截請求以執(zhí)行會話驗證、日誌記錄和快取等操作。然而,低效率的中間件實施會嚴重影響效能。本指南闡明了中間件功能和最佳實踐,幫助您了解何時以及如何有效地利用它。

什麼是 Next.js 中間件?

Next.js 中間件包含針對每個傳入請求自動執(zhí)行的函數(shù)。 這些函數(shù)在請求資料到達應(yīng)用程式的路由系統(tǒng)之前檢查和修改請求資料。 應(yīng)用程式包括身份驗證、日誌記錄和錯誤管理。例如,中間件可以透過檢查令牌來驗證使用者會話,防止未經(jīng)授權(quán)的存取。

Next.js 中間件高度靈活且可自訂。 您可以建立自訂功能來滿足特定應(yīng)用程式需求,設(shè)定應(yīng)用程式範(fàn)圍的設(shè)定或策略。這簡化了路由配置,避免了複雜的多層設(shè)定。 使用中間件可以產(chǎn)生更健壯、可擴展且可維護的應(yīng)用程式。

Next.js 中介軟體處理順序

了解收到請求時的操作順序至關(guān)重要:

  1. 標(biāo)頭: next.config.js 標(biāo)頭先套用,設(shè)定初始請求標(biāo)頭。這非常適合內(nèi)容安全策略 (CSP) 或 CORS 等安全標(biāo)頭。

  2. 重新導(dǎo)向: next.config.js 接下來處理重新導(dǎo)向,將請求對應(yīng)到不同的 URL。 這可以處理 URL 重寫和重定向,管理跨頁面或整個應(yīng)用程式的路由規(guī)則。

  3. 中介軟體評估:在標(biāo)頭和重定向之後,評估中間件並執(zhí)行其邏輯。

  4. 應(yīng)用

    beforeFiles: next.config.js beforeFiles(重寫),在路由之前啟用進一步重寫或特定於檔案的邏輯。

  5. 檔案系統(tǒng)路由: 處理應(yīng)用程式的檔案系統(tǒng)路由(例如,public/、_next/static/、頁面和應(yīng)用程式)。 這裡提供靜態(tài)文件。

  6. afterFiles: next.config.js afterFiles(重寫)被應(yīng)用,在動態(tài)路由之前提供最終修改點。

  7. 動態(tài)路由: 處理動態(tài)路由(例如,/blog/[slug])。 這些需要對變數(shù)或參數(shù)進行特定的處理和重寫。

  8. 後備: next.config.js 套用後備,管理無法路由的請求。 這允許錯誤處理程序或後備路由。

常見的 Next.js 中間件用例

  • 驗證:在存取受保護的資源之前驗證使用者憑證。 中間件可以檢查會話令牌,重定向未經(jīng)身份驗證的使用者登入。 店員有效地使用了這種方法。

  • 日誌記錄:透過將每個請求記錄到中央伺服器進行分析和偵錯來追蹤應(yīng)用程式事件(使用者操作、錯誤)。

  • 資料取得:(有限制)從 API 或資料庫載入資料以取得最新資訊。 請注意稍後討論的性能注意事項。

  • 請求路由:自訂路由,將請求重新導(dǎo)向至特定路徑或?qū)嵶鲾X取所有錯誤處理程序。

  • 快?。?/strong>透過將經(jīng)常存取的資源儲存在記憶體中來提高效能,減少請求。 (原文提供範(fàn)例程式碼)

  • 速率限制:監(jiān)控來自使用者或IP位址的請求,阻止過多的請求以保護後端資源。

  • 頁面轉(zhuǎn)換:即時重寫 HTML 或轉(zhuǎn)換資料。 這對於圖像 URL 重寫或提供來自不同網(wǎng)域的資源非常有用。

  • 分析/報告:追蹤使用者行為和應(yīng)用程式效能以進行最佳化。 中間件可以修改 cookie 以進行第三方分析整合。

  • 國際化:根據(jù)使用者區(qū)域設(shè)定以多種語言交付內(nèi)容(例如,使用 IP 位址或 HTTP 標(biāo)頭)。

在 Next.js 專案中使用中間件

中間件是透過在專案根目錄建立middleware.ts檔案來實現(xiàn)的。 此文件定義了一個中間件函數(shù)和(可選)一個匹配器。

中介軟體功能

中間件函數(shù)包含中介軟體邏輯。 它接受 request 作為輸入並返回 response.

import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'

export function middleware(request: NextRequest) {
  // Middleware logic here
  return NextResponse.next()
}

將請求重新導(dǎo)向到 /dashboard 的範(fàn)例,除非要求以 /api 開頭:

export function middleware(request: NextRequest) {
  if (!request.nextUrl.pathname.startsWith('/api')) {
    return NextResponse.redirect(new URL('/dashboard', request.url))
  }
  return NextResponse.next()
}

函數(shù)必須回傳:NextResponse.next()、NextResponse.redirect()、NextResponse.rewrite()、NextResponse.json() 或自訂 Response/NextResponse。

匹配器

匹配器決定中間件處理哪些請求。 它在 config 物件中定義:

export const config = {
  matcher: '/hello', // Matches only /hello
}

您可以使用陣列進行多個路由或使用正規(guī)表示式進行更複雜的匹配:

import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'

export function middleware(request: NextRequest) {
  // Middleware logic here
  return NextResponse.next()
}

如果沒有匹配器,中間件將應(yīng)用於所有 路由,可能會影響效能。

組合多個中間件功能

Next.js 僅支援一個中間件檔案。 要使用多個函數(shù),請建立單獨的函數(shù)並按順序呼叫它們,如果產(chǎn)生了回應(yīng),則傳回回應(yīng):

export function middleware(request: NextRequest) {
  if (!request.nextUrl.pathname.startsWith('/api')) {
    return NextResponse.redirect(new URL('/dashboard', request.url))
  }
  return NextResponse.next()
}

Clerk 和 Next.js 中間件

職員透過提供clerkMiddleware簡化身分驗證:

export const config = {
  matcher: '/hello', // Matches only /hello
}

這處理 cookie 解析和使用者驗證。 您可以使用自訂邏輯來擴展它:

export const config = {
  matcher: ['/hello', '/world', '/[a-zA-Z]+/'], // Matches multiple routes and regex
}

Next.js 中間件的限制

  • 邊緣運行時約束:中間件在邊緣運行時運行,限制可用的 API 和庫。 不允許存取檔案系統(tǒng)。

  • 大小限制:中間件函數(shù)限制為 1MB。

  • 僅限 ES 模組: 僅支援 ES 模組。

  • 無字串求值: evalnew Function(evalString) 不允許。

  • 效能注意事項:複雜的中間件會對效能產(chǎn)生負面影響。 通常不鼓勵在中間件內(nèi)存取資料庫。

  • 對請求/回應(yīng)的有限存?。?/strong>中間件沒有對請求和回應(yīng)物件的完全存取權(quán)。

結(jié)論

本指南全面了解 Next.js 中間件、其功能、限制和最佳實踐。 請記住優(yōu)先考慮高效程式碼以避免效能瓶頸。

以上是Next.js 中的中間件是什麼的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java vs. JavaScript:清除混亂 Java vs. JavaScript:清除混亂 Jun 20, 2025 am 12:27 AM

Java和JavaScript是不同的編程語言,各自適用於不同的應(yīng)用場景。 Java用於大型企業(yè)和移動應(yīng)用開發(fā),而JavaScript主要用於網(wǎng)頁開發(fā)。

JavaScript評論:簡短說明 JavaScript評論:簡短說明 Jun 19, 2025 am 12:40 AM

JavascriptconcommentsenceenceEncorenceEnterential gransimenting,reading and guidingCodeeXecution.1)單inecommentsareusedforquickexplanations.2)多l(xiāng)inecommentsexplaincomplexlogicorprovideDocumentation.3)

如何在JS中與日期和時間合作? 如何在JS中與日期和時間合作? Jul 01, 2025 am 01:27 AM

JavaScript中的日期和時間處理需注意以下幾點:1.創(chuàng)建Date對像有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時間信息可用get和set方法,注意月份從0開始;3.手動格式化日期需拼接字符串,也可使用第三方庫;4.處理時區(qū)問題建議使用支持時區(qū)的庫,如Luxon。掌握這些要點能有效避免常見錯誤。

為什麼要將標(biāo)籤放在的底部? 為什麼要將標(biāo)籤放在的底部? Jul 02, 2025 am 01:22 AM

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavaScript與Java:開發(fā)人員的全面比較 JavaScript與Java:開發(fā)人員的全面比較 Jun 20, 2025 am 12:21 AM

JavaScriptIspreferredforredforwebdevelverment,而Javaisbetterforlarge-ScalebackendsystystemsandSandAndRoidApps.1)JavascriptexcelcelsincreatingInteractiveWebexperienceswebexperienceswithitswithitsdynamicnnamicnnamicnnamicnnamicnemicnemicnemicnemicnemicnemicnemicnemicnddommanipulation.2)

JavaScript:探索用於高效編碼的數(shù)據(jù)類型 JavaScript:探索用於高效編碼的數(shù)據(jù)類型 Jun 20, 2025 am 12:46 AM

javascripthassevenfundaMentalDatatypes:數(shù)字,弦,布爾值,未定義,null,object和symbol.1)numberSeadUble-eaduble-ecisionFormat,forwidevaluerangesbutbecautious.2)

什麼是在DOM中冒泡和捕獲的事件? 什麼是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

事件捕獲和冒泡是DOM中事件傳播的兩個階段,捕獲是從頂層向下到目標(biāo)元素,冒泡是從目標(biāo)元素向上傳播到頂層。 1.事件捕獲通過addEventListener的useCapture參數(shù)設(shè)為true實現(xiàn);2.事件冒泡是默認行為,useCapture設(shè)為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委託,提高動態(tài)內(nèi)容處理效率;5.捕獲可用於提前攔截事件,如日誌記錄或錯誤處理。了解這兩個階段有助於精確控制JavaScript響應(yīng)用戶操作的時機和方式。

Java和JavaScript有什麼區(qū)別? Java和JavaScript有什麼區(qū)別? Jun 17, 2025 am 09:17 AM

Java和JavaScript是不同的編程語言。 1.Java是靜態(tài)類型、編譯型語言,適用於企業(yè)應(yīng)用和大型系統(tǒng)。 2.JavaScript是動態(tài)類型、解釋型語言,主要用於網(wǎng)頁交互和前端開發(fā)。

See all articles