nodejs.md

# Node.js in practice(intermediate)

##  1. Node Foundations

###1.1 Features of node.js

* 非阻塞I/O none-blocking IO

* 利于爬虫

* 与JSON 配合的很好

nodejs 主要特性

* node.js 的标准库由两部分构成

/Users/lishuang/Desktop/屏幕快照 2015-10-27 下午9.55.57.png

![image](/Users/lishuang/Desktop/test1.png)

binary libraries  与 core modules

binary libraries 为二进制文件  core modules 是用js 编写

###  1.2 建立一个新程序

1. 创建文件夹 nodeap

2. 创建一个app.js 文件 (如果不创建, npm init 后 main 入口会为index.js)

3. 在app.js 文件中写代码

4. npm init ,会自动生成package.json 文件(入口为 app.js)

## 2.Node’s global objects and methods

### 2.1 Modules

1. Installing and loading modules

* 如果想查找modules: npm search express (正则表达式: npm search /^express$/ )

* 本地安装  npm install module-name

* 全局安装(nodemon)npm install -g mudule-name

2. Creating and managing modules

* 使用require ,返回一个对象(object)

* 一旦一个module 被required了,它将被缓存,这意味着你多次require 返回的将是缓存下来的模块

* delete require.cache[require.resolve(‘./myclass‘)]; 删除被缓存的module

3. Loading a group of related modules

* 文件夹中创建一个index.js 的文件,在index.js文件中组织其他文件

* 或者创建一个package.json 文件,指明main属性

案例如下:

![image](/Users/lishuang/Desktop/tree.tiff)

index.js 文件中的代码如下

```javascript

module.exports ={

one: require(‘./one‘),

two: require(‘./two‘)

}

```

在app.js 中

```

var mymodule = require(‘./mymodule‘);

mymodule.one();

mymodule.two();

````

或者在mymodule 文件夹中添加一个package.json 文件:(测试无效)

4. Working with paths

* 使用__dirname 和__filename  来定位文件

指的是当前文件所在的文件夹路径名

可以使用

```

varview=__dirname+‘/views/view.html‘

```

或者使用path模块

```

path =require(‘path‘)

path.join(__dirname, ‘views‘, ‘view.html‘);.

```

### 2.2 Standard I/O and the console object

1. Reading and writing to standard I/O

```javascript

process.stdin.resume();

process.stdin.setEncoding(‘utf8‘);

process.stdin.on(‘data‘,function(text){

process.stdout.write(text.toUpperCase());

});

```

视图如下:

![image](/Users/lishuang/Desktop/nodeprocess.tiff

)

2. Benchmarking a program

使用console.time(‘label‘)

console.timeEnd(‘label‘)

### 2.3 Operating system and command-line integration

1. Getting platform information

* process  一般是用来处理与操作系统相关的信息

* 使用 process.arch 与 process.platform 属性来处理相关信息

process.arch  查看当前处理器平台

‘arm‘, ‘ia32‘, or ‘x64‘.

*  process.memoryUsage()  内存使用情况

2. Passing command-line arguments

process.argv

### 2.4 Delaying execution with timers

1.setTimeout 与 Function.prototype.bind()

## 3. Buffers

Buffer 是全局类型,可以用来处理二进制数据

```

var fs = require(‘fs‘);

var greet = fs.readFileSync(__dirname+‘/greet.txt‘,‘utf8‘);

console.log(greet);

var greet2 = fs.readFile(__dirname+‘/greet.txt‘,function(err,data){

console.log(data.toString());

});

console.log(‘Done‘);

fs.readFile(__dirname+‘/greet.txt‘,function(err,buf){

if(err) console.log("read file error");

console.log(buf.toString());

console.log(Buffer.isBuffer(buf));

console.log(Buffer.byteLength(buf.toString(),‘utf8‘));

})

```

Buffer.isBuffer(obj);  //判断对象是否为buffer <br>

Buffer.byteLength(str,‘utf8‘) ,区别于str.length(一个字符可能占用多个字节)

给出一个写图片的例子

```javascript

var mine = ‘test1.png‘;

var encoding = ‘base64‘;

var data = fs.readFileSync(__dirname+"/test1.png").toString(encoding); //字符串

var buf = new Buffer(data,encoding);//创建buffer

fs.writeFileSync(__dirname+‘/copy.png‘,buf);

```

## 4.Events

关于EventEmitter模块

```javascript

var util = require(‘util‘);

var EventEmitter = require(‘events‘);

function AppleMusic(){

EventEmitter.call(this);  // 继承了EventEmitter的ownProperty

this.name = "You are my sunshine";

this.playing =false;

}

util.inherits(AppleMusic,EventEmitter); //  继承了 EventEmitter 的原型

var music = new AppleMusic();

music.on(‘play‘,function(){

this.playing = true;

})

music.on(‘play‘,function(track){

this.playing = true;

console.log("The track is: "+ track);

})

music.on(‘stop‘,function(){

this.playing = false;

console.log("Stoped the music")

})

music.emit(‘play‘,"你发如雪,就没了离别,我爱你如三千东流水") ;

setTimeout(function(){

music.emit(‘stop‘);

},5000);

```

## 5.Streams

### 5.1 Built-in streams

在上文中我们知道

fs.readFile() 于fs.readFileSync() 都是将数据全部读到内存中去,也就是Buffer中,

如果有一种方法,能够读取一部分数据(chunk),然后处理它(process it),然后继续读进来更多的数据

以下链接提供了一个如何在node.js 中使用streams 的指南

[https://github.com/substack/stream-handbook/](https://github.com/substack/stream-handbook/)

图片如下:

![image](/Users/lishuang/Desktop/pipe2.png)

使用管道

```

