|
|
|
@@ -99,12 +99,7 @@ export async function useArticleDetail(colId) { |
|
|
|
const { post } = useApi() |
|
|
|
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([ |
|
|
|
post('/article/getdetail', { id, prev_next: 1 }), |
|
|
|
post('/article/gethotlist', { page_no: 1, page_size: 10 }).catch(() => ({ list: [] })), |
|
|
|
@@ -151,9 +146,6 @@ export async function useArticleDetail(colId) { |
|
|
|
}], |
|
|
|
}) |
|
|
|
|
|
|
|
// 等数据就绪后再判断(await 之后不能再调用需要上下文的组合式函数) |
|
|
|
await asyncData |
|
|
|
|
|
|
|
// 文章不存在 → 404,避免无效页面被搜索引擎收录 |
|
|
|
if (error.value || !data.value?.detail?.id) { |
|
|
|
throw createError({ statusCode: 404, statusMessage: '文章不存在', fatal: true }) |
|
|
|
|