Node.js是什么

Node.js是一个可以允许我们在服务器端运行JavaScript代码的程序。

这是什么意思呢?通常,我们写的JavaScript代码都是在浏览器中运行的。

实际上,浏览器就是一个JavaScript运行时环境,用于解释执行js代码。

更进一步地说,虽然浏览器提供了JavaScript运行时环境,但是它处在客户端,也就是说此时JavaScript只能用于编写前端代码。

但是,由于Node.js的出现,JavaScript代码的执行就不会被局限于在客户端,我们同样可以让JavaScript代码在服务端执行。

OK,也就是说,即便你不懂任何服务端编程语言,但是你会写JavaScript代码,那么你就同样可以编写在服务端运行的程序。

注意:虽然我们可以使用Node.js运行js代码,但是Node.js本身却是C语言开发的!

关于Node.js的官方解释(详见:https://nodejs.org/zh-cn/):

  • Node.js是一个基于Chrome V8引擎的JavaScript运行时。
  • Node.js使用高效、轻量级的事件驱动、非阻塞 I/O模型。
  • 它的包生态系统,npm,是目前世界上最大的开源库生态系统。

如何使用Node.js

使用Node.js非常简单,有2种方式:

其一,直接运行node命令,进入node交互式shell环境,然后在其中编写并执行js代码。

> node
> console.log("hello,world")
hello,world
undefined
>

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

其二,使用Node.js执行一个JavaScript文件,这是我们平时最常用的方法。

> node D:\\Node.js\\workspace\\test-helloworld\\logparserv2.js
2013-08-09T13:50:33.166Z A 2
2013-08-09T13:51:33.166Z B 1
2013-08-09T13:52:33.166Z C 6
2013-08-09T13:53:33.166Z B 8
2013-08-09T13:54:33.166Z B 5
{ A: 2, B: 14, C: 6 }

输出内容为对应js文件中的console输出信息。

Node.js应用举例

Node.js是单线程的。所以,Node.js典型的模式是使用异步回调。

基本上,你告诉Node.js要做的事,它执行完后便会调用你的函数(回调函数),这对于Web服务器尤其重要。

在现代Web应用访问数据库的过程中特别普遍,当你等待数据库返回结果的过程中,Node可以处理更多请求。

与每次连接仅处理一个线程相比,它使你以很小的开销来处理成千上万个并行连接。

Node.js本身已经内置了许多有用的编程模块,可以用于实现一些有用的功能。

而且也已经存在许多独立的框架模块,可以方便地实现以前只能使用笨重的服务端语言实现的功能。

1. 解析日志文件

// 加载filesystem模块,读取文件
var fs = require("fs");
fs.readFile("D:\\Node.js\\workspace\\test-helloworld\\test.log", function(error, logData){
if(error) {
throw error;
}
var text = logData.toString();
console.log(text);
// 解析文本
var results = {};
// 将文本分割为多行
var lines = text.split("\n");
lines.forEach(function(line){
// 对每一行文本进行解析
var parts = line.split(" ");
var letter = parts[1];
var count = parseInt(parts[2]);
if(!results[letter]) {
results[letter] = 0;
}
results[letter] += count;
});
console.log(results);
});

日志文件格式:

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

2. 编写http服务

// 加载http模块
var http = require("http");
http.createServer(function(req, resp){
resp.writeHead(200, {"Content-Type" : "text/plain"});
resp.end("Hello! I am a Node.js http server.\n");
}).listen(8080);
console.log("server running on 8080\n");

为什么要用Node.js

Node.js提供了一种全新的编写后端服务的方式,它并不要求你学习新的编程语言,只要熟悉JavaScript就可以后端服务。

注意:Node.js仅仅是一个JavaScript运行时环境,单纯安装它并不能做什么。

但是,使用Node.js内置的或者第三方的模块,可以实现做很多有实际意义的事情。

常用的Node.js模块

1.fs模块,Node.js自带的模块,可用于访问文件系统(:在浏览器中执行的js代码是不能访问文件系统的)。

2.http模块,Node.js自带的模块,用于构建http服务。

3.Express框架,第三方模块,可使创建网站的过程十分简单,详见:http://expressjs.com/

4.koa,web框架,详见:http://koajs.com/

5.fastify,web框架,详见:https://github.com/fastify/fastify

写在最后

1.编写在Node.js中运行的服务程序,熟练掌握JavaScript语言是基础。

同时,编写的程序要遵循JavaScript语言的相应规范和约定。例如:编写模块化程序。

myparser.js

// 将日志解析独立成一个模块
var Parser = function() {
}; // 解析文本
Parser.prototype.parse = function(text){
var results = {};
// 将文本分割为多行
var lines = text.split("\n");
lines.forEach(function(line){
// 对每一行文本进行解析
var parts = line.split(" ");
var letter = parts[1];
var count = parseInt(parts[2]);
if(!results[letter]) {
results[letter] = 0;
} results[letter] += count;
}); // console.log(results);
return results;
}; // 告诉Node.js输出文件中的构造函数
module.exports = Parser;

logparser.js

// 加载自定义的模块
var Parser = require("./myparser");
var fs = require("fs"); fs.readFile("D:\\Node.js\\workspace\\test-helloworld\\test.log", function(error, logData){
if(error) {
throw error;
} var text = logData.toString();
console.log(text); var parser = new Parser();
var results = parser.parse(text);
console.log(results);
});

2.在Node.js中还存在一个叫做npm的包管理工具,这是Node.js默认的,以JavaScript编写的软件包管理系统,可以类比java中的maven。npm会随着Node.js一起安装,npm模块仓库提供了一个名为“registry”的查询服务,用户可通过本地的npm命令下载并安装指定模块。此外用户也可以通过npm把自己设计的模块分发到registry上面。

3.npm可以管理本地项目的所需模块并自动维护依赖情况,也可以管理全局安装的JavaScript工具。如果一个项目中存在package.json文件,那么用户可以直接使用npm install命令自动安装和维护当前项目所需的所有模块。在package.json文件中,开发者可以指定每个依赖项的版本范围,这样既可以保证模块自动更新,又不会因为所需模块功能大幅变化导致项目出现问题。开发者也可以选择将模块固定在某个版本之上。

【参考】

http://www.csdn.net/article/2013-08-28/2816731-absolute-beginners-guide-to-Node.js 专门针对初学者的Node.js教程

https://zh.wikipedia.org/wiki/Npm npm维基百科

Node.js学习入门的更多相关文章

  1. Node.js学习入门手册

    Node.js 安装 1.下载http://nodejs.org/dist/v0.12.1/node-v0.12.1-x86.msi并完成安装 2.下载https://www.python.org/f ...

  2. 【入门必备】最佳的 Node.js 学习教程和资料书籍

    Web 开发人员对 Node.js 的关注日益增多,更多的公司和开发者开始尝试使用 Node.js 来实现一些对实时性要求高,I/O密集型的业务.这篇文章中,我们整理了一批优秀的资源,你可以得到所有你 ...

  3. Node.js学习系列总索引

    Node.js学习系列也积累了一些了,建个总索引方便相互交流学习,后面会持续更新^_^! 尽量写些和实战相关的,不讲太多大道理... Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- ...

  4. Node.js学习看这里:基础、进阶、文章

    Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快速的.可扩展的网络应用. Node.js采用事件 ...

  5. 系列文章--Node.js学习笔记系列

    Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- 简介及安装Node.js开发环境 Nodejs学习笔记(二)--- 事件模块 Nodejs学习笔记(三)--- 模块 Nodejs学 ...

  6. Node.js开发入门—使用AngularJS

    做一个Web应用,一般都有前台和后台,Node.js能够实现后台.利用jade模板引擎也能够生成一些简单的前台页面,但要想开发出具有实际意义的现代Web应用.还得搭配一个Web前端框架. Angula ...

  7. Node.js核心入门

    前言: 因为以前学习Node.js并没有真正意义上的去学习它,而是粗略的学习了npm的常用命令和Node.js一些模块化的语法,因此昨天花了一天的时间看了<Node.js开发指南>一书.通 ...

  8. NODE.JS学习的常见误区及四大名著

    NODE.JS学习的常见误区及四大名著 前段时间由于不满于社区里很多人对于NODE.JS的种种误解而写了一篇文章名为: NODE.JS之我见:http://www.cnblogs.com/pugang ...

  9. node.js学习(1)

    新建便笺 3 node.js学习(1) 1)安装 http://nodejs.org/download/下载. 2)编写一个案例 var http=require("http"); ...

