vue ssr笔记

2021-10-01  本文已影响0人  瓢鳍小虾虎

bsr:浏览器渲染
ssr:服务端渲染。更好的seo(特别是有些信息平台类的站点,更需要被搜索引擎优先搜到);更好的内容获取速度(少了页面首屏多次ajax请求动态拉取数据并渲染的时间)
vue框架:nuxt

路由

不需要配置路由,pages目录下的vue文件就代表一级路由标签即可,然后在跟组件上加入<nuxt/>,类似于单页面的<router-view/>

声明式导航

使用<nuxt-link/>,类似于单页面的<router-link/>

嵌套路由

父路由组件上面用<nuxt-child/>,也是个组件容器,然后创建父组件同名目录,内部放子组件。

重定向

配置nuxt.config.js



或者编写中间件



然后需要在router配置文件上面配置middleware:['yourRedirectFileName']

视图

本质还是组件
组件默认加载的是layout目录下的default.vue文件,可以在路由组件上配置layout属性,指向指定的layout组件文件名


动态获取数据

ssr和bsr的获取数据时机是不一样的。ssr会在vue解析模板之前就把数据准备好,一次渲染完成;而bsr一般是mounted回调再调ajax去拉取数据,然后重新渲染组件。

nuxt为vue组件提供了asyncData配置项,用来拉取数据。


反向代理
用户请求页面的时候请求会在后端完成,然后返回最终模板;如果是用户路由跳转,没有触发浏览器默认的xhr请求,请求是在浏览器(客户端)发送的。

由此会引发另一个问题:浏览器上请求会出现跨域问题。

因此需要服务端配置好反向代理:

npm -i @nuxtjs/axios -D // 这个应该不用手动装,脚手架应该装好了
npm -i @nuxtjs/proxy -D

在nuxtjs.config.js中添加axios和proxy模块,并配置反向代理

{
  modules: {
    '@nuxtjs/axios',
    '@nuxtjs/proxy'
  },
  axios: {
    proxy: true
  },
  proxy: {
    '/api': {
      target: 'http://xxx.com',
      pathRewrite: {
        '^/api': ''
      },
      changeOrigin: true
    }
  }
}

还有一点要注意的是,组件内axios请求的地址配置要调整:

url: process.server ? 'http://xxx.com/api/aaa' : '/api/aaa'

process.server是一个全局变量,用来标识当前环境是不是服务端

第三方组件库(element ui为例)
配置nuxt.config.js

{
  css: ['element-ui/lib/theme-chalk/index.css'],
  plugins: [
    '@/plugins/element-ui'
  ]
}
上一篇 下一篇

猜你喜欢

热点阅读