解决服务端渲染程序SSR运行时报错: ReferenceError: document is not defined
现象:

原因: 该错误表明在服务端渲染 (SSR) 过程中,有一些代码尝试在没有浏览器环境的情况下执行与浏览器相关的操作。这在服务端渲染期间是一个常见的问题,因为在服务端渲染期间是没有浏览器 API。
解决办法:
1. 修改原始代码: 避免在组件代码中使用dom的原生api
备注:组件代码是指.vue这样的程序文件,它会被打包到server-bundle这样的服务端渲染js程序中,运行环境是node, 所以没法识别这些dom对象的api。

而js,ts文件则会打包到client-bundle的客户端渲染js程序中,是使用script标签嵌入html文件中,运行环境是浏览器,所以不会有这个问题:

2. 使用jsdom模拟浏览器环境:
在ssr服务端的启动程序中加入以下代码
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const dom = new JSDOM("<!DOCTYPE html><html><body></body></html>");
global.window = dom.window;
global.document = dom.window.document;

但注意:jsdom的版本不可过高,否则会报错:SyntaxError: Unexpected token '||='

因为: ||= 这个新的 JavaScript 语法,它是 ECMAScript 2022 中的新特性,但可能在当前的 Node.js 版本中不被支持,必须降低jsdom版本到兼容当前node版本的版本