var  http = require(‘http‘);

var fs = require(‘fs‘);

var zlib = require(‘zlib‘);

var server = http.createServer(function(req,res){

res.writeHead(200,{"content-encoding": "gzip"})

fs.createReadStream(__dirname+‘/index.html‘).pipe(zlib.createGzip()).pipe(res);

}).listen(1337);

```

处理error

```

var  http = require(‘http‘);

var fs = require(‘fs‘);

var server = http.createServer(function(req,res){

res.writeHead(200,{"content-encoding": "gzip"})

var stream = fs.createReadStream(__dirname+‘/index.html‘) ;

stream.on(‘error‘,function(err){

console.log(err.trace());

console.log(‘Error‘,err);

console.log(‘Error stack: ‘,err.stack);

})

}

```

### 5.2 Third-party modules and streams

## 6.File system

## 7.Networking

## 8.Child processes

来自为知笔记(Wiz)

时间: 2024-10-20 14:51:29

nodejs.md的相关文章

nodejs 回调地狱解决 promise async

nodejs毁掉地狱是一直被人诟病的,以下总结一下解决毁掉地狱的一些方法.(暂时研究的比较浅) 1.promise promise模式在任何时刻都处于以下三种状态之一:未完成(unfulfilled).已完成(resolved)和拒绝(rejected).以CommonJS Promise/A 标准为例,promise对象上的then方法负责添加针对已完成和拒绝状态下的处理函数.then方法会返回另一个promise对象,以便于形成promise管道,这种返回promise对象的方式能够支持开发

nodejs学习资料

NodeJS基础 什么是NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器. 每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许JS使用运行环境提供的内置对象和方法做一些事情.例如运行在浏览器中的JS的用途是操作DOM,浏览器就提供了document之类的内置对象.而运行在NodeJS中的JS的用途是操作磁盘文件或搭建HTTP服务器,NodeJS

NodeJS写个爬虫,把文章放到kindle中阅读

这两天看了好几篇不错的文章,有的时候想把好的文章 down 下来放到 kindle 上看,便写了个爬虫脚本,因为最近都在搞 node,所以就很自然的选择 node 来爬咯- 本文地址:http://www.cnblogs.com/hustskyking/p/spider-with-node.html,转载请注明源地址. 所谓爬虫,可以简单理解为利用程序操作文件,只是这些文件不在本地,需要我们拉取过来. 一. 爬虫代码解析 1. 拿到目标页码源码 Node 提供了很多接口来获取远程地址代码,就拿

七天学会NodeJS

NodeJS基础 什么是NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器. 每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许JS使用运行环境提供的内置对象和方法做一些事情.例如运行在浏览器中的JS的用途是操作DOM,浏览器就提供了document之类的内置对象.而运行在NodeJS中的JS的用途是操作磁盘文件或搭建HTTP服务器,NodeJS

nodejs环境 + 入门 + 博客搭建

NodeJS:NodeJS是一个使用了Google高性能V8 引擎 的服务器端JavaScript实现.它提供了一个(几乎)完全非阻塞I/O栈,与JavaScript提供的闭包和匿名函数相结合,使之成为编写高吞吐 量网络服务程序的优秀平台. NPM:全称是Node Package Manager,是一个NodeJS定制的包管理和分发工具,如node-mysql,已经成为了非官方的发布Node模块(包)的标准. (npm类似maven,package.json类似pom.xml文件) mongod

【nodejs学习】0.nodejs学习第一天

1.模块 大一点的程序都需要模块化,nodejs也不例外,代码放到不同的文件中,每一个文件就可以是一个模块,文件路径名就是一个模块名.每个模块中包含三个预先定义的变量: 1.require:用于在当前模块中加载和使用别的模块,传入一个模块名,返回一个模块导出对象,".js"可以省略. eg:var fool1 = require('./foo');//.foo.js,/home/user/foo var data = require('./data.json');//加载json文件

拿nodejs快速搭建简单Oauth认证和restful API server攻略

拿nodejs快速搭建简单Oauth认证和restful API server攻略:http://blog.csdn.net/zhaoweitco/article/details/21708955 最近一直在鼓捣这个东西,拿出来分享下一下经验吧,其实很简单,一点也不难. 首先需求是这样,给自己的网站要增加API服务,API分为两种,公共的和私有授权的,授权的使用Oauth方法认证身份,API格式均为JOSN和JSONP. 嗯,别的语言我也没怎么学过,首先是找合适的框架进行实现吧.本身网站使用的e

NodeJS下访问SQL Server

1.下载node-sqlserver(msnodesql-0.2.1-v0.8-x64.msi) msnodesql 下载地址:下载  自行选择与自己系统相符的版本,点击安装. msnodesql 官方地址:https://github.com/WindowsAzure/node-sqlserver 含wiki 和 疑问解答 . 2.打开msnodesql 文件夹下的README.md文件,里面有说到要安装的东西. 3.安装node-gyp,打开命令行,输入命令: npm install -g

nodejs的第三天学习

一. CommonJS 规范 1.1nodejs 与 commonjs 之间的关系: 1)nodejs是一种服务器语言. a)开启服务的能力 b)文件读写的能力 服务器:就是一台安装了服务软件 2)commonjs是nodejs的规范. 1.2commonjs规范的意义: 由于nodejs是用javascript来写的,javascript遵守ECMAScript规范,而ECMAScript这个规范它(如果作为一门后台语言的规范)是不完整的,因为它内容仅仅只是规范了javascript的:词法.