1

我是 node.js 的新手,我想知道一些基本的事情:

  1. 项目文件放在哪里?就像 PHP 一样,我们把它们放在www/OR中htdocs/

  2. 我将它们放在文档中的一个文件夹中并尝试了node /path/to/folder/example.js. 它是否正确?

  3. 我尝试了节点官方文档中的第一个程序,它只是打印...到控制台而不是打印Server is running at 127.0.0.1:8080。文件夹结构可能是造成这种情况的原因吗?

  4. 是否可以使用 node.js 制作整个网站,或者只能制作特定的模块?什么样的模块?

请指导我!

谢谢!

编辑:

这是我尝试过的代码,它是 Node 文档中的第一个“简单 Web 服务器”示例:

var http = require('http');

http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Hello World\n');
}).listen(8124);

console.log('Server running at http://127.0.0.1:8124/');

编辑:

此代码仅打印出以下内容:

>node example.js
...

甚至不返回节点提示!

4

2 回答 2

3
  1. 只要运行node命令的用户有权访问该位置,您将文件放在哪里并不重要。

    事实上,我建议您将 node.js 源文件放在任何wwwhtdocs文件夹(或任何公开可用的文件夹)之外,因为否则.js源文件在使用您的网络服务器提供时可能是世界可读的(包括任何可能的安全凭证在源文件中,让你暴露)。

  2. 是的,这是运行节点脚本的正确方法。但是,我建议首先cd进入正确的目录并node example.js从那里运行以防止路径解析错误,尤其是当您npm稍后开始使用各种模块时。

  3. 可能不是。如果没有看到您首先尝试运行的代码,很难判断,但如果由于文件夹结构等原因发生任何路径解析错误,则node只会以令人讨厌的错误退出,而不是打印“...”。

  4. 是的,可以使用 node. 事实上,有各种npm模块可以帮助您更轻松地完成任务。我建议你看看:

    这些框架提供了许多花里胡哨的功能,可以扩展node以使其作为一个成熟的网络服务器(cookies、vhosts、会话、路径路由等)更加可行。

编辑

详细说明答案 nr.3:我已经尝试了您粘贴的代码,既来自我在答案 nr.2 中推荐的正确文件夹,也使用绝对路径;他们都工作正常:

remco@Prosperpine ~ $ node tests.js 
Server running at http://127.0.0.1:8124/
^C

remco@Prosperpine ~ $ cd /
remco@Prosperpine / $ node /Users/remco/tests.js 
Server running at http://127.0.0.1:8124/

因此节点服务器启动并在 上提供内容http://127.0.0.1:8124/,这也可以:

remco@Prosperpine ~ $ wget http://127.0.0.1:8124/ && cat index.html
--2012-07-03 13:25:32--  http://127.0.0.1:8124/
Connecting to 127.0.0.1:8124... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/plain]
Saving to: `index.html'

    [ <=>     ] 12          --.-K/s   in 0s      

2012-07-03 13:25:32 (901 KB/s) - `index.html' saved [12]

Hello World
remco@Prosperpine ~ $ 

因此,我们可以得出结论,您正在尝试的代码没有任何问题。可能你的node安装有问题。这是在 Linux、OSX 还是 Windows 上?

于 2012-07-03T08:22:19.623 回答
0

您的问题是您试图从节点的 REPL 内部运行您的服务器。您需要直接从 Windows 命令行运行它。您得到的“...”意味着节点的 REPL 没有看到有效 JavaScript 表达式的结尾,因此正在等待您输入更多内容。

为了回应您对上一个答案的最后评论,REPL 在调用后打印“未定义”的原因console.log()是它正在将其评估为一个表达式(这恰好有一个副作用,即打印出消息)然后尝试打印它的返回值;因为console.log()实际上并没有返回任何东西(它只用于它的副作用),这就是你得到“未定义”的原因。

于 2012-07-03T23:47:34.993 回答