当前位置: 首页 > news >正文

Next.js系统性教学:拦截路由与路由处理器

 更多有关Next.js教程,请查阅:

【目录】Next.js 独立开发系列教程-CSDN博客


目录

1. 路由拦截 (Intercepting Routes)

1.1 什么是路由拦截?

1.2 配置拦截路由

1.3 示例:模态框预览

1.4 使用场景

2. 路由处理器 (Route Handlers)

2.1 什么是路由处理器?

2.2 配置路由处理器

2.3 示例:简单的 GET 和 POST 处理

2.4 路由处理器中的动态参数

2.5 高级用法:流式响应

2.6 使用场景

3. 路由拦截与路由处理器的结合

4. 总结

  独立开发系列文章目录

Next.js系统性学习系列文章目录


在现代 Web 应用开发中,灵活的路由机制 是框架的重要功能之一。Next.js 提供了强大的路由工具,例如 路由拦截 (Intercepting Routes)路由处理器 (Route Handlers),允许开发者更精细地控制用户导航和请求响应。本文将深入讲解这两个特性,并通过实例展示它们的实际应用。


1. 路由拦截 (Intercepting Routes)

1.1 什么是路由拦截?

路由拦截允许开发者在导航到特定路由时加载额外的用户界面,同时保留当前的上下文。例如:

  • 弹出模态框预览新页面的内容。
  • 在不离开主页面的情况下展示嵌套信息。

这一功能通常用于增强用户体验,避免频繁的页面跳转。


1.2 配置拦截路由

在 Next.js 中,使用 (..) 文件夹定义拦截路由。这个文件夹的路径会被解释为需要拦截的目标页面。

目录结构:

app/
├── dashboard/
│   ├── page.js
│   ├── (..)modal/
│   │   ├── page.js

当用户从 dashboard 页面导航到某个路径时,(..) 中的内容会以嵌套形式呈现,而不影响当前页面上下文。


1.3 示例:模态框预览

主页面:app/dashboard/page.js

export default function Dashboard() {return (<main><h1>仪表盘</h1><a href="/dashboard/(..)/modal">打开模态框</a></main>);
}

模态框页面:app/dashboard/(..)/modal/page.js

export default function Modal() {return (<div style={{ background: 'rgba(0, 0, 0, 0.8)', padding: '20px' }}><h2>模态框内容</h2><a href="/dashboard">关闭</a></div>);
}

运行效果:

  • 当用户点击 “打开模态框” 时,modal 页面会以模态框的形式覆盖在 dashboard 页面上。
  • (..) 确保页面导航保持平滑,无需完全重新加载主页面。

1.4 使用场景

  • 内容预览:例如博客文章摘要或商品详情。
  • 弹窗形式的表单:如登录或评论表单。
  • 分步流程:用户在浏览过程中临时查看其他页面信息。

2. 路由处理器 (Route Handlers)

2.1 什么是路由处理器?

路由处理器允许开发者直接在路由中处理 HTTP 请求,而不需要通过 API 路径。这种机制非常适合需要动态响应内容或处理特定请求的场景,例如:

  • 根据参数动态生成文件。
  • 在页面中嵌入微型 API。

2.2 配置路由处理器

app 目录下,路由处理器通过 route.jsroute.ts 文件实现。处理器文件与页面文件共存,但专注于处理网络请求。

目录结构:

app/
├── api/
│   ├── hello/
│   │   ├── route.js

以上配置会创建一个 API 路径 /api/hello,可以直接接收和响应 HTTP 请求。


2.3 示例:简单的 GET 和 POST 处理

GET 请求:

export async function GET(request) {return new Response(JSON.stringify({ message: "Hello, Next.js!" }), {headers: { "Content-Type": "application/json" },});
}

访问 /api/hello 将返回 JSON 响应:{ "message": "Hello, Next.js!" }

POST 请求:

export async function POST(request) {const data = await request.json();return new Response(JSON.stringify({ message: `You sent: ${data.text}` }),{headers: { "Content-Type": "application/json" },});
}

通过 POST 请求发送 { "text": "Hello" },会收到响应:{ "message": "You sent: Hello" }


2.4 路由处理器中的动态参数

路由处理器也支持动态参数,与动态页面的实现类似。

目录结构:

app/
├── api/
│   ├── [id]/
│   │   ├── route.js

示例代码:app/api/[id]/route.js

export async function GET(request, { params }) {const { id } = params;return new Response(JSON.stringify({ id }), {headers: { "Content-Type": "application/json" },});
}

访问 /api/123 将返回 { "id": "123" }


2.5 高级用法:流式响应

Next.js 路由处理器支持流式响应,适合用来发送大型数据或实时更新。

