Ela*_*Ela 29 javascript node.js
为什么node.js无法识别document.GetElementById?它说'ReferenceError:document not defined'.我能做什么?
ReferenceError: document is not defined
at Object.<anonymous> (C:\Users\Desktop\main.js:9:18)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:501:10)
at startup (node.js:129:16)
at node.js:814:3
Run Code Online (Sandbox Code Playgroud)
bra*_*ipt 30
document
涉及Web浏览器中的DOM(文档对象模型).
但是,Node.js不是浏览器Javascript.它是一个服务器,很像PHP或Perl,因此,您无法访问浏览器的DOM或执行任何特定于基于浏览器的Javascript.
你可以得到的最接近的是使用像browserify这样的东西在你的客户端代码中包含Node.js模块.
KOs*_*imo 14
您可以使用JSDom向Node添加Dom支持.要创建变量全局,您可以使用其中任何一个
GLOBAL.document = new JSDOM(html).window.document;
Run Code Online (Sandbox Code Playgroud)
要么
global.document = new JSDOM(html).window.document;
Run Code Online (Sandbox Code Playgroud)
html
你的网站在哪里作为字符串.
要使用JSDom,请将其包含在您的项目中:
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
Run Code Online (Sandbox Code Playgroud)
或者在普通的js中:
var jsdom = require("jsdom");
var JSDOM = jsdom.JSDOM;
Run Code Online (Sandbox Code Playgroud)
我希望这是回答你的问题.
要理解这个答案,有必要知道:Javascript Engine、Browser和Node.js之间的关系。
Javascript 引擎:是将 JS 转换为机器代码的 Javascript 编译器。例如,V8就是一个很好的例子。从技术上讲,V8 是用 C++ 开发的(您可以将其视为 C++ 程序)。
V8 实现了ECMAScript,它是 Javascript 语言的标准,定义了 JavaScript 的特性和功能。
但是DOM操作不是由 ECMAScript 定义的。所以V8不支持它。
浏览器:开发者可以document
在浏览器中进行DOM操作,因为DOM操作是由浏览器提供的,例如:Chrome。
Chrome 也是由 C++ 开发的,并且 V8(如前所述,它也是由 C++ 开发的)被嵌入到 Chrome 中来解释 Javascript。因此,Chrome 通过将 JS 命令和 C++ 实现绑定在一起来扩展或添加功能到 Javascript。
Nodejs:不同于Chrome,它是一个服务器端程序。但同样的事情是,Nodejs 是用 C++ 开发的,V8 被嵌入到 Nodejs 中来处理 js。Nodejs 以与 Chrome 类似的方式扩展了 Javascript 的功能。但是由于服务端不需要处理DOM,所以你不能在Nodejs内部访问这些功能。