随机推荐

  1. 搭建Google镜像网站

    很多人FQ或者买VPN账号仅仅只是为了使用Google搜索.相对于搭建VPN服务器来说,下面的方法搭建Google镜像网站将更加便捷. 条件:最好有自己的域名(可选),有可以正常访问Google的服务 ...

  2. LOJ #2048. 「HNOI2016」最小公倍数

    题意 有 \(n\) 个点,\(m\) 条边,每条边连接 \(u \Leftrightarrow v\) 且权值为 \((a, b)\) . 共有 \(q\) 次询问,每次询问给出 \(u, v, q ...

  3. VS编译LESS插件

    1. LESS   用LESS写CSS可以用写程序代码的习惯写CSS.用了之后写CSS的效率会提高很多. 2.解释LESS 写出来的文件扩展名是.less,要运行的话,先解释成正常的CSS文件. 3. ...

  4. 做事从来不坚持的我又开始学习PyQt了。。。。。。

    链接附上,不再更新:PyQt5图形界面编程 第一部分 第一个程序 # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QApp ...

  5. Docker部署Jenkins测试环境

    安装docker环境 yum install epel-release -y && yum install docker -y 如果是高手需要docker-compose的话就再装个d ...

  6. linux 系统调用之文件操作

    fcntl 文件控制 open 打开文件 creat 创建新文件 close 关闭文件描述字 read 读文件 write 写文件 readv 从文件读入数据到缓冲数组中 writev 将缓冲数组里的 ...

  7. 第十一节,全连接网络中的优化技巧-过拟合、正则化,dropout、退化学习率等

    随着科研人员在使用神经网络训练时不断的尝试,为我们留下了很多有用的技巧,合理的运用这些技巧可以使自己的模型得到更好的拟合效果. 一 利用异或数据集演示过拟合 全连接网络虽然在拟合问题上比较强大,但太强 ...

  8. VMware for mac inside error solutions

    Terminal 下执行 sudo xattr -r -d com.apple.quarantine /Applications/VMware\ Fusion.app 之后就能正常打开镜像安装虚拟机了 ...

  9. (逆序对 分治法)P1908 逆序对 洛谷

    题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计.最近,TOM老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定 ...

  10. jq实现百度图片移入移出内容提示框上下左右移动的效果

    闲来无聊,看到百度图片hover的时候提示框的效果,遂想试一试自己能否实现. 百度图片hover的效果: 需求: 1. 当鼠标从图片上部移入的时候,提示框从上部移到正常位置.从上部移出的时候,提示框从 ...