如何在NextJS API端点中获取API调用的来源地址
在Next.js API中获取请求来源URL并与Token一同存入数据库
核心:直接从请求头取Origin,不用打印整个req
你不用打印整个req对象找信息,Next.js的API请求对象里,**请求来源URL直接存放在req.headers.origin**里,直接访问这个字段就能拿到https://mywebsite.net。
完整实现示例
根据你用的Next.js路由类型,分两种情况写代码:
1. Pages Router(pages/api/connect.js)
import { yourDatabaseClient } from '../../lib/db'; // 替换成你的数据库客户端 export default async function handler(req, res) { if (req.method !== 'POST') { return res.status(405).json({ message: '只接受POST请求' }); } try { // 1. 提取Token(假设Token在请求体里,根据实际传输方式调整) const { token } = req.body; if (!token) { return res.status(400).json({ message: '缺少Token参数' }); } // 2. 获取请求来源Origin const origin = req.headers.origin; // 可选:验证Origin是否是你信任的域名,防止恶意请求 if (!origin || !origin.includes('mywebsite.net')) { return res.status(403).json({ message: '来源域名不被允许' }); } // 3. 存入数据库 await yourDatabaseClient.insert({ token: token, origin: origin }); res.status(200).json({ message: '存储成功' }); } catch (error) { res.status(500).json({ message: '存储失败', error: error.message }); } }
2. App Router(app/api/connect/route.js)
App Router里的请求对象结构略有不同,需要从headers中提取:
import { yourDatabaseClient } from '@/lib/db'; // 替换成你的数据库客户端 export async function POST(request) { try { // 1. 提取Token const { token } = await request.json(); if (!token) { return Response.json({ message: '缺少Token参数' }, { status: 400 }); } // 2. 获取请求来源Origin const origin = request.headers.get('origin'); // 可选:验证Origin合法性 if (!origin || !origin.includes('mywebsite.net')) { return Response.json({ message: '来源域名不被允许' }, { status: 403 }); } // 3. 存入数据库 await yourDatabaseClient.insert({ token: token, origin: origin }); return Response.json({ message: '存储成功' }, { status: 200 }); } catch (error) { return Response.json({ message: '存储失败', error: error.message }, { status: 500 }); } }
注意事项
- 如果你的请求是跨域的,要确保Next.js配置了正确的CORS规则,否则
origin字段可能为空或者被浏览器拦截。 - 一定要验证
origin的合法性,只允许你信任的域名(比如mywebsite.net),避免恶意请求存入无效数据。 - Token的传输方式如果是放在URL参数或者请求头里,对应调整提取方式(比如
req.query.token或者req.headers.authorization)。
内容的提问来源于stack exchange,提问作者LCAYSS
相关产品推荐
相关产品推荐

