Node.js入门 - 永恒的Hello World!
本文自theprojectspot.com翻译而来,文章原作者为Lee Jacobson, 已经作者授权翻译用于非商业用途。原文地址:猛戳这里进入

介绍

这是我的关于Node.js系列入门教程的第一篇。必须说明一下,我并不是Node.js的专家,但是尝试向别人解释这是怎么回事是自我学习的一个好方法。如果你发现有些地方并不是那么正确,请提出来让我知道以便修正,谢之。

最近Node.js如此流行,到处是讨论这个的话题,我决定一探究竟学学这玩意儿。软件行业技术更新如此之快,如果落在后面是很危险滴(汗,这哥们才20岁出头,就有这么强的落后于时代的危机感)。如果你不想落后于时代,不想失业,学习新的编程语言更新自己的技能是作为程序员非常重要的一件事情。如果你不能认真对待此事,想想那些菜鸟新程序员不能找到工作的悲惨境地吧。

好了,闲话少说,进入正题(铛铛铛铛)。

Node.js是一个服务器端JavaScript实现。这意味着所有Javascript的牛B特性都能在Node.js里得到支持,同样意味着如果你以前有JavaScript编程经验的话,你学习Node.js将占有极大的优势。Node.js刚出现没几年,哪怕是一直用这个东西工作的,也只是几年,对比C这些古老语言有这么多人在用,这玩意没多少人会,如果你会的话,比单纯php程序员的竞争力要提高不少吧?(作者观点,用php的同学不要在评论里骂我。。。)

开始Hello World吧

让我们来开始写第一个Hello Wrold程序,首先到http://www.nodejs.org 去下载并安装node.js。安装好之后,用你喜欢的文本编辑器创建一个JavaScript文件,内容如下:


    console.log("Hello World");

保存为"hello.js" ,并且在终端里用如下命令运行程序:


    node hello.js

现在你应该在终端里看到金光闪闪的“Hello World”两个大字了。如果只想看到这两个字,那么到这里就完了,不过我相信你更想看到在浏览器里怎么看到这两个字,好吧,打开你刚才创建的hello.js这个文件,重新编辑如下:


    var http = require('http');

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

    console.log('Server started');

保存文件然后执行:


    node hello.js

终端里应该看到“Server started”,用浏览器打开http://localhost:8080,我操,金光闪闪的“Hello World”出现在浏览器里了。

让我们来回顾一下我们刚才写的代码。

第一行是获取一个http组件并赋值给变量"http",http是Node.js的内置组件, 方便我们创建Node.js应用的东东。

我们可以通过调用Node.js的http组件的"createServer"方法来创建一个http服务, 这个方法返回一个对象,并且需要一个函数作为参数。

调用返回对象的方法listen来侦听端口,参数值就是你需要侦听的端口数值,这也是刚才为什么我们要用http://localhost:8080去请求的原因,代码里指定了这个端口。

我们还创建了一个函数作为参数传入createServer,在JavaScript编程中这是一个常用的做法,函数可以像变量或者对象一样作为参数传入别的方法。当我们创建的http服务每次接收到从8080端口过来的请求时,执行传入的函数,而我们传入的函数称之为匿名函数,因为我们没有给它命名。

你可能注意到作为参数的匿名函数有两个参数,"request"和"response",这两个参数由http服务在接收到请求时传入,它们都是对象,request用于获取请求内容,response用于我们返回相关信息。

在这个匿名函数中,第一件事是调用response的writeHead函数设置将要返回的http状态(200成功,403无权限,500异常,等等),同时设置Content-Type头,告诉浏览器我们返回的是纯文本。

接下来我们利用response对象输出金光闪闪的Hello World了,这里我们只是简单地调用response的write方法然后结束,所以用response的end来结束本次响应。

让我们的响应更有趣一点

就算我不断加上"金光闪闪"的定语,也无法掩饰Hello World是一个无聊的程序(好吧,所有程序员都是通过写一个无聊的程序开始的...), 让我们来写一个稍微不那么无聊的程序:用户计数器。用Node.js创建一个用户计数器巨简单,甚至不像php一样可能需要数据库。(原文如此,事实上别的技术也可以不需要数据库之类的,利用全局会话等来实现,作者的意思可能是直接可以使用变量计数,但下文的变量在请求之外,相当于一个全局变量)。

创建一个叫counter.js的文件,并写入:


    var http = require('http');

    var userCount = 0;
    http.createServer(function (request, response) {
        console.log('New connection');
        userCount++;

        response.writeHead(200, {'Content-Type': 'text/plain'});
        response.write('Hello!\n');
        response.write('We have had '+userCount+' visits!\n');
        response.end();
    }).listen(8080);

    console.log('Server started');

然后运行之:


    node counter.js

这时候访问http://localhost:8080,你就可以看到访问次数,刷新这个数字会增长。

注:你可能会看到一个奇怪的现象,每刷新一次,数值增加是2而不是1,这是因为你的浏览器同时请求了http://localhost:8080/favicon.ico。

你可以在终端的输出看到每次请求的情况。

这个程序的主要功能就是先定义一个userCount的变量,然后每次接收到请求时+1,并输出到浏览器。

在PHP里你要实现相同功能的话,需要保存信息到类似文本或者数据库的东西里面去。(又黑PHP...)

rin :
这个是我当时学习的经历,可以借鉴一下http://www.9958.pw/post/nodejs_lesson
老楠 Reply to rin :
thx.
For example, "name@something.com". If someone replies to you it will be via email.
For example, "http://someaddress.com"