export async function GET() {const encoder = new TextEncoder();const stream = new ReadableStream({start(controller) {controller.enqueue(encoder.encode("开始流式传输...\n"));setTimeout(() => controller.enqueue(encoder.encode("继续传输...\n")), 1000);setTimeout(() => controller.close(), 2000);},});return new Response(stream, {headers: { "Content-Type": "text/plain" },});
}

访问路径时,浏览器将逐步接收数据流。


2.6 使用场景

  • 动态内容生成:如生成 PDF、CSV 文件。
  • 嵌入式 API:在页面中直接提供与特定页面相关的 API。
  • 实时更新:通过流式传输为客户端提供实时数据。

3. 路由拦截与路由处理器的结合

两者可以结合使用,进一步增强页面的动态性和交互性。

示例:

  • 使用路由拦截加载模态框。
  • 通过路由处理器提供模态框需要的数据。

目录结构:

app/
├── dashboard/
│   ├── page.js
│   ├── (..)modal/
│   │   ├── page.js
│   ├── (..)modal/
│   │   ├── route.js

modal/page.js

export default function Modal({ data }) {return (<div><h1>模态框内容</h1><p>{data.message}</p></div>);
}

modal/route.js

export async function GET() {return new Response(JSON.stringify({ message: "这是动态加载的模态框数据" }), {headers: { "Content-Type": "application/json" },});
}

4. 总结

  • 路由拦截 提供了一种优雅的方式展示弹窗和嵌套内容,提升用户体验。
  • 路由处理器 是灵活处理 HTTP 请求的工具,适用于动态内容生成和实时响应。
  • 结合使用这两种特性,可以显著提升应用的动态性、交互性和性能。

通过掌握这些高级路由技巧,开发者可以用 Next.js 打造功能更丰富、用户体验更出色的应用。

 更多有关Next.js教程,请查阅:

【目录】Next.js 独立开发系列教程-CSDN博客

相关文章:

Next.js系统性教学:拦截路由与路由处理器

更多有关Next.js教程&#xff0c;请查阅&#xff1a; 【目录】Next.js 独立开发系列教程-CSDN博客 目录 1. 路由拦截 (Intercepting Routes) 1.1 什么是路由拦截&#xff1f; 1.2 配置拦截路由 1.3 示例&#xff1a;模态框预览 1.4 使用场景 2. 路由处理器 (Route Handl…...

Python编码风格

Python代码的常用排版格式主要遵循PEP 8规范&#xff0c;这是Python社区广泛接受的编码风格指南。以下是一些关键的排版格式要求&#xff1a; 一、缩进 使用4个空格作为缩进级别&#xff0c;不要使用Tab键&#xff0c;更不能混合使用Tab和空格。 二、行长度 每行代码的最大…...

flask创建templates目录存放html文件

首先&#xff0c;创建flask项目&#xff0c;在pycharm中File --> New Project&#xff0c;选择Flask项目。 然后&#xff0c;在某一目录下&#xff0c;新建名为templates的文件夹&#xff0c;这时会是一个普通的文件夹。 然后右击templates文件夹&#xff0c;选择Unmark as …...

微信小程序里的小游戏研发需要什么技术栈

研发小程序里的小游戏通常需要以下技术栈&#xff1a; 前端技术 HTML5 / CSS3&#xff1a;用于构建游戏的界面布局和样式。JavaScript&#xff1a;作为核心编程语言&#xff0c;实现游戏的逻辑和交互。小程序开发框架&#xff1a;如微信小程序的开发框架&#xff0c;了解其 API…...

2024年上半年网络工程师案例分析真题及答案解析

2024年上半年网络工程师案例分析真题及答案解析 1、试题一(20分) 阅读以下说明,回答问题。 [说明]某高校网络拓扑如下图所示,两校区核心(CORE-1,CORE-2),出口防火墙(NGFW-1,NGFW-2)通过校区间光缆互联,配置OSPF实现全校路由收效,校区相距40km。两校区默认由本地出…...

Ant Design Vue v4版本如何解决1px没有被postcss-px2rem转成rem的问题

背景说明 如果你的 Ant Design Vue 项目有要做适配的需求&#xff0c;那首先要选择一种适配方案。笔者选择的是用 postcss-px2rem 进行适配。笔者在配置了 postcss-px2rem的相关配置后&#xff0c;发现 postcss-px2rem 没有对 Ant Design Vue 进行适配。在网上看了一些文章之后…...

武汉科技大学《2024年814自动控制原理真题》 (完整版)

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;《武汉科技大学814自控考研资料》的真题篇。后续会持续更新更多学校&#xff0c;更多年份的真题&#xff0c;记得关注哦~ 目录 2024年真题 Part1&#xff1a;2024年完整版真题 2024年真题...

