【问题标题】:Helloworld example doesn't work - Do I need to embed NodeJS?Helloworld 示例不起作用 - 我需要嵌入 NodeJS 吗?
【发布时间】:2013-08-12 12:19:43
【问题描述】:

我正在编写一个简单的 Helloworld 示例,在互联网上随处可见:

[nodejs.php] [位置:localhost/nodejs.php]

<!DOCTYPE HTML>
<html>
    <head>
        <script type="text/javascript">
            var http = require('http');

            var server = http.createServer(function (request, response) {
              response.writeHead(200, {"Content-Type": "text/plain"});
              response.end("Hello World\n");
            }).listen(8000);

            console.log("Server running at http://127.0.0.1:8000/");
        </script>
    </head>


</html>

代码非常简单易懂。但是,当我尝试运行代码时,出现了以下错误:

Uncaught ReferenceError: require is not defined 

我理解该消息意味着我的页面中没有require()等功能。当然没有。我又翻了很多次谷歌,尝试了不同的教程,看看我是否需要在网页中嵌入任何类型的 nodejs.js 文件,但所有教程似乎都没有提到这一点,我已经尝试输入 Nodejs文件夹。我发现了很多像edit.jsadduser.jsbin.js...这样的文件,我被正式卡住了。我一遍又一遍地复习了 Nodejs 的真正含义,以及为什么该示例不起作用,但 Google 的支持并不多。到目前为止,据我了解:

  • nodejs 是一个事件驱动、非阻塞 I/O 的 javascript 工具包
  • nodejs 允许用户使用 javascript 访问后端编码
  • nodejs 解析 V8 Google Chrome javascript 引擎
  • nodejs 可以创建并发服务器应用程序
  • 在我的假设中,nodeJS 是一个框架(它可能是错误的),它连接服务器和客户端以允许后端访问

如果我错了,请纠正我,我真的很感激。在没有太多资源的情况下,我需要对这个主题有更多的了解。

我的问题是:

  1. 如果 NodeJS 是一个 javascript 库,我如何将它嵌入到我的网站中?本地主机与在线托管有什么不同吗?
  2. 我经常看到有人处理listen(8000),端口是什么?我应该选择哪个端口?
  3. Socket.io 和 NodeJS 的本质一样吗,如何安装(我知道 Socket.io 是在 Nodejs 上运行的)?带有 NodeJS 的 Socket.io 是否与带有 jQ​​uery 的 jQueryUI 一样抽象?为了将来参考,当我想在 NodeJS 中使用另一个库时,这样做的标准协议是什么?

谢谢大家,

提姆。

【问题讨论】:

  • node.js 在服务器端工作,而不是在浏览器中
  • 我在互联网上读过很多次cmets(node.js在服务器端工作),但我不清楚。你能更深入一点,或者解释一下我如何让它像在服务器中一样工作吗?
  • @cuzmAZN 您需要基于 JavaScript 引擎构建的 NodeJS 平台,它运行在服务器端(而不是 PHP)并允许您返回 HTTP 响应。它没有脚本标签,也没有 HTML 的显式建模。我在之前的 cmets 中向您引用的这本书是一本很好且广受赞誉的介绍 - 它涵盖了 NodeJS 服务器的基础知识,我认为您应该从这里开始……您的问题听起来像是您确实花了很多精力来寻找进入它,但听起来很误导。
  • 第一季度。见灵魂检查。要非常清楚,您将使用 node.js 而不是 PHP 和网络服务器。 Q2。端口是指网络服务器端口:它正在侦听流量。 Q3。不。NodeJS 与所有这些都非常不同。
  • 啊。是否像 NodeJS(以愚蠢的解释方式)就像 PHP 一样。我的意思是,您使用 NodeJS 而不是 PHP?而不是寻找一个 PHP 主机,你需要一个 NodeJS 主机?如果是这样,我可以开始安装 NodeJS 后的 htdocs(或任何类似的)文件夹在哪里?它运行本地主机吗?我目前正在使用 XAMPP。

标签: javascript node.js


【解决方案1】:

我需要嵌入 NodeJS 吗?

没有。您需要使用 Node 而不是 Web 浏览器来运行它。

如果 NodeJS 是一个 javascript 库

不是

如何将其嵌入我的网站?

您可以将它安装在您的网络服务器上并在那里运行(服务器端)。

