diff --git a/server/routers/back-new/features/image/image.controller.js b/server/routers/back-new/features/image/image.controller.js
index b0ccd7d..ada3233 100644
--- a/server/routers/back-new/features/image/image.controller.js
+++ b/server/routers/back-new/features/image/image.controller.js
@@ -110,6 +110,20 @@ async function fetchImageContent(accessToken, imageId) {
}
}
+// 工具函数:异步重试
+async function retryAsync(fn, times = 3, delay = 800) {
+ let lastErr;
+ for (let i = 0; i < times; i++) {
+ try {
+ return await fn();
+ } catch (err) {
+ lastErr = err;
+ if (i < times - 1 && delay) await new Promise(r => setTimeout(r, delay));
+ }
+ }
+ throw lastErr;
+}
+
exports.generate = async (req, res) => {
const { prompt } = req.query;
if (!prompt) {
@@ -122,14 +136,17 @@ exports.generate = async (req, res) => {
return res.status(500).json({ error: e.message });
}
try {
- const content = await fetchChatContent(accessToken, prompt);
- const match = content.match(/
fetchChatContent(accessToken, prompt), 3, 800);
+ // 升级正则,兼容更多图片标签格式
+ const match = content.match(/
]+src=['"]([^'"]+)['"]/);
if (!match) {
console.error('AI生成图片出错: GigaChat未返回图片标签');
return res.status(500).json({ error: 'No image generated' });
}
const imageId = match[1];
- const imageData = await fetchImageContent(accessToken, imageId);
+ // 2. 重试获取图片内容
+ const imageData = await retryAsync(() => fetchImageContent(accessToken, imageId), 3, 800);
res.set('Content-Type', 'image/jpeg');
res.set('X-HATEOAS', JSON.stringify(makeLinks('/gigachat', { self: '/prompt' })));
res.send(imageData);