news 2026/6/10 12:16:38

Next.js 的 API 路由文件(route.ts)的核心拆解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Next.js 的 API 路由文件(route.ts)的核心拆解

D:\trea\ployment\project24\Foresight-beta\apps\web\src\app\api\email-otp\request\route.ts

这是一个 Next.js 的 API 路由文件 ,用于处理 发送邮箱验证码 的请求。

它是后端逻辑的一部分,主要用于 绑定邮箱到钱包地址 时的身份验证。

1. 这个文件做什么?怎么做的?


- 做什么 :接收前端发来的“发送验证码”请求(包含邮箱和钱包地址),生成一个 6 位数字验证码,通过 SMTP 邮件服务发送给用户,并将验证码临时存储在服务器内存中以便后续验证。
- 怎么做的 :
1. 身份核验 :检查请求者的 Session(Cookie)是否与请求中的钱包地址一致,防止冒充。
2. 生成与存储 :生成随机 6 位数,存入全局内存对象( globalThis ,通过 getEmailOtpShared 获取),设置 15 分钟有效期。
3. 邮件发送 :使用 nodemailer 库连接配置好的 SMTP 服务器(如 Gmail, Outlook 等)发送邮件。
4. 开发环境后门 :如果是开发环境且邮件发送失败,它会直接把验证码返回给前端(方便调试)。

2. 核心功能


1. 安全性检查 : getSessionAddress(req) 确保发起请求的用户确实拥有该钱包地址的会话。
2. 防刷/限流 :检查 rec.lockUntil ,如果用户请求太频繁会被锁定(返回 429)。
3. 验证码生命周期管理 :生成、存储、过期时间(15分钟)。
4. 邮件发送服务 :封装 SMTP 发送逻辑。

3. 怎么找?(关联文件位置)


- 前端调用(Frontend) :

- 位置: apps/web/src/components/WalletModal.tsx (约 329 行)
- 代码特征: fetch('/api/email-otp/request', ...)
- 注意:项目中有两套验证码逻辑, LoginModal 用的是 Supabase,而这个 API 是自定义的,主要在 WalletModal 中使用。
- 共享工具/存储(Shared Utils) :

- 位置: apps/web/src/lib/serverUtils.ts
- 内容:定义了内存存储结构 ( getEmailOtpShared ) 和 Session 解析逻辑。
- 配置文件(Config) :

- 位置:项目根目录 .env 文件
- 关键词: SMTP_HOST , SMTP_PORT , SMTP_USER , SMTP_PASS 。

4. 梳理执行逻辑


输入 :POST 请求,Body JSON { email: "...", walletAddress: "..." }

流程图解 :

1. 初始化

- 获取全局共享存储 store 和日志 logs 。
- 解析 Body 获取 email 和 walletAddress 。
2. 前置校验 (Validation)

- Cookie 校验 :从 Cookie 解析 fs_session ,对比其地址与 Body 中的 walletAddress 是否一致。不一致 $\rightarrow$ 401 Unauthorized 。
- 格式校验 :检查邮箱格式。错误 $\rightarrow$ 400 Bad Request 。
3. 状态检查 (State Check)

- 从 store 获取该邮箱的记录。
- 锁定检查 :如果当前时间 < lockUntil ,说明被锁定。 $\rightarrow$ 429 Too Many Requests 。
4. 生成与更新 (Update)

- 生成 6 位随机码 genCode() 。
- 更新内存记录:设置 code , expiresAt (当前时间+15分钟),记录发送时间。
- 写入 store 。
5. 发送邮件 (IO Action)

- 记录日志 status: 'queued' 。
- 调用 sendMailSMTP 。
- 成功 :记录日志 status: 'sent' $\rightarrow$ 返回 200 OK { success: true } 。
- 失败 (Exception) :
- 记录错误日志。
- 开发环境特权 :如果 NODE_ENV !== 'production' ,返回 200 OK 但附带 codePreview (直接把验证码告诉你)。
- 生产环境 :返回 500 Internal Server Error 。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 4:10:35

好写作AI:不仅仅是语法检查,在深层学术构思上的功能突破

当大多数人还在关注AI能否纠正标点时&#xff0c;先进的智能写作工具已经将目光投向更深处——如何理解并参与学术思想的构建本身。好写作AI官方网址&#xff1a;https://www.haoxiezuo.cn/传统写作辅助工具的核心功能边界&#xff0c;往往止步于“语言的正确性”。然而&#x…

作者头像 李华
网站建设 2026/6/10 15:55:16

第六十四篇-ComfyUI+V100-32G+运行Z-Image-Turbo+GGUF

环境 系统&#xff1a;CentOS-7 CPU : E5-2680V4 14核28线程 内存&#xff1a;DDR4 2133 32G * 2 显卡&#xff1a;Tesla V100-32G【PG503】 (水冷) 驱动: 535 CUDA: 12.2 ComfyUI version: 0.4.0 ComfyUI frontend version: 1.34.8系统软件信息 系统信息 OS linux Python Ve…

作者头像 李华
网站建设 2026/6/10 15:57:56

足球视频检测数据集介绍-160张图片-智能体育转播 运动数据分析 自动化视频剪辑 裁判辅助系统 青训技术分析 虚拟现实体验

&#x1f4e6;点击查看-已发布目标检测数据集合集&#xff08;持续更新&#xff09; 数据集名称图像数量应用方向博客链接&#x1f50c; 电网巡检检测数据集1600 张电力设备目标检测点击查看&#x1f525; 火焰 / 烟雾 / 人检测数据集10000张安防监控&#xff0c;多目标检测点…

作者头像 李华
网站建设 2026/6/10 7:24:14

python-flask-django个人运动饮食健康评估管理系统_e2kfv12y

文章目录系统截图项目技术简介可行性分析主要运用技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统截图 python-flask-django_ekfv2y 个人运动饮食健康评估管理系统 项目技术简介 Python版本&…

作者头像 李华
网站建设 2026/6/10 14:31:26

自动售货机:西门子 S7 - 1200 与 TP700 触摸屏联机程序大揭秘

自动售货机西门子S7-1200和TP700触摸屏联机程序11&#xff0c;博途V15&#xff0c;带注释和IO表设计要求最近我在搞自动售货机相关的项目&#xff0c;用的是西门子 S7 - 1200 和 TP700 触摸屏&#xff0c;搭配博途 V15 软件。今天就来和大家分享下这个项目里的程序设计&#xf…

作者头像 李华