| @@ -99,12 +99,7 @@ export async function useArticleDetail(colId) { | |||||
| const { post } = useApi() | const { post } = useApi() | ||||
| const id = parseArticleId(route.params.id) | const id = parseArticleId(route.params.id) | ||||
| /** | |||||
| * 注意:所有依赖 Nuxt 上下文的组合式函数(useSeoMeta / useHead / navigateTo) | |||||
| * 必须在 await 之前调用,await 之后上下文会丢失(NUXT_E1001)。 | |||||
| * 因此这里先注册 SEO(用 getter 读取 data),最后再 await 数据做 404 判断。 | |||||
| */ | |||||
| const asyncData = useAsyncData(`article-${id}`, async () => { | |||||
| const asyncData = await useAsyncData(`article-${id}`, async () => { | |||||
| const [detailRes, hotRes, tagRes] = await Promise.all([ | const [detailRes, hotRes, tagRes] = await Promise.all([ | ||||
| post('/article/getdetail', { id, prev_next: 1 }), | post('/article/getdetail', { id, prev_next: 1 }), | ||||
| post('/article/gethotlist', { page_no: 1, page_size: 10 }).catch(() => ({ list: [] })), | post('/article/gethotlist', { page_no: 1, page_size: 10 }).catch(() => ({ list: [] })), | ||||
| @@ -151,9 +146,6 @@ export async function useArticleDetail(colId) { | |||||
| }], | }], | ||||
| }) | }) | ||||
| // 等数据就绪后再判断(await 之后不能再调用需要上下文的组合式函数) | |||||
| await asyncData | |||||
| // 文章不存在 → 404,避免无效页面被搜索引擎收录 | // 文章不存在 → 404,避免无效页面被搜索引擎收录 | ||||
| if (error.value || !data.value?.detail?.id) { | if (error.value || !data.value?.detail?.id) { | ||||
| throw createError({ statusCode: 404, statusMessage: '文章不存在', fatal: true }) | throw createError({ statusCode: 404, statusMessage: '文章不存在', fatal: true }) | ||||