当前位置: 代码迷 >> JavaScript >> node.js入门指点
  详细解决方案

node.js入门指点

热度:318   发布时间:2013-03-13 10:56:58.0
node.js入门指导

翻译一下Felix's Node.js Beginners Guide,源地址:http://nodeguide.com/beginner.html#TOC

这份指导适用于0.4.x版本的node.js

Hello World Tutorial

这篇指导文章会带领你从安装node.js到实现一个简单的http服务器。

安装
首先,你需要运行一个 *nix操作系统。推荐linux或者OSX,但是也可以使用FreeBSD 和cygwin .(注:其实现在已经可以直接在windows上使用node.js了)。
最常见的安装方式是直接下载源码来编译。因为他们的更新非常的频繁,所以我推荐直接从源码安装。
你可以在nodejs.org得到最新的源码。利用如下的命令来下载和安装v0.4.4:
$ 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'都在引入的考虑范围之内。

  相关解决方案