ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

React Router中间件与Context API入门:像Express一样搞定鉴权、日志与错误处理

React Router中间件与Context API入门:像Express一样搞定鉴权、日志与错误处理 React Router中间件与Context API入门像Express一样搞定鉴权、日志与错误处理【免费下载链接】react-routerDeclarative routing for React项目地址: https://gitcode.com/GitHub_Trending/re/react-router对于使用 React Router 做声明式路由的 React 开发者来说React Router 中间件Middleware和Context API是 v7/v8 版本带来的重磅能力它让鉴权拦截、请求日志、错误处理这些曾经需要外部 HTTP 服务器如 Express才能优雅完成的工作直接在路由层以复用、类型安全的方式搞定。本文将从零讲透这两个概念帮你快速在 React 应用中搭起一条完整的请求处理链路。什么是 React Router 中间件如果你用过 Express那么 React Router 中间件的心智模型几乎一模一样洋葱模型执行请求向下时从根路由 → 父路由 → 子路由依次执行中间件Response生成后向上原路返回父级中间件可以基于最终响应做收尾处理一个next()函数调用它才会执行下一个中间件或路由的loader/action你不需要try/catch包裹它内部错误会被路由的ErrorBoundary统一接管按路由挂载中间件以数组形式挂在具体路由上天然支持整棵子树共用一套拦截逻辑比如给dashboard布局路由挂一个鉴权中间件所有子页面自动受保护GET /parent/child 的执行顺序 Root 中间件开始 → Parent 中间件开始 → Child 中间件开始 → 执行 loaders、生成 Response → Child 中间件结束 → Parent 中间件结束 → Root 中间件结束官方把执行时机讲得非常清楚服务端中间件优先遵循 SPA 行为只包裹真实发生的请求避免无意义的服务器往返客户端中间件则在每次客户端导航时都会运行。详见 docs/how-to/middleware.md。快速上手三步配置 React Router 中间件第一步用 createContext 创建类型安全的 ContextContext 是中间件向下游其他中间件、loader、action传递数据的容器用法类似 React 的createContext但专为请求/响应生命周期设计import { createContext } from react-router; export const userContext createContextUser | null(null);API 定义位于 packages/react-router/lib/router/utils.ts提供了context.set()/context.get()两个方法值类型由泛型约束从中间件到 loader 全程类型安全。第二步在路由上导出中间件export const middleware: Route.MiddlewareFunction[] [authMiddleware]; // loader 中直接取用中间件塞进去的值 export async function loader({ context }: Route.LoaderArgs) { const user context.get(userContext); return { profile: await getProfile(user) }; }仓库内置了一个可以直接跑的演示工程 playground/middleware/其中 playground/middleware/app/root.tsx 展示了根路由如何同时挂载服务端中间件和客户端中间件playground/middleware/app/contexts.ts 则是几个典型 Context 定义值得逐行读一遍。第三步需要全局注入时用 getLoadContext如果你使用自定义服务器可以提供一个getLoadContext函数用RouterContextProvider把数据库连接等共享值预先塞进 Context整条中间件链都能拿到。三大高频场景实战场景一鉴权拦截与登录跳转这是中间件最经典的用途。在鉴权中间件里检查会话未登录直接throw redirect(/login)登录成功后context.set(userContext, user)下游所有 loader 都能拿到已认证的用户无需重复查询export const authMiddleware async ({ request, context }) { const user await getUserFromSession(request); if (!user) throw redirect(/login); context.set(userContext, user); }; // 只需前置逻辑时可省略 next()框架会自动调用场景二请求日志与耗时统计在next()前记录请求开始时间与requestId在next()后计算耗时并打印状态码一条链路即可实现带追踪 ID 的完整访问日志。日志中间件的完整写法见 docs/how-to/middleware.md 的 Logging 小节。场景三错误处理与安全响应头两个容易忽略但很实用的模式兜底错误处理中间件内抛出的错误会被最近的ErrorBoundary捕获并通过祖先的next()正常返回响应所以你不需要手动 try/catch根中间件里的收尾逻辑比如提交会话 Cookie依然会执行统一安全头在根路由中间件的next()之后给响应追加X-Frame-Options、X-Content-Type-Options等头全站一次配置生效此外还支持404 时查 CMS 重定向条件执行中间件如仅对 POST 鉴权等模式仓库 decisions/0014-context-middleware.md 记录了这套 API 从设计到定稿的完整思考过程想深入理解为什么这样设计可以一读。服务端与客户端中间件一个 API两种运行环境对比项服务端中间件middleware客户端中间件clientMiddleware运行位置服务器Framework 模式浏览器Framework / Data 模式输入真实 HTTPRequest导航请求对象返回值必须把Response沿链路上抛next()无 Response 可上抛通常忽略返回值典型用途鉴权、日志、安全头、会话导航耗时打点、404 兜底跳转客户端中间件在拿不到 Response 的场景下next()会回传各路由 loader/action 的执行结果你可以据此做条件处理——官方文档给了一个检测到 404 就查 CMS 重定向表的经典例子。关键资料索引快速定位文档与源码 官方中间件指南推荐精读docs/how-to/middleware.mdcreateContextAPI 文档docs/api/utils/createContext.md 路由对象写法参考docs/start/framework/route-module.md 架构决策记录中间件设计背景decisions/0014-context-middleware.md 核心 API 实现packages/react-router/lib/router/utils.ts 可运行演示工程playground/middleware/写在最后React Router 中间件 Context API 的组合等于在 React 世界里复刻了 Express 那套熟悉的请求处理范式鉴权、日志、错误兜底、响应头治理全部收敛到路由这一层。上手门槛极低三步配置收益却很高——共享逻辑写一次、按路由树挂载、全程类型安全。建议先跑通 playground/middleware/ 的演示再对照官方文档把三大场景套进自己的项目你会发现像 Express 一样写 React 应用真的不难 【免费下载链接】react-routerDeclarative routing for React项目地址: https://gitcode.com/GitHub_Trending/re/react-router创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表