You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 07:20:47