完全面向于初学者的Node.js指南

新的上班时间是周二至周六,工作之余当然要坚持学习啦。

希望这篇文章能解决你这样一个问题:“我现在已经下载好Node.Js了,该做些什么呢?”

原文URL:http://blog.modulus.io/absolute-beginners-guide-to-nodejs

本文的组成:上文的翻译以及小部分自己的理解。所有文章中提到的JS代码,都是经过测试,可运行并产生正确结果的。

What is Node.js?

关于Node.Js,要注意一点:Node.js本身并不是像IIS,Apache一样的webserver,它是一个JavaScript 的运行环境。当我们需要搭建一个HTTP 服务器的时候,我们可以借助Node.Js提供的库快捷的写一个。

Installing Node

Node.js 安装是非常方便的,如果你在用Windows or Mac,去这个页面就可以了download page.

I've Installed Node, now what?

以WINDOWS为例,一旦安装好Node.Js之后,可以通过两种不同方式来调用Node。

方式一:CMD 下输入node,进入交互模式,输入一行行的JS代码,Node.Js会执行并返回结果,例子:


  1. $ node 
  2. > console.log('Hello World'); 
  3. Hello World 
  4. undefined 

PS:上一个例子的undefined来自于console.log的返回值。

方式二:CMD 下输入node 文件名(当然需要先CD到该目录)。例子:


  1. hello.js 下的代码: 
  2. console.log('Hello World'); 
  3. $ node hello.js 
  4. Hello World 

Doing Something Useful - File I/O

使用纯粹的Js原生代码是有趣但是不利于工程开发的,Node.JS提供了一些有用的库(modules),下面是一个使用Node.js提供的库分析文件的例子:


  1. example_log.txt 
  2. 2013-08-09T13:50:33.166Z A 2 
  3. 2013-08-09T13:51:33.166Z B 1 
  4. 2013-08-09T13:52:33.166Z C 6 
  5. 2013-08-09T13:53:33.166Z B 8 
  6. 2013-08-09T13:54:33.166Z B 5 

我们做的第一件事情是读出该文件的所有内容。


  1. my_parser.js 
  2.  
  3. // Load the fs (filesystem) module 
  4. var fs = require('fs'); 
  5.  
  6. // Read the contents of the file into memory. 
  7. fs.readFile('example_log.txt', function (err, logData) { 
  8.    
  9. // If an error occurred, throwing it will 
  10.   // display the exception and end our app. 
  11.   if (err) throw err; 
  12.    
  13. // logData is a Buffer, convert to string. 
  14.   var text = logData.toString(); 
  15. }); 

filesystem (fs 的API ref) module 提供了一个可以异步读取文件并且结束后执行回调的函数,内容以 Buffer的形式返回(一个byte数组),我们可以调用toString() 函数,将它转换成字符串。

现在我们再来添加解析部分的代码。


  1. my_parser.js 
  2.  
  3. // Load the fs (filesystem) module. 
  4. var fs = require('fs');//  
  5.  
  6. // Read the contents of the file into memory. 
  7. fs.readFile('example_log.txt', function (err, logData) { 
  8.    
  9. // If an error occurred, throwing it will 
  10.   // display the exception and kill our app. 
  11.   if (err) throw err; 
  12.    
  13. // logData is a Buffer, convert to string. 
  14.   var text = logData.toString(); 
  15.    
  16. var results = {}; 
  17.  
  18. // Break up the file into lines. 
  19.   var lines = text.split('\n'); 
  20.    
  21. lines.forEach(function(line) { 
  22.     var parts = line.split(' '); 
  23.     var letter = parts[1]; 
  24.     var count = parseInt(parts[2]); 
  25.      
  26. if(!results[letter]) { 
  27.       results[letter] = 0; 
  28.     } 
  29.      
  30. results[letter] += parseInt(count); 
  31.   }); 
  32.    
  33. console.log(results); 
  34.   // { A: 2, B: 14, C: 6 } 
  35. }); 

Asynchronous Callbacks

刚才的例子中使用到了异步回调,这在Node.Js编码中是广泛被使用的,究其原因是因为Node.Js是单线程的(可以通过某些特殊手段变为多线程,但一般真的不需要这么做)。故而需要各种非阻塞式的操作。

这种非阻塞式的操作有一个非常大的优点:比起每一个请求都创建一个线程的Web Server。Node.Js在高并发的情况下,负载是小得多的。

Doing Something Useful - HTTP Server

