翻译一下Felix's Node.js Beginners Guide,源地址:http://nodeguide.com/beginner.html#TOC
Hello World Tutorial
$ wget http://nodejs.org/dist/node-v0.4.4.tar.gz
$ tar -xzf node-v0.4.4.tar.gz
$ cd node-v0.4.4.tar.gz
$ ./configure
$ sudo make install
Node.js只需要一些常用的构建工具,在OSX上你需要安装XCode,而在Ubuntu上你可能需要运行:
$ apt-get -y install build-essential
window下的安装方式:
现在在windows下安装node.js已经非常简单,只需要访问nodejs.org然后点击Install或者Download下载下来安装就行了。
后面的步骤由于我是在window上测试的,所以按照windows上的情况来进行讲解:
安装好之后,程序菜单中会有个Node.js,你可以直接运行他,进入node的shell.首先我们来看这样一个例子:
> console.log('Hello World');
Hello World
你也可以通过cmd进入,你可以在命令行直接输入node来进入node的shell.如果你想退出node,可以按两次CTRL+C。
接下来我们在一个任意目录下新建一个文件hello.js,其中内容为:
console.log('Hello World');
保存这个文件之后,你在命令行进入hello.js所在的目录,然后运行命令node hello.js可见看到如下效果
D:\node>node hello.js
Hello World
A hello world http server
不要为了打印出个helloworld就激动,现在我们进行下一步,写一个http服务器。我们在刚才的目录中新建个文件'hello_http.js'然后输入如下内容:
var http = require('http');
var server = http.createServer(function(req, res) {
res.writeHead(200);
res.end('Hello Http');
});
server.listen(8080);
然后通过如下命令运行你的服务器。
D:\node>node hello_http.js
你首先注意到可能是这个程序不像我们之前写的那些,这个程序会一直运行。这是因为一个node程序会在他确定不再可能接受到事件之前一直运行。这个例子中,一个打开的http服务器就会一直保持运行来等待访问。接下来,你就可以打开浏览器来测试你的http服务器了。访问 http://localhost:8080/,应该可以看到浏览器中显示的 'Hello Http'。
接下来仔细分析一下这段代码,第一行我们引入了http核心包,返回的对象赋给了变量http.然后通过http.createServer来创建一个服务器,他的参数是当一个请求来到时调用的函数。这个函数中,先返回了一个正常的头,然后输出一个字符串。最后一行我们让这个http服务器监听8080端口。
The module system
为了把你的程序结构化的分散到不同的文件中,node.js提供了一个简单的模块系统。为了了解他的用法,我们先来创建一个文件叫做main.js,内容如下:var hello = require('./hello');
hello.world();
也许你已经猜到了,我们是通过require('./hello')来引入另一个文件。其中'./'表示被引入的文件跟当前文件是在一个目录下。同时也可以看出来我们不需要提供被引入文件的后缀名'.js'。
现在我们将hello.js的内容替换为:
exports.world = function() {
console.log('Hello World');
}
我们为exports对象新增了一个叫做world的属性。这个exports对象在每个模块中都可以使用,当通过require函数引入时会把它作为返回值。如果我们现在运行'main.js',就会看到如下输出:
$ node main.js
Hello World
其实你也可以通过以下的方式来定义你的模块:
module.exports = function() {
// ...
}
接下来你需要知道的是模块系统在你调用require函数式是怎么去找到对应问的文件的。
看这个例子:
var http = require('http');
这个例子中,node.js做的事情是去找有没有一个核心模块叫http,找到了就返回这个模块。但是如果我引入一个非核心模块呢?比如说'mysql'.
var mysql = require('mysql');
这个例子中,node.js会从当前目录向上查询目录树,寻找一个叫'node_modules'的目录,如果找到这个目录了,就会在这个目录下去寻找'mysql.js'.如果一直到了根目录都没有找到,node.js就会抛出一个异常。
另外,node.js允许你创建一个'index.js'文件,当做一个目录的主引入文件。所以如果你调用 require('./foo'), 'foo.js'或者'foo/index.js'都在引入的考虑范围之内。