团队博客
Nuxt 框架服务端渲染
丁汤立 2023-09
什么是 Nuxt.js
Nuxt.js 是通用的 VUE 的一个 SSR 框架(服务器端渲染)。官方介绍是通过对客户端/服务端基础框架的抽象组织,Nuxt.js 主要关注的应用的 UI 渲染。
什么是 SSR
SSR 是在服务器端把 vue 文件直接渲染成 html 返回给浏览器。SSR 对 SEO 的支持非常好,以前用 vue 做的 SPA(单页应用)对搜索引擎是不友好的,搜索引擎不好抓取单页应用;相对比 SPA 加载速度快,SSR 是直接将 html 字符串传给浏览器。
Nuxt.js 的特点
- 自动代码分层;
- 服务端渲染;
- 强大的路由功能,支持异步数据;
- 静态文件服务;
- ES6/ES7 语法支持;
- 打包压缩 js 和 css;
- HTML 头部标签管理;
- 本地开发支持热加载;
- 集成 ESLint;
- 支持各种样式处理器:SASS、LESS 等等。
Nuxt.js 路由传参跳转
在 pages 的目录结构如下创建 xxx.vue,Nuxt.js 会自动生成的路由配置,要在页面之间使用路由,使用标签
路由跳转
<template> <nuxt-link to="/">首页</nuxt-link> </template> 路由传参跳转(可参考vue的路由传参) <template> <nuxt-link : to="{name: '/', params:{id:'1'}}">首页</nuxt-link> </template>
Nuxt.js 生命周期
nuxtServerlnit
服务器初始化,以在这个生命周期中获取 token,并存储(只会运行一次)。在 store 文件中创建 index.js
export const actions = { nuxtServerlnit(store, context) { // 服务器初始化store console.log(store, context); }, };
moddleware
中间件运行,类似于 vue.js 中的导航守卫,可以是全局的,路由的,组件的。可以在这个生命周期中进行用户是否登录判断;可全局 nuxt.config.js 进行配置、可在页面组件中配置(layout)、也可在布局组件中配置(page&children)
校验参数,用来做校验做 url 参数对不对的.主要是在页面中使用。
// nuxt.config.js中配置(全局配置) module.exports = { router: { middleware: 'auth' } } // 在middleware文件中创建auth.js export default ({store,route,redirect,params,query,req,res})=>{ // 全局守卫 console.log('middleware'); } // 在布局层页面配置,在layouts文件中的default.vue <script> export default { // middleware: ‘auth’ // 布局层中间件定义 middleware(){ console.log('middleware'); } } </script> // 在页面中配置。在pages文件中 <script> export default { // middleware: ‘auth’ // 页面层中间件定义 middleware(){ console.log('middleware'); } } </script>
validate
校验参数,用来做校验做 url 参数对不对的.主要是在页面中使用。
<script> export default { validate ({params,query}){ console.log('validate') return true } } </script>
asyncData
异步数据处理,限于页面组件(pages)中使用个,components 中不能使用每次加载之前被调用。一般在这个函数中发送请求,读取服务端数据
fetch
异步数据处理,可以在页面、组件中都能使用。读取服务端数据提交给 vuex
render
开始客户端渲染
服务端和客户端公用个的生命周期 (el 还没有被渲染)
beforeCreate(); created();
注:服务端不存在 window,不要在服务端生命周期获取
客户端的生命周期
beforeMount(); mounted();
meta 信息注入
可方便爬虫爬到该网站的基本描述信息。在 nuxt.config.js 文件中配置
module.exports = { head: { title: "网站统一标题", meta: [ { charset: "utf-8" }, { hid: "description", name: "description", content: "网站描述信息" }, // meta标签的hid在每一个配置中保持一致 ], link: [{ rel: "icon", type: "image/x-icon", href: "/favicon.ico" }], }, };
页面中自定义信息描述
export default { head() { return { meta: [], }; }, };
Nuxt 部署
在 nuxt.config.js 文件中配置
module.exports = { server: { port: 3000 // 指定nutx端口,默认为3000 host: '0.0.0.0' // 指定主机地址(本地) } }
npm run build
进行打包,我们需要复制到服务器的文件:.nuxt、package-lock.json、package.json、nuxt.config.js、static、server(反向代理)
感兴趣的可以自行查阅官方文档