Nuxt 项目梳理
在公司实习时,参与的第一个任务是负责从头搭建某医疗机构的 h5 页面端。h5 端和 pc 端的页面仅供浏览信息使用,不像 app 端有用户注册登录及一系列交互操作的页面,因此整体难度不高。因为上司没有指明要使用何种框架,所以我照搬了公司用来测试前端实习生水平的一个伪项目所用的框架——Nuxt。本文用来梳理在搭建这个 Nuxt 项目时需要了解的一些知识点。
一、Nuxt.js 介绍
传统的 web 开发(jsp
、php
、asp
)中,服务端收到客户端的请求后,查询数据库,将整个 HTML 页面返回给客户端,浏览器相当于打开了一个新页面。也就是传统的MVC
的开发。
后来如 Vue、React 等单页面应用(Single Page Application, SPA),以其优秀的用户体验逐渐成为主流。它的网页渲染过程是,客户端初次请求服务端时,服务端会返回一个只有基本结构的HTML
。客户端收到后开始执行对应javaScript
渲染template
。之后当客户端再向服务端发送请求,服务端返回的都是json
格式的数据。客户端接收数据,然后完成最终渲染。SPA 的页面整体是 JavaScript 渲染出来的,即客户端渲染(Client Side Rendering, CSR)。
SPA 虽然减轻了服务器的压力,但也存在缺点:
- 首屏渲染时间较长:必须等待
JavaScript
加载和执行完毕后才能渲染出首屏; SEO
不友好:爬虫只能拿到一个div
元素,会当作空页面,不利于SEO
。
为了解决如上问题,服务端渲染(Server Side Rendering, SSR)应运而生:由服务端负责将数据渲染到首屏的DOM
结构并返回 HTML,后续其它路由的页面仍然由客户端渲染。这样用户在浏览首屏时速度会很快,因为无需对首屏发送ajax
请求。尽管添加了 SSR,本质上它仍然是一个 SPA 应用。而 Nuxt.js 是由 Vue.js 衍生出的框架,最常就是用于 SSR。
二、Nuxt.js 目录结构
1 | └─my-nuxt-demo |
三、Nuxt 路由配置
1. 基本路由
Nuxt.js 依据 pages
目录结构自动生成 vue-router
模块的路由配置。
假设 pages
的目录结构如下:
1 | └─pages |
那么,Nuxt.js 自动生成的路由配置如下:
1 | router: { |
有如下两种方法进行页面跳转,推荐前者。
<nuxt-link to="/users"></nuxt-link>
this.$router.push('/users');
2. 动态路由
定义带参数的动态路由,需要创建对应的以下划线作为前缀的 Vue 文件或目录。可以通过{{$route.params.id}}
获取动态参数。