Newbie Node JS查询

时间:2012-07-03 06:08:35

标签: node.js

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

  1. 放置项目文件的位置?与PHP一样,我们将它们放在www/ OR htdocs/

  2. 我将它们放在我的文档中的文件夹中并尝试node /path/to/folder/example.js。这是对的吗?

  3. 我尝试了第一个来自node的官方文档的程序,只是将...打印到控制台而不是打印Server is running at 127.0.0.1:8080。文件夹结构可能是这个原因吗?

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

  5. 请指导我!

    谢谢!

    修改

    这是我尝试的代码,它是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
    ...
    

    甚至没有回到节点提示符!

2 个答案:

答案 0 :(得分:3)

  1. 只要运行node命令的用户可以访问该位置,放置文件的位置并不重要。

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

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

    < / LI>
  3. 可能不是。如果没有看到你试图首先运行的代码很难说,但如果由于文件夹结构等而导致任何路径解析错误,node只会退出一个讨厌的错误而不是打印'...'

  4. 是的,可以使用node构建整个网站。事实上,有各种npm模块可以帮助您更轻松地实现这一目标。我建议你看看:

    这些框架提供了许多延伸node的花边和口哨,使其更加可行,作为完整的网络服务器(cookie,虚拟主机,会话,路径路由等)

  5. 修改

    详细说明答案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上?

答案 1 :(得分:0)

您的问题是您尝试从节点的REPL内部运行服务器。您需要直接从Windows命令行运行它。你得到的“...”意味着节点的REPL没有看到有效的JavaScript表达式的结束,所以等着你输入更多。

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