使用brain.js时出现document is not defined错误的解决咨询
解决Node.js环境中
document is not defined报错的方案 嘿,这个问题我熟!你碰到的ReferenceError: document is not defined其实是环境不匹配导致的——document是浏览器专属的DOM(文档对象模型)API,Node.js作为服务器端运行环境,本身并不提供这个对象,所以直接用Node.js运行包含DOM操作的代码肯定会报错。
下面给你两个针对性的解决办法,按需选择:
方案一:在浏览器环境中运行代码(推荐,适合前端场景)
如果你的代码是要和页面交互(比如操作输入框),最直接的方式是把JS代码和HTML页面绑定,让浏览器来执行:
- 在你的项目目录下创建一个
index.html文件,内容如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> </head> <body> <!-- 这里放你需要操作的DOM元素,比如示例里的input --> <input type="text" id="userInput"> <!-- 引入你的JS文件 --> <script src="./js/index.js"></script> </body> </html>
- 用VS Code的Live Server插件打开这个HTML文件(右键选择"Open with Live Server"),浏览器会自动加载页面并执行JS代码,此时
document对象就能正常访问了。
方案二:在Node.js中模拟DOM环境(适合测试/后端场景)
如果确实需要在Node.js环境下运行这段代码(比如做自动化测试),可以用jsdom包来模拟浏览器的DOM环境:
- 先安装
jsdom依赖:
npm install jsdom
- 在你的
index.js最开头添加以下代码,手动创建全局的document对象:
const { JSDOM } = require('jsdom'); // 创建一个包含input元素的模拟DOM环境 const dom = new JSDOM('<!DOCTYPE html><input id="userInput">'); // 把模拟的document挂载到全局对象上 global.document = dom.window.document; // 接下来写你原来的代码 const input = document.querySelector("input"); // ...你的brain.js相关逻辑
这样Node.js就能识别document对象,代码可以正常运行了。
补充一句:brain.js本身是支持Node.js和浏览器双环境的,但你代码里的DOM操作部分是浏览器专属的,所以得根据你的实际场景选择合适的运行方式~
内容的提问来源于stack exchange,提问作者Gleb Ger
相关产品推荐
相关产品推荐

