加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

Vue服务器端渲染nuxt.js初探

发布时间:2019-01-31 18:11:39 所属栏目:优化 来源:佚名
导读:开头还是来一段废话: 年关将近,给大家拜个早年,愿大家年会都能抽大奖,来年行大运。 废话不多说,直接进正文。 项目环境: 前端vue项目, 需要将新增的几个路由页面做seo处理。 在调研 插件 prerender-spa-plugin后,发现无法满足 vuex 以及 plugins 等

需要在 assets/目录下创建 main.css 添加全局样式。

  1. .page-enter-active, .page-leave-active {  
  2. transition: opacity .5s;  
  3. }  
  4. .page-enter, .page-leave-active {  
  5. opacity: 0;  
  6. }  

然后添加到 nuxt.config.js 文件中:

  1. module.exports = {  
  2. css: [  
  3. 'assets/main.css'  
  4. ],  
  5. loading: { color: '#2152F3' },  
  6. }  

更多过渡效果: https://zh.nuxtjs.org/guide/routing#过渡动效

头部信息 (Meta 标签 ,全局样式)

nuxt.config.js 里定义应用所需的所有默认 meta 标签

  1. head: {  
  2. meta: [  
  3. { charset: 'utf-8' },  
  4. { name: 'viewport', content: 'width=device-width, initial-scale=1' }  
  5. { hid: 'description', name: 'description', content: '' }  
  6. ],  
  7. link: [ // 这里可以引用全局的样式,但是会默认走根目录  
  8. { rel: 'stylesheet', href: 'https://fonts.googleapis.com/css?family=Roboto' }  
  9. { rel: 'stylesheet', href: '~/static/common.js' } // 文件一般都放在static目录下  
  10. ]  
  11. }  

具体参考:https://zh.nuxtjs.org/api/configuration-head

异步数据 (asyncData方法,限于page页面组件,components中不适用)

这里包括 asyncData钩子 / fetch 钩子 / 。。。

【fetch】 用于在渲染页面前填充应用的状态树(store)数据, 与 asyncData 方法类似,不同的是它不会设置组件的数据

【asyncData】 主要用于请求ajax 填充data中的数据

每次加载之前被调用。它可以在服务端或路由更新之前被调用。

  1. asyncData ({ params }) {  
  2. return axios.get(`https://my-api/posts/${params.id}`) 
  3. .then((res) => {  
  4. // 赋值给页面 data中的数据  
  5. return { title: res.data.title }  
  6. })  
  7. }  

或者变换为同步请求:

  1. async asyncData() {  
  2. let formData = {}  
  3. let ajaxData = await axios({  
  4. method: "post",  
  5. url: url,  
  6. data: qs.stringify(formData),  
  7. retryDelay : 1000,  
  8. withCredentials : true,  
  9. responseType : 'json',  
  10. timeout : 60000,  
  11. 'Content-Type' : 'application/x-www-form-urlencoded'  
  12. })  
  13. }  

注意添加 catch

注意:

这个异步请求函数, 第一次执行环境为node环境中,也就是服务器端,后续刷新页面则执行环境为client 客户端

本地开发时,如果在客户端直接请求完整路径时会经常遇到跨域问题,所以需要在 asyncData 中区分环境变量

process.env.VUE_ENV 区分 是server 还是 client

然后根据不同的环境配置不同的 url , 并且在 client时, 需要做服务器端代理请求,需要给url增加一层代理标识

例如:client环境中

  1. url = '/api' + '/get-user-info';  
  2. nuxt.config.js 中  
  3. /*  
  4. ** 处理代理跨域问题  
  5. */  
  6. axios: {  
  7. proxy: true,  
  8. prefix: '/api', // 增加请求标识  
  9. credentials: true,  
  10. },  
  11. proxy: {  
  12. '/api': {  
  13. // 代理地址  
  14. target: (process.env.NODE_ENV == 'production') ?'http://test.' : 'http://www.' ,  
  15. changeOrigin: true,  
  16. pathRewrite: {  
  17. '^/api': '' // 将标识 替换为 ‘’  
  18. },  
  19. },  
  20. }  

错误处理 :

context中提供了一个 error(params) 方法,你可以通过调用该方法来显示错误信息页面。

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读