📋 問題背景
執行 upload-html 部署時遭遇連續錯誤,經過多次診斷最終成功解決。
錯誤演變過程:
1.
2.
3.
4.
1.
code: 9106 → Token 無效或未設置2.
code: 10000 → Account ID 錯誤(權限錯誤)3.
code: 8000007 → 專案不存在4.
HTTP 400 → API URL 格式錯誤(per_page 參數不支援)
🔍 根本原因分析
| 問題 | 原因 | 影響 |
|---|---|---|
| Account ID 錯誤 | 使用了 Dashboard 顯示的舊帳號 ID | Token 無法認證 |
| 環境變數未永久保存 | 只設定了 Session 變數 | 重開後設定遺失 |
| 專案名稱錯誤 | 建立了錯誤名稱的專案 | 部署到錯誤位置 |
💡 關鍵發現
⚠️ 最重要:Account ID 必須從 wrangler whoami 取得
Dashboard 顯示的 Account ID 可能是舊帳號或不同帳號,
必須使用
Dashboard 顯示的 Account ID 可能是舊帳號或不同帳號,
必須使用
wrangler whoami 顯示的 ID 才是 Token 實際關聯的帳號。
# 正確查詢方式
$env:CLOUDFLARE_API_TOKEN = "你的Token"
wrangler whoami
# 輸出示例:
# 👋 You are logged in with an API Token.
# 🔓 Your Token ID: xxx
# 📧 Your Account: 2279623487@qq.com's Account
# 🏠 Your Account ID: 2f2795bc4a98928375b23c36140ba33b ← 使用這個!
✅ 正確設置步驟(永久有效)
步驟 1:設置環境變數(永久)
# 設置 Token
[Environment]::SetEnvironmentVariable("CF_API_TOKEN", "cfat_xxxxxxxx", "User")
# 設置正確的 Account ID(從 wrangler whoami 取得)
[Environment]::SetEnvironmentVariable("CF_ACCOUNT_ID", "2f2795bc4a98928375b23c36140ba33b", "User")
步驟 2:部署命令
# 載入環境變量
$env:CLOUDFLARE_API_TOKEN = [Environment]::GetEnvironmentVariable("CF_API_TOKEN", "User")
$env:CLOUDFLARE_ACCOUNT_ID = [Environment]::GetEnvironmentVariable("CF_ACCOUNT_ID", "User")
# 執行部署
wrangler pages deploy . --project-name="aiworkforme"
❌ 常見錯誤對照表
| 錯誤碼 | 原因 | 解決方案 |
|---|---|---|
9106 |
Token 無效或未設置 | 檢查 CF_API_TOKEN 是否正確設置 |
10000 |
Account ID 錯誤 | 使用 wrangler whoami 的 ID |
8000007 |
專案不存在 | 建立專案或檢查名稱 |
HTTP 400 |
API URL 包含不支援的參數 | 移除 ?per_page=50 參數 |
📝 主公目前的正確配置
- Token:
cfat_7Y1By...✅ - Account ID:
2f2795bc4a98928375b23c36140ba33b✅ - 專案名稱:
aiworkforme✅ - 部署網址:
https://3b5fa96e.aiworkforme.pages.dev✅
⚠️ 關鍵提醒
設置環境變數時必須使用 "User" 參數:
❌ 錯誤:
✅ 正確:
缺少 "User" 參數只會設定 Session 變數,重開後會遺失!
❌ 錯誤:
[Environment]::SetEnvironmentVariable("CF_ACCOUNT_ID", "xxx")✅ 正確:
[Environment]::SetEnvironmentVariable("CF_ACCOUNT_ID", "xxx", "User")缺少 "User" 參數只會設定 Session 變數,重開後會遺失!
❌ HTTP 400 Bad Request(API URL 格式問題)
錯誤現象:
使用 PowerShell
使用 PowerShell
Invoke-RestMethod 或 Node.js 調用 CF Pages API 時返回 400 錯誤,
但 Token 和 Account ID 都正確。
觸發條件
# ❌ 錯誤写法(PowerShell)
Invoke-RestMethod -Uri "https://api.cloudflare.com/client/v4/accounts/{id}/pages/projects?per_page=50"
# ❌ 錯誤写法(Node.js)
https.request('/client/v4/accounts/{id}/pages/projects?per_page=50', ...)
根本原因
⚠️ Cloudflare Pages API 不支援
這與大多數 REST API 不同,CF Pages API 的
per_page 查詢參數這與大多數 REST API 不同,CF Pages API 的
/pages/projects endpoint
沒有分頁參數,直接返回所有專案。
解決方案
# ✅ 正確写法(PowerShell)
Invoke-RestMethod -Uri "https://api.cloudflare.com/client/v4/accounts/{id}/pages/projects"
# ✅ 正確写法(Node.js)
https.request('/client/v4/accounts/{id}/pages/projects', ...)
✅ Node.js 完整範例(推薦)
node -e "
const https = require('https');
const token = process.env.CF_API_TOKEN;
const accountId = '2f2795bc4a98928375b23c36140ba33b';
const options = {
hostname: 'api.cloudflare.com',
path: '/client/v4/accounts/' + accountId + '/pages/projects',
method: 'GET',
headers: {
'Authorization': 'Bearer ' + token,
'Content-Type': 'application/json'
}
};
https.request(options, r => {
let d = '';
r.on('data', c => d += c);
r.on('end', () => {
const j = JSON.parse(d);
if (j.success) {
console.log('專案數量:', j.result.length);
j.result.forEach(p => console.log(p.name));
} else {
console.log('錯誤:', JSON.stringify(j));
}
});
}).end();
"
| 方法 | per_page 參數 | 狀態 |
|---|---|---|
| PowerShell Invoke-RestMethod | ❌ 不支援 | 返回 400 |
| Node.js https.request | ❌ 不支援 | 返回 400 |
| wrangler CLI | 自動處理 | ✅ 正常 |
📎 相關備忘
詳細問題分析與過程記錄:16 Token 錯誤解決