一.Node.js是什么?
Node.js不是一种独立的语言,也不是一个JavaScript框架,更不是浏览器的库,不能与jQuery,ExtJS相提并论。Node.js是一个让JavaScript运行在服务器端的开发平台。
Node.js可以作为服务器向用户提供服务,与PHP等相比,它跳过了Apache,IIS等服务器,直接面向前端开发。如图:
二.Node.js能够做什么?
Web Socket 服务器;
TCP/UDP 套接字应用程序;
命令行工具;
交互式终端程序;
带有图形用户界面的本地应用程序;
单元测试工具;
客户端JavaScript 编译器
具有复杂逻辑的网站;
基于社交网络的大规模Web 应用;
Web Socket 服务器;
TCP/UDP 套接字应用程序;
命令行工具;
交互式终端程序;
带有图形用户界面的本地应用程序;
单元测试工具;
客户端JavaScript 编译器
三.Node.js异步式I/O和事件编程模式
Node.js 最大的特点就是采用异步式I/O 与事件驱动的架构设计。
传统
多线程同步式I/O:
传统的实现方式:
res = db.query('SELECT * from some_table'); //执行到这一行的时候,线程会阻塞,等待数据库返回查询结果,然后再继续处理后面的代码
res.output();
Node.js单线程异步式:
db.query('SELECT * from some_table', function(res) { //进程在执行到db.query 的时候,不会等待结果返回,而是直接继续执行后面的语句,直到进入事件循环。
res.output();
});
在Node.js 中如何用异步的方式读取一个文件,下面是一个例子:
//readfile.js
var fs = require('fs');
fs.readFile('file.txt', 'utf-8', function(err, data) {
if(err) {
console.error(err);
} else{
console.log(data);
}
});
console.log('end.');
运行的结果如下:
end.
Contents of the file.
end.
Contents of the file.
Node.js 的事件循环机制
Node.js 的异步机制是基于事件的,所有的磁盘I/O、网络通信、数据库查询都以非阻塞的方式请求,返回的结果由事件循环来处理。
四.Node.js的性能
Node.js 用异步式I/O 和事件驱动代替多线程,带来了可观的性能提升.Node.js 除了使用V8 作为JavaScript引擎以外,底层还是用了C/C++库支持时间驱动和异步式I/O。
五.Node.js模块和包
模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个Node.js 文件就是一个模块。
以一个例子来了解模块。创建一个 module.js 的文件,内容是:
//module.js
var name;
exports.setName = function(thyName) {
name = thyName;
};
exports.sayHello = function() {
console.log('Hello ' + name);
};
在同一目录下创建getmodule.js,内容是:
//getmodule.js
var myModule = require('./module');
myModule.setName('BYVoid');
myModule.sayHello();
运行node getmodule.js,结果是:
Hello BYVoid
Hello BYVoid
Node.js 的包是一个目录,其中包含一个JSON 格式的包说明文件package.json。严格符合CommonJS 规范的包应该具备以下特征:
package.json 必须在包的顶层目录下;
二进制文件应该在bin 目录下;
JavaScript 代码应该在lib 目录下;
文档应该在doc 目录下;
单元测试应该在test 目录下。
package.json 必须在包的顶层目录下;
二进制文件应该在bin 目录下;
JavaScript 代码应该在lib 目录下;
文档应该在doc 目录下;
单元测试应该在test 目录下。
六.Node.js包管理器(npm)
获取一个包
使用npm 安装包的命令格式为:
使用npm 安装包的命令格式为:
npm [install/i] [package_name]
例如你要安装express,可以在命令行运行:
$ npm install express