diff --git a/src/lib/utils/slugify.ts b/src/lib/utils/slugify.ts index 2817444..cb5abd3 100644 --- a/src/lib/utils/slugify.ts +++ b/src/lib/utils/slugify.ts @@ -1,3 +1,5 @@ +import { addToast } from '$lib/stores/toast.svelte'; + /** * 发送请求至后台 /api/slugify 接口生成英文 Slug */ @@ -13,12 +15,17 @@ export async function fetchSlug(text: string): Promise { body: JSON.stringify({ text }) }); - if (res.ok) { - const data = (await res.json()) as { slug?: string }; - return data.slug || ''; + const data = (await res.json()) as { slug?: string; error?: string }; + + if (!res.ok || data.error) { + addToast(data.error || '获取 Slug 失败', 'error'); + return ''; } + + return data.slug || ''; } catch (err) { console.error('获取 Slug 错误:', err); + addToast('网络请求异常,无法获取 Slug', 'error'); } return ''; } diff --git a/src/routes/api/slugify/+server.ts b/src/routes/api/slugify/+server.ts index 7ec103a..a728206 100644 --- a/src/routes/api/slugify/+server.ts +++ b/src/routes/api/slugify/+server.ts @@ -27,24 +27,29 @@ export const POST: RequestHandler = async ({ request, platform }) => { let translatedText = ''; - // 优先调用 Cloudflare Workers AI (@cf/meta/m2m100_418m 翻译模型) + // 优先调用 Cloudflare Workers AI (@cf/meta/m2m100-1.2b 翻译模型) if (platform?.env?.AI) { try { - const res = (await platform.env.AI.run('@cf/meta/m2m100_418m', { + const res = (await platform.env.AI.run('@cf/meta/m2m100-1.2b', { text, - source_lang: 'zh', - target_lang: 'en' + source_lang: 'chinese', + target_lang: 'english' })) as { translated_text?: string }; if (res?.translated_text) { translatedText = res.translated_text; } } catch (err) { - console.warn('Workers AI 翻译异常,启动安全降级:', err); + const errorMsg = err instanceof Error ? err.message : String(err); + console.warn('Workers AI 翻译异常:', err); + return json({ error: `AI 翻译异常: ${errorMsg}` }, { status: 500 }); } + } else { + // 没有找到 AI 绑定 + return json({ error: '本地开发未绑定 Cloudflare AI 或环境缺失' }, { status: 500 }); } - // 若没有获取到英文翻译结果(平台未绑定 AI 或 AI 调用异常),将自动进入最底层的安全兜底 + // 若没有获取到英文翻译结果(AI 调用异常),将自动进入最底层的安全兜底 // 如果得到了英文翻译,格式化为 kebab-case Slug if (translatedText) {