【锂电池实战】A123磷酸铁锂在线参数识别-一阶戴维南模型

A123磷酸铁锂在线参数识别-一阶戴维南模型 提要 理论介绍:一篇就够了,为你答疑解惑:锂电池一阶模型-在线参数辨识(附代码)_在线参数辨识方法-CSDN博客 数据源:Battery Data | Center for Advanced Life Cycle Engineering 打包下载地址:A123-DST-US06-FUDS-25.zip资源…...

Java多线程与线程池技术详解(四)

接受失败&#xff1a;“失败是什么&#xff1f;没有什么&#xff0c;只是更走近成功一步&#xff1b;成功是什么&#xff1f;就是走过了所有通向失败的路&#xff0c;只剩下一条路&#xff0c;那就是成功的路。”这句话很好地诠释了如何看待失败的问题&#xff0c;即每一次跌倒…...

树莓派开发笔记

一. 登录方式 1.1 方式一:HDMI视频线 1.2 方式二:串口 查看串口有否被加密,默认情况下树莓派串口和蓝牙连接,需先断开蓝牙连接,串口才能用于数据通信。 1.2.1 如何使用串口登录 打开SD卡根目录的"config.txt"文件,将以下内容添加在最后并且保存。这样就停止…...

【数据结构】遍历二叉树

遍历二叉树的算法描述&#xff08;递归定义&#xff09; 先序遍历 若二叉树为空&#xff0c;则空操作&#xff1b; 否则 &#xff08;1&#xff09;访问根节点 &#xff08;2&#xff09;先序遍历左子树 &#xff08;3&#xff09;先序遍历右子树 中序遍历 若二叉树为空…...

嵌入式蓝桥杯学习7 产生PWM

Cubemx配置 打开cubemx&#xff0c;前面的配置看上文&#xff0c;这里主要配置定时器产生PWM波。 以PA1的TIM2-CH2通道为例进行演示。 1.在Timers中打开TIM2,将Channel2配置为PWM Generation CH2。 2.将Clock Source 选择为Internal Clock。 3.配置Paramater Settings中的参…...

档案学实物

档案工作 档案工作的性质 服务性 文化性 管理性 政治性 科学性 档案工作的地位 档案工作的效益 社会性&#xff0c;隐蔽性&#xff0c;滞后性 档案工作的发展规律 档案收集 档案收集工作的内容意义 档案收集工作的具体要求 档案室的档案收集工作 档案馆的档案收集工作 档案…...

数据清洗代码:缺失值,异常值,离群值Matlab处理

目录 基本介绍程序设计参考资料基本介绍 一、过程概述 本过程适用于处理SCADA系统采集到的数据,以及具有类似需求的数据集。处理步骤包括缺失值处理、异常值处理和离群值处理,旨在提升数据质量,增强数据的相关性,同时保持数据的原始特征和随机性。 二、缺失值处理 对于SC…...

Windows设备go环境安装配置

一、下载go安装包 官网链接&#xff1a;All releases - The Go Programming Language (google.cn) 安装过程比较简单&#xff0c;这里不再赘述&#xff0c;可参考这位博主的文章。本文重点在环境配置。golang环境详细安装、配置_golang安装-CSDN博客 二、环境变量配置 1.添…...

导体、半导体和绝缘体

半导体可以根据不同的组合去改变电阻&#xff0c;所以可以用来制作芯片。...

shell 6 if条件判断与for循环结构 (泷羽sec)

声明 学习视频来自B站UP主 泷羽sec,如涉及侵泷羽sec权马上删除文章。 笔记只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 这节课旨在扩大自己在网络安全方面的知识面&#xff0c;了解网络安全领域的见闻&#xff0c;了…...

MetaGPT 安装

1. 创建环境 conda create -n metagpt python3.10 && conda activate metagpt2. 可编辑方式安装 git clone --depth 1 https://github.com/geekan/MetaGPT.git cd MetaGPT pip install -e .3. 配置 metagpt --init-config运行命令&#xff0c;在C盘位置C:\Users\325…...

论文阅读:Single-cell transcriptomics of 20 mouse organs creates a Tabula Muris

The Tabula Muris Consortium., Overall coordination., Logistical coordination. et al. Single-cell transcriptomics of 20 mouse organs creates a Tabula Muris. Nature 562, 367–372 (2018). 论文地址&#xff1a;https://doi.org/10.1038/s41586-018-0590-4 代码地址…...

图生3d 图生全景 学习笔记