相关文章:
解决服务端渲染程序SSR运行时报错: ReferenceError: document is not defined
现象: 原因: 该错误表明在服务端渲染 (SSR) 过程中,有一些代码尝试在没有浏览器环境的情况下执行与浏览器相关的操作。这在服务端渲染期间是一个常见的问题,因为在服务端渲染期间是没有浏览器 API。 解决办法: 1. 修…...
【漏洞复现】狮子鱼任意文件上传漏洞
漏洞描述 狮子鱼CMS(Content Management System)是一种网站管理系统,旨在帮助用户更轻松地创建和管理网站。它具有用户友好的界面和丰富的功能,包括页面管理、博客、新闻、产品展示等。 狮子鱼CMS使用简单直观的管理界面,使得网站所有者可以方便地进行内容的发布、管理和…...
LINUX 下部署github仓库
打开tumx django-admin startproject project_name #创建django项目 project_name配置git ssh-keygen # 生成密钥 连接 github 在github中打开setting 添加密钥 并且允许 write access git init # 把当前文件夹配置为git仓库 git config --global user.name xxx git config --g…...
CentOS中安装数据库
1.下载 网址:https://dev.mysql.com/downloads/mysql/ 按如图选择,然后点击Download 这里它让我们登录,我们直接选择不登录,直接下载 2.关闭防火墙 systemctl disable firewalld3.正式安装 切换到/usr/local下 cd /usr/l…...
GPT-Crawler一键爬虫构建GPTs知识库
GPT-Crawler一键爬虫构建GPTs知识库 写在最前面安装node.js安装GPT-Crawler启动爬虫结合 OpenAI自定义 assistant自定义 GPTs(笔者用的这个) 总结 写在最前面 GPT-Crawler一键爬虫构建GPTs知识库 能够爬取网站数据,构建GPTs的知识库…...
在微信小程序中如何改变默认打开的页面
在微信小程序中,在我们编写页面的时候,可能会在重新渲染的时候导致页面跳转到默认打开的页面上,为了提升用户的一个体验,我们可以设置一些内容来修改小程序默认打开的页面,提升开发者的开发体验。 当我们打开一个微信…...
Ardupilot开源飞控之VTOL之旅:配件试装
Ardupilot开源飞控之VTOL之旅:配件试装 1. 源由2. 分析2.1 【修改使用】FC & PDB & GPS打印件2.2 【直接使用】VTX & CRSF打印件 3. 试装3.1 【结构】问题1:GPS座子尺寸非常紧凑,需要用力压入卡座内。3.2 【结构】问题2ÿ…...
STM32-GPIO
一、GPIO简介 GPIO(General Purpose Input Output)通用输入输出口 可配置8种输入输出模式 引脚电平:0V~3.3V,部分引脚可容忍5V 输出模式下:可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输…...
MySQL的事务
<!DOCTYPE html> <html> <head> <meta charset"UTF-8" /> <title>MySQL的事务</title> </head> <body> <!-- 事务是一组操作的集合,它是一个不可分隔的工作单位,事务会把所有的操作作…...
go-carbon v2.2.14 发布,轻量级、语义化、对开发者友好的 Golang 时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 golang 时间处理库,支持链式调用。 目前已被 awesome-go 收录,如果您觉得不错,请给个 star 吧 github.com/golang-module/carbon gitee.com/golang-module/carbon 安装使用 Golang 版本大于…...
解决 IIS HTTP 403 错误问题
最近上传附件 IIS 总是返回 HTTP 403 错误,在踩了很多配置的坑之后,终于把问题解决了,于是特意写了本篇文章。 虽然网络上的文章不少,大都写的没错,但是他们没有很清晰的把问题描述清楚,导致一些新手在看这些文章跟着处理问题的时候难免会踩坑,于是我就以我踩坑的经验写…...
字符设备驱动基础—并发控制
一、上下文和并发场合 执行流:有开始有结束总体顺序执行的一段代码 又称上下文 应用编程:任务上下文 内核编程: 任务上下文:五状态 可阻塞 a. 应用进程或线程运行在用户空间 b. 应用进程或线程运行在内核空间(通过调…...
5-Tornado入门、程序的原理图、tornado不能使用同步代码的演示
安装 pip install tornado第一个程序 from tornado import web from tornado import ioloop class IndexHandler(web.RequestHandler):def get(self):self.write(Hello Tornado!!123)if __name__ __main__:# 1.创建了app对象,设置路由,并开启debug模式app web.A…...
mysql原理--InnoDB记录结构
1.InnoDB行格式 我们平时是以记录为单位来向表中插入数据的,这些记录在磁盘上的存放方式也被称为 行格式 或者 记录格式 。 设计 InnoDB 存储引擎的大叔们到现在为止设计了4种不同类型的 行格式 ,分别是 Compact 、 Redundant 、Dynamic 和 Compressed 行…...
ES6基础语法
目录 一、解构 数组解构 对象解构 字符串解构 数值解构 布尔值解构 二、箭头函数 和普通函数区别? 三、拓展运算符 ... 一、解构 给右侧值匹配对应的变量 等号两侧模式一定要匹配 数组解构 /*** 解构:从数组或者对象中提取值,给变量进行赋值操作就…...
java8 常用code
文章目录 前言一、lambda1. 排序1.1 按照对象属性排序:1.2 字符串List排序:1.3 数据库排序jpa 2. 聚合2.1 基本聚合(返回对象list)2.2 多字段组合聚合(直接返回对象list数量) 二、基础语法2.1 List2.1.1 数…...
docker 镜像管理
搜索镜像:这种方法只能用于官方镜像库搜索基于 centos 操作系统的镜像# docker search centos 按星级搜索镜像: 查找 star 数至少为 100 的镜像,默认不加 s 选项找出所有相关 ubuntu 镜像: # docker search ubun…...
Jira 中如何修改时间为绝对时间
问题描述 在使用Jira的时候,有一些时间显示的是相对时间,如:2天前,3个小时前等,有些用户不习惯这样的显示方式,希望使用绝对的时间格式,如:2022年2月22日 22:22 应该怎样修改 解…...
班级查分软件制作教程:老师必备技能!
首先,你需要选择一个合适的软件平台来制作班级查分软件。推荐使用群发成绩,因为它是一个功能强大且易于使用的在线查询系统,可以帮助你快速高效地制作班级查分软件。 在制作班级查分软件之前,你需要准备好学生的成绩数据。这可以…...
Linux 的性能调优的思路
Linux操作系统是一个开源产品,也是一个开源软件的实践和应用平台,在这个平台下有无数的开源软件支撑,我们常见的apache、tomcat、mysql等。 开源软件的最大理念是自由、开放,那么Linux作为一个开源平台,最终要实现的是…...
挑选工作效率提升工具,必这4个核心筛选标准
2026年挑选工作效率提升工具,尤其是多次尝试AI工具、希望找到合适选择的HR,不妨参考这四个核心筛选方向,减少不必要的试错时间。身边有位做招聘的HR小林,秋招高峰期一天安排8场面试,群面、结构化面试连轴转,…...
React与Next.js构建电商前端:从技术选型到性能优化的完整实践
1. 项目概述:一个电商前端的“肌肉记忆”式构建最近在逛GitHub的时候,看到了一个名为“Nike-Ecommerce”的项目,作者是ItsSanthoshHere。点进去一看,是一个仿耐克官网的电商前端项目。说实话,这类项目在开发者社区里并…...
【SAP工作】1.ECC与S4HANA后台表对比
查看表的Tcode:SE11,SE16N,SM30,SE38FIS4 HANABKPF会计凭证抬头存储凭证编号、日期、公司代码、凭证类型等不变BSEG会计凭证行项目存储科目、金额、税码、成本中心等明细ACDOCABSEG降级SKA1总帐科目主数据(科目表级&am…...
国星宇航冲刺港股:年营收7亿亏2.6亿 刚募资36亿 估值116亿 刚发射两颗实验卫星失败
雷递网 雷建平 5月14日成都国星宇航科技股份有限公司(简称:“国星宇航”)日前更新招股书,准备在港交所上市。在2023年12月底,国星宇航完成了5.22亿元融资,投后估值为41.2亿元,2024年12月底&…...
基于MCP协议构建AI驱动的网络安全情报聚合与自动化分析平台
1. 项目概述:一个为AI工作流赋能的网络安全情报中枢 如果你是一名安全工程师、渗透测试人员,或者正在构建一个需要实时威胁情报的AI智能体,那么你肯定对这样的场景不陌生:为了评估一个供应商的风险,你需要在浏览器里同…...
终极指南:如何用ZenTimings轻松监控AMD Ryzen内存性能
终极指南:如何用ZenTimings轻松监控AMD Ryzen内存性能 【免费下载链接】ZenTimings 项目地址: https://gitcode.com/gh_mirrors/ze/ZenTimings 想要深入了解你的AMD Ryzen系统内存运行状态吗?ZenTimings是一款专门为AMD Ryzen平台设计的免费开源…...
【LangChain 】大模型调用双雄:流式输出vs 批量调用 —— 一文讲透怎么选
🚀 大模型调用双雄:流式输出 vs 批量调用 —— 一文讲透怎么选一句话总结:流式输出像"直播打字",让用户感觉快;批量调用像"快递集运",让后台效率高。两者不是替代关系,而是…...
Midjourney啤酒瓶身3D贴图生成术:1个命令实现曲面延展+光影自适应(含GitHub开源LUT校色包)
更多请点击: https://intelliparadigm.com 第一章:Midjourney Beer印相 Midjourney Beer印相并非官方功能,而是社区开发者基于 Midjourney API 与啤酒文化融合的创意实验项目——通过文本提示(prompt)生成具有精酿啤酒…...
AI 教学质量提升系统:以智能技术重塑课堂教学效能
教学质量是教育的核心命脉,但传统教学模式长期存在诸多痛点:课堂学情难实时把控、教师授课问题难精准发现、学生学习短板无法针对性补齐、教学复盘全靠人工经验判断,效率低、主观性强。而 AI 教学质量提升系统依托人工智能、大数据分析、语音…...
烽火HG680-LC刷机后体验:当贝纯净桌面+讯飞语音,老盒子秒变流畅电视盒的折腾记录
烽火HG680-LC刷机重生记:当贝桌面与讯飞语音的极致体验 去年双十一囤的旧电视盒在角落吃灰大半年后,终于迎来了它的高光时刻。这台搭载S905L3芯片的烽火HG680-LC,原厂系统卡顿得连打开设置都要等上十秒,广告弹窗更是让人崩溃。经过…...
