转载原文:http://www.csdn.net/article/2013-08-28/2816731-absolute-beginners-guide-to-nodejshtml
Node.js的教程并不缺少,但有大部分教程针对已有Node.js基础的开发者。“我已下载了Node.js,可我如何开始呢?”如下教程是专门针对Node.js初学者,文中将经过实例分享,一步步教你如何开始Node.js之旅。 node
什么是Node.js?web
不少初学者并无真正地理解Node.js究竟是什么。nodejs.org网站中的描述也没有多大帮助。数据库
首先要清楚Node不是一个Web服务器,这十分重要。它自己并不能作任何事情。它没法像Apache那样工做。若是你但愿它成为一个HTTP服务器,你必须借助它内置库本身编写。Node.js只是计算机上执行代码的另外一种方式,它是一个简单的JavaScript Runtime.express
安装Node.jsnpm
Node.js的安装十分容易。只需在这里下载知足你须要的安装程序便可。json
已安装好Node.js,下一步作什么?api
安装结束后,你能够输入一个新命令“node”。使用该“node”命令有两种不一样的方法。第一种不带任何参数,将打开一个交互式Shell“>”(REPL: read-eval-print-loop),你能够在这里执行JavaScript代码。数组
上面案例中,我在Shell中键入了“console.log('Hello World')”,并敲回车。Node便开始执行该代码,并显示刚才记录的信息,同时打印出“undefined”。这是由于每条命令都会返回一个值,而console.log没有任何返回,故输出“undefined”。浏览器
Node命令的另外一种用法是执行一个JavaScript文件。这是咱们平时最经常使用的方法。
hello.js
该案例中,我将“console.log('Hello World');”命令存入一个文件中,并将该文件做为node命令的参数。Node运行文件中JavaScript代码,并输出“Hello World”。
案例一:文件的输入与输出
Node.js包含一组强大的库(模块),能够帮助咱们作不少事。第一个案例中,我将打开一个Log文件,并对它进行解析。
example_log.txt
该Log数据什么意思并不重要,基本能够肯定每条信息都包含一条数据、一个字母和一个值。我但愿将每一个字母后面的值进行累加。
咱们要作的第一件事是读出文件的内容。
my_parser.js
经过内置的文件(fs)模块,咱们能够很容易进行文件的输入/输出操做。fs模块有一个readFile方法,该方法以文件路径、回调函数为参数。该回调函数在完成文件读取后调用。文件数据读取后存储在Buffer类型中,为基本的字节数组。咱们能够经过toString()方法将它转化为字符串。
如今咱们对它进行解析。
my_parser.js
如今,当你将该文件做为node命令的参数时,执行该命令将打印出以下结果,执行完毕后退出。
我大部时候将Node.js做为脚本使用,正如上面所展现的那样。它更易于使用,是脚本程序有力的替代者。
异步回调
正如在上例中看到的那样,Node.js典型的模式是使用异步回调。基本上,你告诉Node.js要作的事,它执行完后便会调用你的函数(回调函数)。这是由于Node是单线程的。在你等待回调函数执行过程当中,Node可继续执行其余事务,没必要被阻塞直到该请求完毕。
这对于Web服务器尤为重要。在现代Web应用访问数据库的过程当中特别广泛。当你等待数据库返回结果的过程当中,Node能够处理更多请求。与每次链接仅处理一个线程相比,它使你以很小的开销来处理成千上万个并行链接。
案例二:HTTP服务器
Node内建有一个模块,利用它能够很容易建立基本的HTTP服务器。请看下面案例。
my_web_server.js
在上面,我说是的基本HTTP服务器。该例中所建立的并非一个功能全面的HTTP服务器,它并不能处理任何HTML文件、图片。事实上,不管你请求什么,它都将返回“Hello World”。你运行该代码,并在浏览器中输入“http://localhost:8080”,你将看见该文本。
如今你可能已经注意到一些不同的东西。你的Node.js应用并无退出。这是由于你建立了一个服务器,你的Node.js应用将继续运行,并响应请求,直到你关闭它。
若是你但愿它成为一个全功能的Web服务器,你必须检查所收到的请求,读取合适的文件,并返回所请求的内容。值得高兴的是,有人已经帮你作了这个艰难的工做。
案例三:Express框架
Express为一个框架,可以使建立网站的过程十分简单。你首先须要安装它。除了node命令,你还须要访问“npm”命令。利用该工具,你能够访问社区所建立的庞大模块集。其中之一就是Express。
当你安装了一个模块,它将出如今应用程序所在目录的“node_modules”文件夹中。如今咱们能够利用Express来建立一个基本的静态文件服务器。
my_static_file_server.js
如今你已建立了一个强大的静态文件服务器。你能够经过浏览器请求访问你放在public文件夹中任何文件,并进行展现,包括HTML、图片等任何东西。好比,把一个名为“my_image.png”的图片放在public文件夹中,你能够在浏览器中输入“http://localhost:8080/my_image.png”来访问该图片。固然,Express还有不少特性,你能够在之后的开发中继续探索。
NPM
上面咱们已经接触到了npm,但我仍想强调一下在Node.js开发过程当中该工具的重要性。它有成千上万个模块可帮咱们解决遇到的大部分典型问题。在从新发明轮子以前,记得检查一下npm中是否有相应功能。
上一例中,咱们手动安装了Express。若是你的程序包含不少“依赖”(Dependency),那再利用该方法安装它们就不合适了。为此npm提供了一个package.json文件。
package.json
package.json文件包含了应用程序的基本信息。其中“dependencies”部分描述了你想安装模块的名称和版本。该案例,接受Express 3.3的任何版本。你能够在该部分列出你想要的全部依赖。
代替以前一个个安装每一个依赖,如今咱们能够运行一个命令,便可将它们所有安装完成。
运行该命令,npm将在当下文件夹中查找“package.json”文件。一旦找到,便可安装所列出的全部依赖。
代码的组织
在大部分应用程序中,你的代码每每被分割到几个文件中。如今让咱们把最开始案例中的Log分析脚本分离出来。这样该程序将更易于测试与维护。
parser.js
在此建立了一个新文件,来存放Log分析脚本。这仅仅是一种标准JavaScript,还有不少方法可用来封装该代码。我选择从新定义一个JavaScript对象,这样更容易进行单元测试。
该程序中最重要的部分是“module.exports = Parser;”这一行代码。它告诉Node从该文件中要输出的内容。在该例中,我输出了构造函数,用户能够用Parser对象来建立实例。你能够输出任何你想要的。
如今咱们看一下,如何导入该文件,来使用Parser对象。
my_parser.js
如模块同样,文件被引入其中,你须要输入路径,而非名称。
总结
但愿该教程能够帮助到你。Node.js是一个强大、灵活的技术,能够帮助解决各类各样的问题。它已经超出了咱们的想像。(编译:陈秋歌 审校:夏梦竹)