运行Node.js时出现ReferenceError: document is not defined错误求助
解决Node.js中"document is not defined"错误
问题原因
你碰到的ReferenceError: document is not defined,核心原因是Node.js是服务器端运行环境,不提供浏览器专属的DOM(文档对象模型)API。document是浏览器用来操作网页内容的内置对象,Node环境里根本不存在这个东西;而Chrome作为浏览器,自带完整的DOM运行环境,所以代码在浏览器里能正常执行。
解决办法
办法1:用浏览器运行代码
把你的JavaScript代码通过<script>标签嵌入HTML文件,然后用Chrome打开这个HTML文件,不要直接用Node命令执行JS文件。
办法2:在Node环境模拟DOM(仅当必须在Node里处理DOM逻辑时用)
如果一定要在Node环境运行包含DOM操作的代码,可以用jsdom库模拟浏览器DOM环境:
- 先安装jsdom:
npm install jsdom
- 在你的JS文件开头添加以下代码,创建模拟的document对象:
const { JSDOM } = require('jsdom'); const dom = new JSDOM('<!DOCTYPE html><html><body></body></html>'); global.document = dom.window.document;
之后再执行原本的DOM操作代码就不会报错了。
报错信息
[Running] node "c:\Users\HP\OneDrive\Documents\MEGAsync\Code\JavasScript\11-Arrays-Bankist\starter\script.js" c:\Users\HP\OneDrive\Documents\MEGAsync\Code\JavasScript\11-Arrays-Bankist\starter\script.js:95 const labelWelcome = document.querySelector('.welcome'); ^ ReferenceError: document is not defined at Object.<anonymous> (c:\Users\HP\OneDrive\Documents\MEGAsync\Code\JavasScript\11-Arrays-Bankist\starter\script.js:95:22) at Module._compile (node:internal/modules/cjs/loader:1159:14) at Module._extensions..js (node:internal/modules/cjs/loader:1213:10) at Module.load (node:internal/modules/cjs/loader:1037:32) at Module._load (node:internal/modules/cjs/loader:878:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) at node:internal/main/run_main_module:23:47 Node.js v18.12.1 [Done] exited with code=1 in 0.217 seconds
内容的提问来源于stack exchange,提问作者simo
相关产品推荐
相关产品推荐

