react框架next.js學習之API?路由篇詳解
正文
next.js 作為最熱門的 react 框架,不過這么久了好像國內使用率一直不太高。最近在研究做個小項目正好做下筆記,有興趣的可以一起來學習。
next.js 首頁標榜的 12 個特性之一就是 API routes,簡單的說就是可以 next.js 直接寫 node 代碼作為后端服務來運行。因此我們可以直接使用 next.js 直接維護一個全棧項目,聽起來很香的樣子。
使用方式
next.js 中使用文件路徑作為路由,所以在 API routes 中也是一樣,一般的頁面文件我們會放在 pages 下,而 API routes 文件我們則需要放在 pages/api 下,emmm,其實我覺得這個設計有點奇怪,為啥不是在外層增加一個 server 或者 api 的文件夾呢,放在 pages 下面感覺怪怪的。而請求時,需要請求對應的 /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 等。
當請求過來進行匹配時, next.js 將會按照從上到下的優(yōu)先級來匹配應該處理的路由,比如上面三個文件同時存在,那么發(fā)送到 /api/route 的請求將會從被第一個文件所處理,而 /api/route/a 的請求會被第二個文件所處理,剩余的請求才會進入第三個文件中處理。
API 處理
而在處理文件中,會調用默認的導出函數(shù)來處理請求:
export default function handler(req, res) {
res.status(200).json({ foo: 'bar' });
}
如上代碼表示請求的響應體 http 狀態(tài)碼為 200,響應體中是一段 json。
除了 nodejs 原生中包含的一些屬性和方法外,next 還在 res 中擴展了以下幾個常用的方法:
res.status(code)響應的http狀態(tài)碼res.json(body) json響應體res.send(body)其它響應體,可以是string、object、Bufferres.redirect([status,] path)重定向res.revalidate(urlPath)重新進行校驗
而在 req 中則擴展了以下幾個常用屬性:
req.cookies請求包含的cookiesreq.query請求的query參數(shù)req.body請求體
是不是很熟悉,沒錯就是 express.js 的一些功能。
API 配置
除了 export 默認的處理函數(shù)處理請求外,還可 export 一個 config 對象來配置:
export const config = {
api: {
// 請求體處理
bodyParser: {
sizeLimit: '1mb'
},
// 響應體的大小限制
responseLimit: '8mb',
// 用于指定請求是否被外部服務處理,這個暫時還沒搞清楚是怎么工作的,等研究完了再來更新
externalResolver: true
}
};
邊緣計算支持
此外,next.js 的 API routes 還支持最近很火的邊緣計算,不過邊緣計算的運行時和 node 運行時差異較大,需要注意改動。由于暫時對這方面沒有研究,不做過多深入。
自定義 API
除了默認的請求處理,還可以借助外部 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;
注意點
另外需要注意的是,如果配置了 pageExtensions,API 文件的命名也會受影響。
還有如果同時存在 pages/api/route/[param].js 和 pages/api/route/[param1].js 不知道會發(fā)什么什么,回頭有空試試。
總結
使用 next.js 的 API routes,我們可以直接在項目中編寫 nodejs 后端代碼,輕松完成全棧開發(fā)。
再多說幾句,經過這么多年的發(fā)展,前后端終于分離了,然而最近幾年,前端又開始干起后端的活,夢回 php、jsp。古人云的好:風水輪流轉,前后不分家。
以上就是react框架next.js學習之API 路由篇詳解的詳細內容,更多關于react框架next.js API路由的資料請關注腳本之家其它相關文章!
相關文章
react執(zhí)行【npx create-react-app my-app】出現(xiàn)常見錯誤的解決辦法
文章主要介紹了在使用npx創(chuàng)建React應用時可能遇到的幾種常見錯誤及其解決方法,包括缺少依賴、網(wǎng)絡問題和npx解析錯誤等,并提供了相應的解決措施,此外,還提到了使用騰訊云云產品來支持React應用開發(fā)2024-11-11

