我只是在学习node.js,所以请原谅我。因此,我创建了一个JavaScript文件来放入所有节点方法,然后将其链接到html文件。我运行html文件并在JavaScript控制台中查看,只是得到“ Uncaught ReferenceError”。我的代码在Windows Powershell上执行得很好,但在chrome开发人员工具中却没有。为什么是这样?
答案 0 :(得分:1)
Chrome是浏览器。它在浏览器上下文中运行Javascript。
Node.js是一个独立的Javascript环境,用于在服务器环境中运行Javascript或用于独立的工具开发。
node.js不会像浏览器那样显示HTML,并且不支持浏览器使用诸如window
和document
之类的宿主对象的“宿主”环境。同样,node.js向运行时环境添加浏览器中不存在的各种模块,例如用于访问文件的fs
模块或用于访问系统的process
模块。
node.js和Chrome在内部都使用相同的V8 Javascript引擎来解析和运行纯Javascript,但是它们各自在该引擎周围放置了自己的环境,从而赋予了它们不同的用途和功能。
o我创建了一个JavaScript文件来放入所有节点方法,然后将其链接到html文件。我运行html文件并在JavaScript控制台中查看,只是得到“ Uncaught ReferenceError”。
如果您的HTML文件中带有Javascript <script>
标签,则必须在浏览器(例如Chrome)中使用它,而不是在node.js中使用。
如果您只有一个普通的Javascript文件来启动服务器并侦听传入的连接,则可以在node.js中而不是在Chrome中使用它。
我的代码在Windows Powershell上执行得很好,但在chrome开发人员工具中却没有。为什么会这样?
如果您显示了实际的代码,我们可能会建议更完整,但是似乎您编写的Javascript使用的是一些仅存在于node.js中而不存在于浏览器中的node.js库。环境。因此,这是一个node.js程序(用Javascript编写),而不是可以在浏览器环境中运行的脚本。
举个比喻,假设您有两个工具,每个工具都内置了C语言。其中一个包含我们许多人使用的标准库。另一个不包含该库,而是包含一个非常不同的库。虽然它们都以C语言为核心,但它们附带的头文件和库却完全不同,因此使用一个工具使用其库编写的代码无法在具有不同库的另一工具中运行。
这类似于Chrome与node.js。每种语言都是Java语言的核心,但是每种语言都带有不同的库集。
如果您编写一些不使用任何外部库的纯Javascript,例如:
function square(x) {
return x * x;
}
该代码将在Javascript环境(Chrome或node.js)中运行,因为它只不过是纯Javascript,并且不依赖标准Javascript实现之外的任何库。
但是,如果您编写一些使用fs
库的代码,例如:
const fs = require('fs');
function countLines(filename) {
let data = fs.readFileSync(filename, 'utf8');
return data.split('/n').length;
}
该代码需要fs
库。该库存在于node.js中,而不存在于Chrome(或任何浏览器)中,因此仅在node.js中可用。
或者,如果您编写的某些代码使用了特定于浏览器的对象,例如document
:
function getHeadline() {
let obj = document.getElementById("headline");
return obj.textContent;
}
此代码将在浏览器中运行,但不能在node.js中运行,因为它依赖于document
外部对象,该对象仅由浏览器实现提供,而不由node.js提供。
如果您真正想做的是访问(在网页内)以便使node.js程序可以提供的数据(例如从数据库中获取数据),那么通常要做的是使您的node.js程序进入Web服务器(通常使用Express工具箱)。然后,您可以从网页中的Javascript向远程服务器发出Ajax请求,以获取数据并将其带回到网页中。