本地主机与在线托管有什么不同吗?

没有

我经常看到有人在处理listen(8000),端口是关于什么的?

如果您正在运行 TCP/IP 服务器,它必须侦听一个端口,以便将数据包发送给它。

我应该选择哪个端口?

一个没有被其他东西使用的东西

Socket.io 和 NodeJS 一样吗

没有。它分为两部分。一部分在服务器上用 Node 运行,另一部分在浏览器中运行。

如何安装?

instructions on the website

Socket.io 和 NodeJS 是否和 jQueryUI 一样抽象?

没有

为了将来参考,当我想在 NodeJS 中使用另一个库时,这样做的标准协议是什么?

CommonJS

NodeJS(以愚蠢的解释方式)就像 PHP 一样吗?我的意思是,您使用 NodeJS 而不是 PHP?

简单来说,是的。

您需要 NodeJS 主机而不是寻找 PHP 主机?

可能。我不知道是否有人提供 NodeJS 托管本身。当我想使用 Node 时,我会使用 VPS。

如果是这样,安装 NodeJS 后我可以启动的 htdocs(或任何类似的)文件夹在哪里?

NodeJS 不是网络服务器。它是一种运行 JavaScript 的方法。您可以用 JavaScript 编写 Web 服务器并通过 Node 运行它,这就是您问题中的代码所做的。该代码没有 htdocs 文件夹,因为它总是返回相同的硬编码响应。如果您希望它根据请求的 URL 从文件系统读取文件,则需要添加该功能(通过检查 request 对象并使用 filesystem module

它是否运行 Localhost?

它可以在您想要的任何网络接口上运行。请参阅the listen() method 的文档。由于您没有传递hostname 参数,因此它将侦听所有接口(包括本地主机)。

【讨论】:

  • 嗨。 “不使用浏览器”到底是什么意思?我如何确定一个端口是否被使用?抱歉,这些概念对我来说是新概念。
  • 你使用 Node 而不是 Chrome / Firefox / Opera / Safari / Internet Explorer / etc
  • 您通常通过知道您在运行服务器的计算机上运行的服务器软件来确定端口是空闲的。
  • 我现在对端口很清楚了。但是对于 Chrome,如果它是为网页设计的,而你不使用浏览器,你怎么能显示这些内容并与之交互呢?这让我很困惑。
  • 您将数据输出到命令行,或者使用provides a GUI like GTK 的库,或者在网络上侦听并将输出完成到网络客户端(例如使用HTTP 协议的Web 浏览器)。
【解决方案2】:

http://nodejs.org/ 上解释了介绍示例:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

要运行服务器,将代码放入文件 example.js 并使用 node 程序从命令行执行它

% node example.js
Server running at http://127.0.0.1:1337/

将代码块写入文件example.js(无HTML),使用node example.js运行它,打开浏览器并转到http://127.0.0.1:1337/

【讨论】:

  • 非常感谢您的回复。直到那时我才明白。但是,我不太清楚我怎样才能使它和我的网页连接?我现在明白了(感谢上面的所有 cmets)NodeJS 只是像 Apache 或 XAMPP 这样的服务器,但我不知道如何开始,因为它是一种全新的方法。例如,我在 localhost/index.html 有一个文件 .html,现在,如何从那里开始使用 Node 函数?我该怎么办?我需要打开节点吗?如果 server.js(hello world 示例)无法与我的网页交互(使用 AJAX 或其他方式),那么它有什么意义?
  • @cuzmAZN 如果您只想托管静态文件(如 HTML),则内部函数应读取所需文件并将数据写入响应中。一个简单的例子见gist.github.com/rpflorence/701407
  • 不仅是静态的,我的意思是让我的 javascript 在那个 HTML 文件中与 server.js 交互。这才是真正让我困惑的地方。
  • 每当您向http://127.0.0.1:1337/ 发出请求时,它都会自动向服务器请求文件。例如,如果要响应查询/foo,可以检查 url.parse(request.url).pathname 是否为“/foo”
  • 是的,您通常不会在 apache 中看到它的唯一原因是默认端口是 80(标准 Web 端口)
【解决方案3】:

节点是服务器端,而不是客户端。您需要在提供这些文件的任何机器上运行它。所以不,你不能将它嵌入到某个页面上。在此处查看如何下载和配置它:http://nodejs.org

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    相关资源
    最近更新 更多