我们来运行一个HTTP server吧, 直接复制 Node.js homepage.上的代码就可以了。


  1. my_web_server.js 
  2.  
  3.     var http = require('http'); 
  4.  
  5.     http.createServer(function (req, res) { 
  6.       res.writeHead(200, {'Content-Type': 'text/plain'}); 
  7.       res.end('Hello World\n'); 
  8.     }).listen(8080); 
  9.  
  10.     console.log('Server running on port 8080.'); 

运行以上代码之后就可以访问http://localhost:8080 就能看到结果啦。

上面的例子显然过于简单,如果我们需要建立一个真正的web server。我们需要能够检查什么正在被请求,渲染合适的文件,并返回。而好消息是,Express已经做到这一点了。

Doing Something Useful - Express

Express 是一个可以简化开发的框架。我们执行npm install 来安装这个package。

$ cd /my/app/location
$ npm install express

指令执行完毕后,Express相关的文件会被放到应用目录下的node_modules文件夹中。下面是一个使用Express开发的例子:


  1. my_static_file_server.js 
  2.  
  3. var express = require('express'), 
  4.     app = express(); 
  5.  
  6.  
  7.  
  8. app.use(express.static(__dirname + '/public')); 
  9.  
  10. app.listen(8080); 
  11.  
  12. $ node my_static_file_server.js 

这样就建立了一个文件服务器。入油锅我们在 /public 文件夹放了一个"my_image.png" 。我们就可以在浏览器输入http://localhost:8080/my_image.png 来获取这个图片. 当然,Express 还提供了非常多的其它功能。

Code Organization

刚才的例子中我们使用的都是单个文件,而实际的开发中,我们会设计到代码如何组织的问题。

我们试着将最开始的文字解析程序重新组织。


  1. parser.js 
  2.  
  3. // Parser constructor. 
  4. var Parser = function() { 
  5.  
  6. }; 
  7.  
  8. // Parses the specified text. 
  9. Parser.prototype.parse = function(text) { 
  10.    
  11. var results = {}; 
  12.    
  13. // Break up the file into lines. 
  14.   var lines = text.split('\n'); 
  15.    
  16. lines.forEach(function(line) { 
  17.     var parts = line.split(' '); 
  18.     var letter = parts[1]; 
  19.     var count = parseInt(parts[2]); 
  20.      
  21. if(!results[letter]) { 
  22.       results[letter] = 0; 
  23.     } 
  24.      
  25. results[letter] += parseInt(count); 
  26.   }); 
  27.    
  28. return results; 
  29. }; 
  30.  
  31. // Export the Parser constructor from this module. 
  32. module.exports = Parser; 

关于这里的exports 的含义请参考我的博客:Node.Js学习01: Module System 以及一些常用Node Module.


  1. my_parser.js 
  2.  
  3. // Require my new parser.js file. 
  4. var Parser = require('./parser'); 
  5.  
  6. // Load the fs (filesystem) module. 
  7. var fs = require('fs'); 
  8.  
  9. // Read the contents of the file into memory. 
  10. fs.readFile('example_log.txt', function (err, logData) { 
  11.    
  12. // If an error occurred, throwing it will 
  13.   // display the exception and kill our app. 
  14.   if (err) throw err; 
  15.    
  16. // logData is a Buffer, convert to string. 
  17.   var text = logData.toString(); 
  18.    
  19. // Create an instance of the Parser object. 
  20.   var parser = new Parser(); 
  21.    
  22. // Call the parse function. 
  23.   console.log(parser.parse(text)); 
  24.   // { A: 2, B: 14, C: 6 } 
  25. }); 

这样,文字解析的部分就被抽离了出来。

Summary

Node.js 是强大而灵活的。

来源:51CTO

时间: 2024-08-24 04:40:53

完全面向于初学者的Node.js指南的相关文章

使用VS开发 Node.js指南_node.js

