使用 Server Actions 實現 Next.js 的無狀態會話
使用 Next.js 的新功能 Server Actions 來實現基於 cookie 的無狀態會話,並體驗 Server Actions 的優勢。
介紹
在備受推崇的 App Router 發佈後,Next.js 推出了另一項功能,Server Actions。這一創新促進了伺服器端的數據處理,減少了對客戶端 JavaScript 的依賴,並漸進地增強了表單功能——同時使用 JavaScript 和 React 來創建強大的 web 應用程序,而無需傳統的 REST API。
在本文中,我們將深入探討這項創新的豐富優勢,並通過實現一個基於 cookie 的無狀態會話來展示其作用。這篇文章將作為逐步指南,引導你完成使用 App Router 建立一個演示項目的每個階段。
我們的實際展示可以使用 Edge Runtime 部署到 Vercel。你可以從 GitHub 下載完整的源代碼。
遠離 REST API
傳統上,如果我們想要創建一個在後端查詢數據庫的 Next.js web 應用,我們可能會創建一些 REST API 來驗證認證狀態並查詢數據庫,然後前端 React 應用將調用這些 API。但如果沒有公共開放 API 的需求,而且這個 react 應用是唯一的客戶端,使用 REST API 似乎是多餘的,因為它們只會被我們自己調用。
有了 Server Actions,React 組件現在可以運行伺服器端代碼。不需要手動創建 API 端點,Server Actions 自動創建 Next.js 在背後使用的端點。調用 Server Action 時,Next.js 會將 POST
請求發送到你所在的頁面,並附帶執行哪個操作的元數據。
無狀態會話的需求
作為創建無狀態應用程序的首選框架,Next.js 通常意味著無伺服器,我們不能使用內存來存儲會話數據。傳統會話需要使用外部存儲服務,例如 Redis 或數據庫。
然而,當會話數據足夠小時,我們有另一條途徑:利用安全的加密方法和存儲在客戶端的 cookies,設計一個無狀態會話。此方法繞過了對外部存儲的需求,保持會話數據去中心化,提供了關於伺服器負載和整體應用性能的非平凡優勢。
所以我們的目標是一個輕量、高效的無狀態會話,它利用客戶端存儲能力,同時通過妥善執行的加密來確保安全。