vue.js - Nuxt generate 让我的动态路由正常工作
问题描述
我将 nuxt 用于静态 webapp,使用“mode: spa”和“nuxt generate”。
文档说动态路由不适用于此,但我的应用程序(/dist)在生成后仍然可以在静态服务器上运行,即使没有生成路由。我不知道为什么。
在生成之前,我的路线如下所示:
export function createRouter () {
return new Router({
mode: 'history',
base: '/',
routes: [
{
path: "/",
component: _36d3a217,
name: "index"
},
{
path: "/:focus",
component: _fbe76838,
children: [
{
path: "",
component: _6d415767,
name: "focus"
},
{
path: ":view",
component: _19cdee48,
name: "focus-view"
}
]
}
],
fallback: false
})
}
现在,生成的 /dist 没有按预期创建 /focus 目录......但是在我的应用程序中,我使用路由 URL 参数来查询 API,它仍然有效。
即如下所示的路由,组件将使用“thisFocus”和“thisView”作为 API 中的参数:
/thisFocus/thisView
由于 /dist 中不存在动态路由,我认为这将不再起作用。那么应用程序如何在没有路由的情况下成功使用这些 URL 参数呢?
编辑:另一种更简单的询问方式:为什么即使路线不存在,我仍然可以访问 /:focus/:view route.params?
解决方案
如果您使用nuxt generate
,您通常需要一个静态生成的页面。这意味着,每个路由都有一个 HTML 文件,其中包含由服务器呈现的实际 HTML。
你想要它,因为它会给你“两全其美”、良好的 SEO、更快的 TTI 等等,但无需一直运行 Node.js 服务器。(进一步阅读)
如果你想要一个传统的 SPA,你通常只有一个index.html
几乎没有 HTML 但包含 Javascript 的文件。
动态路线
当您“预渲染”(=== 静态生成)页面时,Nuxt 需要它应该渲染的路由信息。对于没有参数的路线,这很容易(例如about.vue
或posts/index.vue
)。只要有动态参数,Nuxt 就无法“猜测”它们。
所以是的,动态路由被“忽略”,因为 Nuxt 不知道如何处理它们,除非你告诉 Nuxt 哪些路由要预渲染。
然后将生成这些路由。这并不意味着您无法访问未提供给 Nuxt 的动态路由。您仍然可以访问它们(例如:不存在的帖子)并且请求将被解析(取决于您的服务器配置以及您是否已generate.fallback
启用)但您将失去 SEO 优势并将微调器视为后备文件相当于index.html
从你的传统SPA。
推荐阅读
- amazon-web-services - AWS ECS nginx:在上游找不到 [emerg] 主机
- r - 如何使用 igraph R 包比较两个图以识别两个图之间相同/不同边的数量
- java - 如何立即杀死Java中的线程
- c# - Thread_UseAllCPUGroups 是否只影响默认任务计划程序?
- javascript - discord.js 上的 ping 命令
- javascript - 量角器 - 通过 npm run 运行测试时出现“指定了多个配置”错误,但前提是使用了 --capabilities.chromeOptions.binary 参数
- sql - 从数组转换的json字符串中提取字段
- kivy - Kivy VKeyboard,光标闪烁,无双开
- c++ - 文件更新后 CfSetInSyncState 失败并显示 ERROR_NOT_A_CLOUD_FILE
- swift - NSComboBox 点击后立即消失