如何通过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
相关产品推荐
相关产品推荐

