news 2026/5/1 1:36: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/5/1 8:49:04

python-flask-django基于Web的校园订餐点餐服务信息论坛平台_92vf46qm

文章目录系统截图项目技术简介可行性分析主要运用技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统截图 python-flask-django基于Web的校园订餐点餐服务信息论坛平台_92vf46qm 项目技术简介 Pytho…

作者头像 李华
网站建设 2026/5/1 10:01:47

d3dx10d_43.dll文件免费下载修复 解决丢失找不到无法运行软件问题

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/4/23 11:19:37

【WampServer】Windows本地部署WampServer环境并实现远程访问服务界面

文章目录 * 前言1.WampServer下载安装2.WampServer启动3.安装cpolar内网穿透 * 3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 Wamp 是一个 Windows系统下的 Apache PHP Mysql 集成安装环境&#xff0c;是一…

作者头像 李华
网站建设 2026/5/1 4:37:11

足球视频检测数据集介绍-1200张图片 智能体育转播 战术数据分析 裁判辅助系统 青训技能评估 体育媒体内容生产 虚拟现实体育体验

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

作者头像 李华
网站建设 2026/4/22 9:18:37

网球检测数据集介绍-2664张图片 智能体育分析系统 自动化体育直播 运动训练辅助设备 体育场馆安全监控 移动端体育应用 体育器材质量检测

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

作者头像 李华
网站建设 2026/5/1 9:35:35

通达信资金流量对比指标公式

{}总额:AMOUNT; 买:IF(OC AND (C-REF(C,1))/REF(C,1)*100>9.8,AMOUNT,AMOUNT/((H-L)*2-Abs(O-C))*(C-L)); 买%:买/AMOUNT*100; 流进:AMOUNT*买%/10000000000; 流出:AMOUNT/100000000-流进; 净流:流进-流出; 总额3:SUM(AMOUNT,3); 流进3:SUM(流进,3); 流出3:SUM(流出,3); 净流…

作者头像 李华