当你的应用程序以单页应用程序(SPA)的形式运行时,一切都发生在原来的输入页面中——当你在路由之间导航时,你实际上并没有加载新页面.只要不刷新页面,这些路由是否与服务器上的实际html文件对应并不重要,因为SPA知道该怎么做.但是,如果重新加载页面或从动态路径输入,如果该URL处没有html文件,静态服务器将提供404服务,因为它不知道还能做什么.
您可能已经理解了所有这些,因为您正在运行generate
来构建静态页面.但是Nuxt的generate
命令只知道为pages
目录中的*.vue
个文件生成页面.Dynamic routes are ignored.判断你上传的dist
文件夹——每个工作URL都应该有一个对应的路径(对应于你的pages
目录),但你找不到动态路由的文件.
要解决这个问题,需要为generate
命令提供一组动态路由.您可以通过将something like this添加到nuxt.config.js
:
generate: {
// create an array of all routes for generating static pages
// careful, this is only used by `npm run generate`. These must match SPA mode routes
routes: function () {
return axios.get(
'https://jsonplaceholder.typicode.com/users'
)
.then((response) => {
let users = response.data.map((user) => {
return {
route: '/users/' + user.id,
payload: user
}
});
return ['/some-other-dynamic-route-or-array-of-routes/', ...users]
});
}
}
Here's a nice article about static sites with Nuxt with examples
如果你在dist
目录中看到页面,你就会知道页面是按预期生成的.
编辑:你也可以使用hash mode.所以你的URL不是https://ip:port/entryPath/dashboard/user/123
而是https://ip:port/entryPath#dashboard/user/123
.在这种情况下,服务器总是请求根SPA索引.html,它将使用路由来确定要做什么(因此当您导航到该路由时,它应该像现在一样执行).如果你这样做,你只需要使用SPA模式,根本不需要生成任何页面.这对搜索引擎优化不好,但你可以立即使用可共享的URL.