NTVS(Node.jsToolsforVisualStudio)是一款 可以运行在VS2012.VS2013上的一个IDE工具. 使用这个插件对于我们传统.net的开发人员学习node.js无疑是一大福音! NTVS也是开源的,它支持编辑,智能感知,分析,npm,本地与远程调试,以及发布到Azure网站和云服务. NTVS下载地址 装之前不用多说 先把node.js的一套东西给装齐了 1·安装NTVS下载地址(直接下一步-下一步) 2.打开VS2013 3.欣赏一下目录 server.js(有

《node.js开发指南》观后感

最近在当当网上买了一本<node.js开发指南>,从学习node.js到现在看的第一本中文教程,也算献出了自己处子之身啊,哈哈.前后大约花了4,5个小时通读了node.js部分,附录部分只是略过了,谈一下感想把. 1.本书的定位: 就像书中的前言部分所述,确实是针对node.js还未入门的初学者准备的,但是有一个前提,如果之前没写过像php等后端的语言读本书可能有点迷茫.所以本书的定位人群应该是对后端脚本语言有过一定开发经验,并且熟悉javascript语法的人. 2.本书的组成部分: 个人感

《写给PHP开发者的Node.js学习指南》一第 2 章 简单的Node.js框架2.1 HTTP服务器

第 2 章 简单的Node.js框架 写给PHP开发者的Node.js学习指南 在之前的章节,我介绍了一个用于PHP到Node.js转换的开发环境,以及如何使用它进行转换.在本章,我们将开始使用这个开发环境并进行实际的转换. 2.1 HTTP服务器 写给PHP开发者的Node.js学习指南 在PHP中,一个PHP文件代表一个HTML页面.一个Web服务器,比如Apache,当请求一个PHP页面时,Web服务器会运行PHP.但是在Node.js里,Node.js的main文件代表了整个服务器.No

《写给PHP开发者的Node.js学习指南》一导读

前 言 写给PHP开发者的Node.js学习指南 为什么要写这本书呢? 就互联网语言来说,PHP产生于1995年,是一门很古老的语言:而Node.js产生于2009年,是一门非常新的语言.结合PHP和Node.js你可以鸟瞰整个Web服务器从起源到现在的历史过程以及其中的改变.但是更重要的是,这些内容告诉了我们哪些没有改变--没有改变的那些,是整个行业公认的最佳实践--以及一点点未来可能的样子. PHP与Node.js最大的不同在于,PHP是一门阻塞型语言,依赖于API并且在执行结束前并不返回任

《写给PHP开发者的Node.js学习指南》一2.2 预定义的PHP变量

2.2 预定义的PHP变量 写给PHP开发者的Node.js学习指南 当一个支持PHP的Web服务器执行一个PHP页面时,它并不是仅提供一个未处理的对某个页面的HTTP request,然后执行这个页面.如果它这样做的话,那么每一个PHP页面都需要大量额外的代码来解析原始的HTTP request并且把这些值用更方便的方式存储起来.相反,PHP引擎解码原始的HTTP请求,并将数据填充到一堆众所周知的PHP全局变量中.这些全局变量被正确填充才能保证PHP页面正常工作. 由于我们采用的基本方法是将P

《Redis入门指南》一5.4 Node.js与Redis

5.4 Node.js与Redis Redis入门指南 Redis官方推荐的Node.js客户端是node_redis1. 5.4.1 安装 使用npm install redis命令安装最新版本的node_redis,目前版本是0.8.2. 5.4.2 使用方法 首先加载node_redis模块: var redis = require('redis'); 下面的代码将创建一个默认连接到地址127.0.0.1,端口6379的Redis连接: var client = redis.createC

node.js 开发指南 – Node.js 连接 MySQL 并进行数据库操作_node.js

Node.js是一套用来编写高性能网络服务器的JavaScript工具包   通常在NodeJS开发中我们经常涉及到操作数据库,尤其是 MySQL ,作为应用最为广泛的开源数据库则成为我们的首选,本篇就来介绍下如何通过NodeJS来操作 MySQL 数据库. 安装MySQL模块到NodeJS中 我们需要让NodeJS支持MySQL,则需要将MySQL模块添加到系统支持库   想要快速了解Node.js ,赞生推荐亲看看 node.js_guide.pdf  - node.js 开发指南 :想要电

《写给PHP开发者的Node.js学习指南》一1.3 Eclipse PDT

1.3 Eclipse PDT 写给PHP开发者的Node.js学习指南学会如何分析堆栈追踪信息是PHP到Node.js成功转换的一个重要技能.堆栈追踪是查找代码错误的一个诊断工具,就像医生用X光来检查病人一样.从某种观点来看,PHP到Node.js的转换可以类似于一个复杂的外科手术.你要对PHP和Node.js代码进行手术.像手术过程一样,转换需要技巧和耐性,但是一个好的环境也有很大帮助.就像手术室中使用X光一样,堆栈追踪就是转换过程中开发环境中的工具.下一步,我们会讨论集成开发环境,为转换过

Sails.js —— 面向服务和数据驱动的 Node.js 框架

Sails.js 就像是 Node.js 平台上的 Rails 框架.这是一个可靠可伸缩的开发框架,面向服务的架构,提供数据驱动的 API 集合.用来开发多玩家游戏.聊天应用和实时面板引用非常方便,也可用于开发企业级 Node.js 应用. Sails.js 基于 Node.js, Connect, Express 和 Socket.io 构建. 控制器示例代码: module.exports = { hi: function (req, res) { return res.send("Hi t