目录 instantsplat Aluciddreamer ZoeDepth 会自动下载模型&#xff1a; 图生全景图SD-T2I-360PanoImage&#xff1a; instantsplat Sparse-view SfM-free Gaussian Splatting in Seconds 稀疏视图无SfM高斯喷洒 GitHub - NVlabs/InstantSplat: InstantSplat: Sparse-vi…...

制造业数字鸿沟的终结者:零依赖STL到STEP转换引擎的技术突破与应用实践

制造业数字鸿沟的终结者&#xff1a;零依赖STL到STEP转换引擎的技术突破与应用实践 【免费下载链接】stltostp Convert stl files to STEP brep files 项目地址: https://gitcode.com/gh_mirrors/st/stltostp 在数字化制造与工业4.0的浪潮中&#xff0c;制造业企业面临着…...

告别串口线!用STM32CubeMX配置USB-CDC虚拟串口,实现与电脑免驱动通信(附Win7驱动安装指南)

STM32虚拟串口革命&#xff1a;USB-CDC免驱动通信全实战指南 嵌入式开发调试过程中&#xff0c;最令人头疼的莫过于频繁插拔串口线导致的接口松动、接触不良问题。传统串口调试不仅占用宝贵的UART资源&#xff0c;还常常因为物理连接问题浪费大量调试时间。本文将彻底改变这一局…...

UEFITool终极指南:轻松解析和编辑UEFI固件的开源利器

UEFITool终极指南&#xff1a;轻松解析和编辑UEFI固件的开源利器 【免费下载链接】UEFITool UEFI firmware image viewer and editor 项目地址: https://gitcode.com/gh_mirrors/ue/UEFITool 你是否曾好奇计算机启动时底层发生了什么&#xff1f;想要深入了解UEFI固件的…...

开源银行API模拟器Bankr Buddy:金融科技开发的本地化测试解决方案

1. 项目概述&#xff1a;一个为开发者准备的银行API模拟器如果你正在开发一个需要与银行账户数据打交道的应用&#xff0c;无论是个人财务管理工具、预算分析软件&#xff0c;还是企业级的财务聚合服务&#xff0c;你肯定遇到过同一个难题&#xff1a;如何在不触碰真实用户敏感…...

fold命令行工具:高效文本数据聚合与分析的瑞士军刀

1. 项目概述&#xff1a;一个为“折叠”而生的高效工具 最近在折腾一些数据处理和文件整理的工作流时&#xff0c;我一直在寻找一个能让我“折叠”起来思考的工具。我说的“折叠”&#xff0c;不是物理上的&#xff0c;而是逻辑上的——把复杂的、多维度的信息&#xff0c;按照…...

AI增强型写作工具Hermes-Writer:为开发者打造的智能写作助手

1. 项目概述&#xff1a;一个面向开发者的智能写作助手最近在GitHub上看到一个挺有意思的项目&#xff0c;叫dav-niu474/Hermes-Writer。乍一看标题&#xff0c;你可能会觉得这又是一个普通的Markdown编辑器或者写作工具。但如果你点进去&#xff0c;仔细研究一下它的README、代…...

I2C地址冲突全解析:从原理到实战的嵌入式系统设计指南

1. I2C地址&#xff1a;嵌入式系统设计的“门牌号”与“交通规则”如果你玩过单片机或者树莓派&#xff0c;肯定对I2C不陌生。两根线&#xff0c;SDA和SCL&#xff0c;就能挂上一堆传感器、显示屏、扩展芯片&#xff0c;听起来简直是嵌入式开发的“万金油”。但真正上手后&…...

Nixtla时间序列预测生态:从统计模型到深度学习的统一实践

1. 项目概述&#xff1a;时间序列预测的“瑞士军刀”如果你正在处理时间序列数据&#xff0c;无论是销售预测、服务器监控、还是能源消耗分析&#xff0c;那么你很可能听说过或正在使用一些经典的库&#xff0c;比如statsmodels、prophet&#xff0c;或者更现代的深度学习框架。…...

知乎API完全指南:用Python轻松获取知乎数据的5个核心技巧

知乎API完全指南&#xff1a;用Python轻松获取知乎数据的5个核心技巧 【免费下载链接】zhihu-api Zhihu API for Humans 项目地址: https://gitcode.com/gh_mirrors/zh/zhihu-api 在当今数据驱动的时代&#xff0c;知乎数据采集和Python API开发已成为获取高质量中文知识…...

ComfyUI ControlNet Aux 终极指南:30+种预处理器让AI图像生成更精准

ComfyUI ControlNet Aux 终极指南&#xff1a;30种预处理器让AI图像生成更精准 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux 想让您的AI图像生成具备真实…...