react框架next.js學(xué)習(xí)之API?路由篇詳解
正文
next.js
作為最熱門的 react
框架,不過這么久了好像國內(nèi)使用率一直不太高。最近在研究做個小項(xiàng)目正好做下筆記,有興趣的可以一起來學(xué)習(xí)。
next.js
首頁標(biāo)榜的 12 個特性之一就是 API routes
,簡單的說就是可以 next.js
直接寫 node
代碼作為后端服務(wù)來運(yùn)行。因此我們可以直接使用 next.js
直接維護(hù)一個全棧項(xiàng)目,聽起來很香的樣子。
使用方式
next.js
中使用文件路徑作為路由,所以在 API routes
中也是一樣,一般的頁面文件我們會放在 pages
下,而 API routes
文件我們則需要放在 pages/api
下,emmm
,其實(shí)我覺得這個設(shè)計(jì)有點(diǎn)奇怪,為啥不是在外層增加一個 server
或者 api
的文件夾呢,放在 pages
下面感覺怪怪的。而請求時,需要請求對應(yīng)的 /api/
下的文件地址,emmm
,好吧,真的挺奇怪的。
所以我們要新增一個 API
只需要在 pages/api/
目錄下新建一個文件即可。
API 路由匹配
而 API
的文件命名有三種方式:
pages/api/route.js
pages/api/route/[param].js
pages/api/route/[...slug].js
第一種很好理解,就是會處理發(fā)送到 /api/route
的請求,第二種會接受來自 /api/route/xxxx
的請求,并將 xxxx
作為參數(shù)放到 param
中,而第三種則是會接收所有的到 /api/route/
下的請求,比如 /api/route/a/b/c
等。
當(dāng)請求過來進(jìn)行匹配時, next.js
將會按照從上到下的優(yōu)先級來匹配應(yīng)該處理的路由,比如上面三個文件同時存在,那么發(fā)送到 /api/route
的請求將會從被第一個文件所處理,而 /api/route/a
的請求會被第二個文件所處理,剩余的請求才會進(jìn)入第三個文件中處理。
API 處理
而在處理文件中,會調(diào)用默認(rèn)的導(dǎo)出函數(shù)來處理請求:
export default function handler(req, res) { res.status(200).json({ foo: 'bar' }); }
如上代碼表示請求的響應(yīng)體 http
狀態(tài)碼為 200,響應(yīng)體中是一段 json
。
除了 nodejs
原生中包含的一些屬性和方法外,next
還在 res
中擴(kuò)展了以下幾個常用的方法:
res.status(code)
響應(yīng)的http
狀態(tài)碼res.json(body) json
響應(yīng)體res.send(body)
其它響應(yīng)體,可以是string
、object
、Buffer
res.redirect([status,] path)
重定向res.revalidate(urlPath)
重新進(jìn)行校驗(yàn)
而在 req
中則擴(kuò)展了以下幾個常用屬性:
req.cookies
請求包含的cookies
req.query
請求的query
參數(shù)req.body
請求體
是不是很熟悉,沒錯就是 express.js
的一些功能。
API 配置
除了 export
默認(rèn)的處理函數(shù)處理請求外,還可 export
一個 config
對象來配置:
export const config = { api: { // 請求體處理 bodyParser: { sizeLimit: '1mb' }, // 響應(yīng)體的大小限制 responseLimit: '8mb', // 用于指定請求是否被外部服務(wù)處理,這個暫時還沒搞清楚是怎么工作的,等研究完了再來更新 externalResolver: true } };
邊緣計(jì)算支持
此外,next.js
的 API routes
還支持最近很火的邊緣計(jì)算,不過邊緣計(jì)算的運(yùn)行時和 node
運(yùn)行時差異較大,需要注意改動。由于暫時對這方面沒有研究,不做過多深入。
自定義 API
除了默認(rèn)的請求處理,還可以借助外部 server
來處理請求,比如 graphql
:
import { createServer } from '@graphql-yoga/node'; const typeDefs = /* GraphQL */ ` type Query { users: [User!]! } type User { name: String } `; const resolvers = { Query: { users() { return [{ name: 'Nextjs' }]; } } }; const server = createServer({ schema: { typeDefs, resolvers }, endpoint: '/api/graphql' }); export default server;
注意點(diǎn)
另外需要注意的是,如果配置了 pageExtensions
,API
文件的命名也會受影響。
還有如果同時存在 pages/api/route/[param].js
和 pages/api/route/[param1].js
不知道會發(fā)什么什么,回頭有空試試。
總結(jié)
使用 next.js
的 API routes
,我們可以直接在項(xiàng)目中編寫 nodejs
后端代碼,輕松完成全棧開發(fā)。
再多說幾句,經(jīng)過這么多年的發(fā)展,前后端終于分離了,然而最近幾年,前端又開始干起后端的活,夢回 php
、jsp
。古人云的好:風(fēng)水輪流轉(zhuǎn),前后不分家。
以上就是react框架next.js學(xué)習(xí)之API 路由篇詳解的詳細(xì)內(nèi)容,更多關(guān)于react框架next.js API路由的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
react執(zhí)行【npx create-react-app my-app】出現(xiàn)常見錯誤的解決辦法
文章主要介紹了在使用npx創(chuàng)建React應(yīng)用時可能遇到的幾種常見錯誤及其解決方法,包括缺少依賴、網(wǎng)絡(luò)問題和npx解析錯誤等,并提供了相應(yīng)的解決措施,此外,還提到了使用騰訊云云產(chǎn)品來支持React應(yīng)用開發(fā)2024-11-11詳解React??App.js?文件的結(jié)構(gòu)和作用
在React應(yīng)用中,App.js文件通常是項(xiàng)目的根組件文件,它負(fù)責(zé)組織和渲染其他組件,是應(yīng)用的核心部分,本文將詳細(xì)介紹App.js文件的結(jié)構(gòu)、作用和最佳實(shí)踐,感興趣的朋友跟隨小編一起看看吧2024-08-08react源碼層分析協(xié)調(diào)與調(diào)度
本文主要介紹了深入理解React協(xié)調(diào)與調(diào)度(Scheduler)原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-10-10手把手教您實(shí)現(xiàn)react異步加載高階組件
這篇文章主要介紹了手把手教您實(shí)現(xiàn)react異步加載高階組件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04一百多行代碼實(shí)現(xiàn)react拖拽hooks
這篇文章主要介紹了一百多行代碼實(shí)現(xiàn)react拖拽hooks,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03