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

如何通过Vercel SDK获取verify.domain.tld的DNS验证记录?

如何获取Vercel项目子域名的DNS验证记录

你遇到的问题是刚添加域名后Vercel尚未完成验证记录生成,或调用了不匹配的API接口。以下是可行的解决方法:

1. 改用项目域名专属接口查询

domains.getDomainConfig主要用于全局域名的配置查询,而你添加的是项目绑定的子域名,应使用projects.getProjectDomain接口获取包含验证记录的详细信息:

// 获取项目绑定的子域名详情
const domainDetails = await vercel.projects.getProjectDomain({
  idOrName: projectName,
  domain: `verify.${domain}`
});

// 提取DNS验证记录
const verificationRecords = domainDetails.verification?.dnsRecords;
if (verificationRecords) {
  verificationRecords.forEach(record => {
    console.log(`类型: ${record.type}, 主机记录: ${record.name}, 值: ${record.value}`);
  });
}

2. 添加轮询逻辑等待记录生成

调用addProjectDomain后,Vercel需要几秒到几十秒生成验证记录,直接查询会返回无有效数据的状态。可添加轮询逻辑:

async function getVerificationRecords(projectName: string, subdomain: string, maxRetries = 5, delay = 3000) {
  let retries = 0;
  while (retries < maxRetries) {
    try {
      const domainDetails = await vercel.projects.getProjectDomain({
        idOrName: projectName,
        domain: subdomain
      });
      
      if (domainDetails.verification?.dnsRecords?.length) {
        return domainDetails.verification.dnsRecords;
      }
      
      await new Promise(resolve => setTimeout(resolve, delay));
      retries++;
    } catch (err) {
      console.error('查询域名详情失败:', err);
      retries++;
      await new Promise(resolve => setTimeout(resolve, delay));
    }
  }
  throw new Error('超出重试次数,未获取到DNS验证记录');
}

// 使用示例
const records = await getVerificationRecords(projectName, `verify.${domain}`);

3. 先检查域名状态

在获取记录前,确认域名状态是否为pendingVerification:

if (domainDetails.status !== 'pendingVerification') {
  console.error('域名状态异常:', domainDetails.status);
  // 处理异常情况,比如域名已验证、绑定失败等
}

验证记录通常为CNAME或TXT类型,直接提取type、name、value字段即可展示给用户,指导他们在域名注册商后台添加对应记录。

内容的提问来源于stack exchange,提问作者Soufiane Hadjmoussa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 14:49:59