zhanghe
侠客
侠客
  • 最后登录2023-02-24
  • 发帖数7
阅读:8727回复:1

nuxt页面报错window is not defined

楼主#
更多 发布于:2020-03-19 17:19

图片:1584609432(1).jpg

doubleyong
管理员
管理员
  • 最后登录2026-05-25
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
沙发#
发布于:2020-03-20 10:36
原因:nuxtjs作为一个服务端渲染的库,代码应该在node环境执行,浏览器的执行环境和node的执行环境是有差异的,node上是没有window或document这样的对象,所以会报错。
解决方案:
方法1:
在plugins文件夹中定义对应插件,比如cookie.js
//cookie.js
import Vue from 'vue'
import VueCookie from 'vue-cookie'
Vue.use(VueCookie)
然后在nuxt.config.js中引入该插件,ssr设置为false
/*
 ** Plugins
 */
 plugins: [
   { src: '~plugins/mint-ui', ssr: true }, 
   { src: '~plugins/cookie', ssr: false }   //ssr设置为false的时候,只在客户端引入
 ],

若还不能成功可能是如下原因
在SSR中,created生命周期在服务端执行,把需要执行系统对象的代码放到mounted生命周期里,待node服务端渲染完成之后则可以正常使用,也就是在ssr所有功能实现之后在执行。


方法2:

假如没有该对象或方法,可以用一个空对象或方法填充:


if (!window) { window = {}; }
if (!window.localStorage) { window.localStorage = {}; }
if (!window.localStorage.getItem) { window.localStorage.getItem = function() {} }

或者干脆不执行,跳过这段代码
if (window) {
    window.localStorage.getItem('uid')
}

最终生成的代码会保留源代码,这些代码在浏览端是能够正常运行的,只是在node上会被忽略

参考:

https://segmentfault.com/q/1010000018136511
https://www.cnblogs.com/elza-young/p/10164481.html



网上查看到的相关资料,楼主可以根据上面的方法,排查一下原因
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号