fix: 修复 CDN 刷新静默失败问题
- 添加 CDN 刷新日志输出,便于排查问题 - 添加密钥配置检查,未配置时给出明确提示 - 修复生产环境日志不输出的问题 - CDN 刷新失败不影响上传结果,仅记录警告
This commit is contained in:
15
src/index.js
15
src/index.js
@@ -18,13 +18,11 @@ const PORT = process.env.PORT || 3030;
|
|||||||
|
|
||||||
app.use(express.json());
|
app.use(express.json());
|
||||||
|
|
||||||
// 生产环境日志(仅关键信息)
|
// 日志函数(始终输出,PM2 会收集到日志文件)
|
||||||
function log(...args) {
|
function log(...args) {
|
||||||
if (process.env.NODE_ENV !== 'production') {
|
|
||||||
const timestamp = new Date().toISOString();
|
const timestamp = new Date().toISOString();
|
||||||
console.log(`[${timestamp}]`, ...args);
|
console.log(`[${timestamp}]`, ...args);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// 加载完整配置
|
// 加载完整配置
|
||||||
function loadFullConfig() {
|
function loadFullConfig() {
|
||||||
@@ -503,7 +501,16 @@ async function doUpload(chatId, feishu, uploader, info) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const result = await uploader.upload(tempFile, targetKey, bucket);
|
const result = await uploader.upload(tempFile, targetKey, bucket);
|
||||||
await uploader.refreshCDN(bucket, targetKey);
|
|
||||||
|
// 刷新 CDN(带日志回调)
|
||||||
|
try {
|
||||||
|
await uploader.refreshCDN(bucket, targetKey, (msg) => {
|
||||||
|
log(msg);
|
||||||
|
});
|
||||||
|
} catch (cdnError) {
|
||||||
|
log('⚠️ CDN 刷新失败,但上传成功:', cdnError.message);
|
||||||
|
// CDN 刷新失败不影响上传结果,继续
|
||||||
|
}
|
||||||
|
|
||||||
// 获取实际存储桶名称(不是配置别名)
|
// 获取实际存储桶名称(不是配置别名)
|
||||||
const fullConfig = loadFullConfig();
|
const fullConfig = loadFullConfig();
|
||||||
|
|||||||
@@ -153,17 +153,29 @@ class QiniuUploader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 刷新 CDN
|
// 刷新 CDN
|
||||||
async refreshCDN(bucketName, key) {
|
async refreshCDN(bucketName, key, logCallback) {
|
||||||
const bucketConfig = this.config.buckets[bucketName];
|
const bucketConfig = this.config.buckets[bucketName];
|
||||||
if (!bucketConfig) return;
|
if (!bucketConfig) {
|
||||||
|
if (logCallback) logCallback(`[CDN 刷新] 存储桶 "${bucketName}" 配置不存在`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const { accessKey, secretKey, domain } = bucketConfig;
|
const { accessKey, secretKey, domain } = bucketConfig;
|
||||||
|
|
||||||
|
// 检查密钥是否有效
|
||||||
|
if (!accessKey || !secretKey || accessKey === 'YOUR_ACCESS_KEY' || secretKey === 'YOUR_SECRET_KEY') {
|
||||||
|
if (logCallback) logCallback(`[CDN 刷新] 警告:存储桶 "${bucketName}" 的密钥未配置,跳过 CDN 刷新`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const fileUrl = `${domain}/${key}`;
|
const fileUrl = `${domain}/${key}`;
|
||||||
|
if (logCallback) logCallback(`[CDN 刷新] 请求刷新 URL: ${fileUrl}`);
|
||||||
|
|
||||||
const body = JSON.stringify({ urls: [fileUrl] });
|
const body = JSON.stringify({ urls: [fileUrl] });
|
||||||
const accessToken = this.generateAccessToken(accessKey, secretKey, 'POST', '/v2/tune/refresh', body);
|
const accessToken = this.generateAccessToken(accessKey, secretKey, 'POST', '/v2/tune/refresh', body);
|
||||||
|
|
||||||
await this.httpRequest('https://fusion.qiniuapi.com/v2/tune/refresh', {
|
try {
|
||||||
|
const result = await this.httpRequest('https://fusion.qiniuapi.com/v2/tune/refresh', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
'Host': 'fusion.qiniuapi.com',
|
'Host': 'fusion.qiniuapi.com',
|
||||||
@@ -172,6 +184,20 @@ class QiniuUploader {
|
|||||||
'Authorization': accessToken
|
'Authorization': accessToken
|
||||||
}
|
}
|
||||||
}, body);
|
}, body);
|
||||||
|
|
||||||
|
if (logCallback) logCallback(`[CDN 刷新] 响应状态:${result.status}, 数据:${JSON.stringify(result.data)}`);
|
||||||
|
|
||||||
|
if (result.status !== 200) {
|
||||||
|
throw new Error(`CDN 刷新失败:${JSON.stringify(result.data)}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (logCallback) logCallback(`[CDN 刷新] ✅ 刷新成功`);
|
||||||
|
|
||||||
|
return result.data;
|
||||||
|
} catch (error) {
|
||||||
|
if (logCallback) logCallback(`[CDN 刷新] ❌ 错误:${error.message}`);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 生成上传凭证
|
// 生成上传凭证
|
||||||
|
|||||||
Reference in New Issue
Block a user