Web服务器上的Javascript vs Nodejs vs SublimeText



Getting started with Javascript.需要一个编辑器并在SublimeText上找到了温暖的引用,所以我安装了它。好工具。由于我想在将代码
放在服务器上之前对其进行测试/运行,因此我需要一些东西来在本地测试代码。再次回到互联网,我找到了Nodejs并安装了它。目前为止,一切都好。
第一次测试:

alert("Hello World"); 

在我的网站上工作正常,在 Nodejs 上不起作用。后来我发现我需要使用

console.log("Hello World");

在Nodejs上。 如果只是 1 个差异,我可能会应付,但我的下一次尝试

var answer = prompt("just type in something");

也失败了,出于同样的原因..

我知道 Nodejs 和 Web 服务器是不同的野兽,并且服务于不同的目的,但另一方面:在将代码放入服务器之前,您如何测试代码?

啊!!啊这让我发疯。更不用说SublimeText接受两者(所以这也对我没有帮助(

有没有办法让 Nodejs 接受与在我的服务器上运行的相同的代码?

我认为你混淆了webserverbrowser.

NodeJs 是一个在 Web 服务器上执行的 Javascript 运行时。因此,任何绑定到浏览器运行时环境(如alert(的命令都不起作用。

如果用户访问执行Javascript的网站,则会在浏览器运行时环境中执行。因此,像alert这样的命令可以工作,但其他命令可能不起作用(如fs.readFile(。

如果你在MDN上查看alert和prompt(window.alert和window.prompt(。

您可以看到这些方法属于窗口对象。

窗口是一个 DOM 接口,请参阅

https://developer.mozilla.org/en/docs/Web/API/Window

您遇到的问题是因为 NodeJS 是一个服务器端应用程序,因此这意味着窗口未定义,因为 NodeJS 没有 DOM。 在 NodeJS 中调用窗口将导致错误"未定义窗口"。

您将在客户端而不是服务器上调用 window。

延伸阅读:

为什么 node.js 没有本机 DOM?

为了回答你的问题,有一些节点包会给 NodeJS 一个 DOM,比如 jsdom。

但是,您应该考虑是否应该使用它,因为我怀疑您只是调用了错误的方法,并且您正在尝试在服务器应用程序上编写客户端执行的代码,并且您应该保留客户端/服务器分离。(根据我的经验,我只为服务器端应用程序提供过糟糕的集成测试的 DOM(。

您的 Web 服务器应该响应来自客户端的请求,并让客户端执行代码处理它。

最新更新