javascript - Firebase 上的 Nuxt 动态路由
问题描述
我的 Nuxt.js 应用程序具有以下结构:
/pages/index.vue
/pages/_slug/index.vue
当用户获取时/{any_page}
,它将使用路径来构建页面内容:
/pages/_slug/index.vue
<template>
<div>
{{slug}}
</div>
</template>
<script>
import fetch from 'isomorphic-fetch';
export default {
async asyncData({ params }) {
return { slug: params.slug }
}
}
</script>
当直接通过yarn dev
.
当我尝试使用 firebase 函数运行它时:
$ firebase serve --only functions,hosting
静态路由完美运行,但动态路由总是呈现默认/
页面,而不是执行动态页面。我该如何解决?
解决方案
如果使用nuxt generate
,那么下面的解释应该有效。如果使用nuxt build
,请查看此repo,它是我为 nuxt + firebase 作为 ssr 编写的模板。
Generate表示它会跳过动态路由,除非您明确指定它们,因此会出现 404 错误。在您的 Nuxt 配置文件中,您要指定这些路由。这是生成期间从数据库中获取的示例。请注意,在下面的示例中,文档 ID 是页面的 slug。
nuxt.config.js
generate: {
async routes() {
const { db } = require('./services/fireInit');
const qs = await db.collection('recipes').get();
return qs.docs.map(x => `/recipes/${x.id}`);
}
},
这种方法的缺点是当您通过 CMS 添加新项目时,如果您希望能够在没有 404 的情况下使用这些新链接,则每次都需要重建/部署您的网站。如果您导航到新内容“有机地”...404 仅发生在页面刷新或从超链接直接跳转到页面时。
推荐阅读
- php - 传递 Jquery 文本参数在我的 php mysql 数据库中不起作用
- android - 在非 OREO 设备上以编程方式暂停通知
- f# - 带有重复键的 Map.ofSeq 的行为是什么?
- javascript - 使用javascript包含JS文件时如何确保在执行任务之前加载所有JS文件
- c# - 控制结构范围和具体对象的转换接口
- html - 带有 HTML 标记的 Cognito 自定义消息
- jquery - 使用 JQuery 取消绑定文本输入的自定义键事件
- excel - SSRS 中每个 Excel 工作表上的列标题不重复
- vb.net - 如何在 InvalidRowException 事件处理程序中获取错误列?
- python - 编码数据集的部分