`

专门针对初学者的Node.js教程

 
阅读更多

Node.js的教程并不缺乏,但有大部分教程针对已有Node.js基础的开发者。“我已下载了Node.js,可我如何开始呢?”以下教程是专门针对Node.js初学者,文中将通过实例分享,一步步教你如何开始Node.js之旅。  

什么是Node.js?

很多初学者并没有真正地理解Node.js到底是什么。nodejs.org网站中的描述也没有多大帮助。

首先要清楚Node不是一个Web服务器,这十分重要。它本身并不能做任何事情。它无法像Apache那样工作。如果你希望它成为一个HTTP服务器,你必须借助它内置库自己编写。Node.js只是计算机上执行代码的另一种方式,它是一个简单的JavaScript Runtime.

安装Node.js

Node.js的安装十分容易。只需在这里下载满足你需要的安装程序即可。

已安装好Node.js,下一步做什么?

安装结束后,你可以输入一个新命令“node”。使用该“node”命令有两种不同的方法。第一种不带任何参数,将打开一个交互式Shell“>”(REPL: read-eval-print-loop),你可以在这里执行JavaScript代码。

 

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

 

上面案例中,我在Shell中键入了“console.log('Hello World')”,并敲回车。Node便开始执行该代码,并显示刚才记录的信息,同时打印出“undefined”。这是因为每条命令都会返回一个值,而console.log没有任何返回,故输出“undefined”。

Node命令的另一种用法是执行一个JavaScript文件。这是我们平时最常用的方法。

hello.js

 

  1. <b>console.log('Hello World');</b>  
  1. <b>$ node hello.js  
  2. Hello World</b>  

 

该案例中,我将“console.log('Hello World');”命令存入一个文件中,并将该文件作为node命令的参数。Node运行文件中JavaScript代码,并输出“Hello World”。

案例一:文件的输入与输出

Node.js包含一组强大的库(模块),可以帮助我们做很多事。第一个案例中,我将打开一个Log文件,并对它进行解析。

example_log.txt

 

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

 

该Log数据什么意思并不重要,基本可以确定每条信息都包含一条数据、一个字母和一个值。我希望将每个字母后面的值进行累加。

我们要做的第一件事是读出文件的内容。

my_parser.js

 

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

 

通过内置的文件(fs)模块,我们可以很容易进行文件的输入/输出操作。fs模块有一个readFile方法,该方法以文件路径、回调函数为参数。该回调函数在完成文件读取后调用。文件数据读取后存储在Buffer类型中,为基本的字节数组。我们可以通过toString()方法将它转化为字符串。

现在我们对它进行解析。

my_parser.js

 

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

 

现在,当你将该文件作为node命令的参数时,执行该命令将打印出如下结果,执行完毕后退出。

 

  1. $ node my_parser.js  
  2. { A: 2, B: 14, C: 6 }  

 

我大部时候将Node.js作为脚本使用,正如上面所展示的那样。它更易于使用,是脚本程序有力的替代者。

异步回调

正如在上例中看到的那样,Node.js典型的模式是使用异步回调。基本上,你告诉Node.js要做的事,它执行完后便会调用你的函数(回调函数)。这是因为Node是单线程的。在你等待回调函数执行过程中,Node可继续执行其他事务,不必被阻塞直到该请求完毕。

这对于Web服务器尤其重要。在现代Web应用访问数据库的过程中特别普遍。当你等待数据库返回结果的过程中,Node可以处理更多请求。与每次连接仅处理一个线程相比,它使你以很小的开销来处理成千上万个并行连接。

案例二:HTTP服务器

Node内建有一个模块,利用它可以很容易创建基本的HTTP服务器。请看下面案例。

my_web_server.js

 

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

 

在上面,我说是的基本HTTP服务器。该例中所创建的并不是一个功能全面的HTTP服务器,它并不能处理任何HTML文件、图片。事实上,无论你请求什么,它都将返回“Hello World”。你运行该代码,并在浏览器中输入“http://localhost:8080”,你将看见该文本。

 

  1. $ node my_web_server.js  

 

现在你可能已经注意到一些不一样的东西。你的Node.js应用并没有退出。这是因为你创建了一个服务器,你的Node.js应用将继续运行,并响应请求,直到你关闭它。

如果你希望它成为一个全功能的Web服务器,你必须检查所收到的请求,读取合适的文件,并返回所请求的内容。值得高兴的是,有人已经帮你做了这个艰难的工作。

案例三:Express框架

Express为一个框架,可使创建网站的过程十分简单。你首先需要安装它。除了node命令,你还需要访问“npm”命令。利用该工具,你可以访问社区所创建的庞大模块集。其中之一就是Express。

 

  1. $ cd /my/app/location  
  2. $ npm install express  

 

当你安装了一个模块,它将出现在应用程序所在目录的“node_modules”文件夹中。现在我们可以利用Express来创建一个基本的静态文件服务器。

my_static_file_server.js

 

  1. <b>var express = require('express'),  
  2.     app = express();  
  3.   
  4. app.use(express.static(__dirname + '/public'));  
  5.   
  6. app.listen(8080);</b>  

 

 

  1. $ node 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

 

  1. <b>{  
  2.   "name" : "MyStaticServer",  
  3.   "version" : "0.0.1",  
  4.   "dependencies" : {  
  5.     "express" : "3.3.x"  
  6.   }  
  7. }</b>  

 

package.json文件包含了应用程序的基本信息。其中“dependencies”部分描述了你想安装模块的名称和版本。该案例,接受Express 3.3的任何版本。你可以在该部分列出你想要的所有依赖。

代替之前一个个安装每个依赖,现在我们可以运行一个命令,即可将它们全部安装完成。

 

  1. $ npm install  

 

运行该命令,npm将在当下文件夹中查找“package.json”文件。一旦找到,即可安装所列出的所有依赖。

代码的组织

在大部分应用程序中,你的代码往往被分割到几个文件中。现在让我们把最开始案例中的Log分析脚本分离出来。这样该程序将更易于测试与维护。

parser.js

 

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

 

在此创建了一个新文件,来存放Log分析脚本。这仅仅是一种标准JavaScript,还有很多方法可用来封装该代码。我选择重新定义一个JavaScript对象,这样更容易进行单元测试。

该程序中最重要的部分是“module.exports = Parser;”这一行代码。它告诉Node从该文件中要输出的内容。在该例中,我输出了构造函数,用户可以用Parser对象来创建实例。你可以输出任何你想要的。

现在我们看一下,如何导入该文件,来使用Parser对象。

my_parser.js

 

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

 

如模块一样,文件被引入其中,你需要输入路径,而非名称。

 

原文链接:An absolute beginner's guide to Node.js

分享到:
评论

相关推荐

    《node.js in action》中文版

    《Node.js in Action》中文版是一本专门针对Node.js技术的实战指南,由业界知名人士“狼叔”推荐,旨在帮助读者深入理解和掌握这一强大的JavaScript后端开发平台。Node.js以其异步、非阻塞I/O模型和高效的性能在Web...

    Node.js-ndb是针对Node.js的改进调试体验由ChromeDevTools支持

    Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它让开发者能够在服务器端使用JavaScript进行开发。而`ndb`(Node.js Debugger)是Google Chrome DevTools团队为Node.js推出的一个增强版调试工具,旨在提供更...

    Node.js-Navalia简单易于使用的浏览器自动化

    Navalia 是一个针对 Node.js 开发的轻量级库,专门用于实现浏览器自动化。这款库设计的目标是简单易用,使得开发者能够更方便地进行网页抓取、UI 测试和模拟用户交互等任务。 Navalia 的核心功能包括: 1. **...

    Node.js-Straw-Node.js的实时处理框架

    在Node.js的生态系统中,"Straw"是一个专门针对实时处理场景设计的框架,它为开发者提供了高效、灵活的实时通信解决方案。 **1. Straw框架的核心特性** - **事件驱动**:Straw基于Node.js的事件驱动模型,利用异步...

    node-v18.19.1-x64.msi

    标题中的“node-v18.19.1-x64.msi”指的是Node.js的安装程序,这是一个针对Windows操作系统64位架构的版本。Node.js是一个开源、跨平台的JavaScript运行环境,它允许开发者在服务器端执行JavaScript代码,极大地拓宽...

    NodeJS 10.14 LTS最新版64位

    在提供的压缩包文件名“node-v10.14.2-win-x64”中,“win”表示这个版本是专门为Windows操作系统编译的,而“x64”则表明这是针对64位处理器的版本。这意味着如果你的系统是64位的Windows,你可以安装此版本的Node....

    Node.js-Nodorithm-提供一些常用算法封装的NPM包

    Nodorithm是一个专门针对Node.js环境设计的NPM(Node Package Manager)包,它封装了一系列常用的算法,便于开发者在项目中快速、便捷地应用这些算法。 1. **NPM包的使用** - 安装:要在Node.js项目中使用...

    The Node Beginner Book

    《The Node Beginner Book》是一本专门针对Node.js初学者的教程书籍,由Manuel Kiessling撰写。本书的主旨是教授读者如何使用Node.js来开发应用程序,并在过程中介绍所有必需的“高级”JavaScript知识,这不仅仅是...

    intool===node

    2. **WebStorm**:JetBrains 公司的旗舰级 JavaScript IDE,专门针对前端和后端 JavaScript 开发,对 Node.js 的支持尤为出色。 3. **Atom**:GitHub 推出的开源文本编辑器,拥有丰富的插件生态系统,可以配置为强大...

    node-v10.16.0-linux-x64.tar.zip

    标题 "node-v10.16.0-linux-x64.tar.zip" 提供的信息表明,这是一个针对Linux操作...对于初学者或者对Linux系统不熟悉的人来说,这样的指南非常有用,因为它可以帮助他们顺利地在服务器上部署和运行Node.js应用程序。

    深入浅出Nodejs1

    【深入浅出Node.js1】是一本专门针对Node.js技术的详细解析书籍,旨在帮助读者深入理解Node.js的内在机制和应用。书中涵盖了Node.js的多个核心知识点,旨在让读者从不同角度掌握这一强大的服务器端JavaScript运行...

    随手记事(ssjs) 本系统为练手之作 用到的技术及前端库分别有: 1.nodejs 2.gmu 3.mongodb.zip

    总结起来,SSJS项目是一个集成了Node.js、GMU和MongoDB的实践案例,适合想要学习全栈开发特别是Node.js后端和MongoDB数据库的初学者。通过该项目,开发者可以学习到如何将JavaScript应用于服务器端,如何构建响应式...

    nodejs入门

    作者通过丰富的实践经验和深入浅出的讲解方式,引导初学者通过项目实践深入理解Node.js的使用,特别是如何将JavaScript运用在服务端开发中。 首先,这本书并不是针对完全的编程新手,它假定读者至少熟悉一种面向...

    node-fundamentals:探索 Node.js 中一些基本概念的小程序集合

    "node-fundamentals" 是一个专门针对 Node.js 基础概念的实践项目,通过一系列小程序来帮助学习者深入理解 Node.js 的核心特性。 在 "node-fundamentals" 中,你可以找到以下几个关键知识点: 1. **非阻塞I/O模型*...

    js相关书籍

    《JavaScript基础教程》无疑是针对JavaScript初学者的,内容可能涵盖变量、数据类型、控制结构、函数、对象、数组、原型链、闭包等基础概念,同时也可能涉及DOM操作、AJAX、ES6新特性等方面。掌握这些基础知识对于...

    node-978-1-8388-2523-2:掌握 Node.js 中的 REST API

    本资源"node-978-1-8388-2523-2:掌握 Node.js 中的 REST API"专门针对如何使用Node.js来开发RESTful API进行深入讲解,帮助开发者从初学者晋升为高手。REST(Representational State Transfer)是一种广泛采用的Web...

    M101JS:MongoDB 大学 MongoDB for Node.js 开发人员课程

    MongoDB for Node.js 开发人员课程,M101JS,是MongoDB大学提供的一门专业课程,专门针对使用Node.js进行开发的程序员。这门课程深入浅出地讲解了如何在Node.js环境中高效地利用MongoDB这个强大的文档型数据库系统。...

    node-restify-mongo-api:带有Node.js,Restify和MongoDB的REST API的入门项目

    本项目`node-restify-mongo-api`是针对初学者的一个入门级教程,它将引导你了解如何使用Node.js、Restify框架以及MongoDB数据库来创建一个基本的REST API。 **Node.js** Node.js是一个基于Chrome V8引擎的...

    pi_button_test:Node.js中涉及Raspberry PI,按钮和led灯的小项目

    "pi_button_test" 这个标题表明我们正在探讨一个基于Node.js的项目,该项目专门针对Raspberry Pi(树莓派)平台,目的是实现与物理按钮和LED灯的交互。"pi_button_test"很可能是项目的名字或者代码库的目录名,暗示...

Global site tag (gtag.js) - Google Analytics