Node.js 中度体验

竖立简朴运用

  • 运用 require 指令来载入 http 模块

var http = require("http");
  • 竖立效劳器

运用 http.createServer() 要领竖立效劳器,并运用 listen 要领绑定 8888 端口。 函数经由历程 request,
response 参数来吸收和相应数据

http.createServer(function (request, response) {

    // 发送 HTTP 头部 
    // HTTP 状态值: 200 : OK
    // 内容范例: text/plain
    response.writeHead(200, {'Content-Type': 'text/plain'});

    // 发送相应数据 "Tangkang is a boy"
    response.end('Tangkang is a boy\n');
}).listen(8888);
  • 运转剧本

此时端口已开启监听,期待http要求

《Node.js 中度体验》

《Node.js 中度体验》

NPM管理工具

NPM是伴同NodeJS一同装置的包管理工具,能处置惩罚NodeJS代码布置上的许多题目

运用npm能够装置他人的代码 也能够宣布本身的代码到npm效劳器

  • 全局装置和当地装置

当地装置

将装置包放在 ./node_modules 下(运转 npm 敕令时地点的目次),假如没有 node_modules 目次,会在当前实行
npm 敕令的目次下天生 node_modules 目次。 能够经由历程 require() 来引入当地装置的包。

全局装置

将装置包放在 /usr/local 下。
能够直接在敕令行里运用。
不能经由历程 require() 来引入当地装置的包。

  • 运用npm装置当地express包

$ npm install express

express 包就放在了工程目次下的 node_modules 目次中

var express = require('express'); #代码中直接运用

《Node.js 中度体验》

npm install express -g # 全局装置
《Node.js 中度体验》

  • 检察一切装置包

$ npm ls  检察当地装置包

《Node.js 中度体验》

$ npm ls -g 检察全局装置包

《Node.js 中度体验》

$ npm uninstall express 卸载模块
$ npm update    express 更新模块
$ npm search    express 搜刮模块

Node.js REPL(交互式诠释器)

个中下划线 _ 猎取表达式变量

《Node.js 中度体验》

Node.js 回调函数

  • 壅塞实行

剧本壅塞实行 文件读取终了 才实行下一步

var fs = require("fs");

var data = fs.readFileSync('./nodejs/t.txt'); // 读取文件内容

console.log(data.toString());
console.log("输出终了");

《Node.js 中度体验》

  • 非壅塞实行

剧本非壅塞实行 不需要文件读取终了就可以实行下一步

var fs = require("fs");
fs.readFile('./nodejs/t.txt', function (err, data) {
    if (err) return console.error(err);
    console.log(data.toString());
});
console.log("输出终了")

Node.js 事宜轮回

Node.js 是单历程单线程运用顺序,然则经由历程事宜和回调支撑并发
Node.js 运用事宜驱动模子,当web server吸收到要求,就把它封闭然后举行处置惩罚,然后去效劳下一个web要求
一切的事宜基于观察者形式 接到要求就触发

  • 事宜实例

    // 引入 events 模块
    var events = require('events');
    
    // 竖立 eventEmitter 对象
    var eventEmitter = new events.EventEmitter();
    
    // 绑定事宜及事宜的处置惩罚顺序
    eventEmitter.on('eventName', eventHandler);
    
    // 触发事宜
    eventEmitter.emit('eventName');
  • 读取文件

var fs = require("fs");

fs.readFile('login.html', function (err, data) {
    if (err){
        console.log(err.stack);
        return;
    }
    console.log(data.toString());
});
console.log("顺序实行终了");

Node.js EventEmitter

  • EventEmitter 类

events 模块只供应了一个对象: events.EventEmitter。EventEmitter
的中心就是事宜触发与事宜监听器功用的封装。 你能够经由历程require(“events”);来访问该模块。

同一个时刻能够绑定屡次 触发时刻能够触发屡次
var events = require('events');
var emitter = new events.EventEmitter();
emitter.on('sayLove', function(arg1, arg2) {
    console.log('我爱你然则我没钱', arg1, arg2);
});
emitter.on('sayLove', function(arg1, arg2) {
    console.log('我没钱我也不爱你', arg1, arg2);
});
emitter.emit('sayLove', '我爱你', '你爱我');
  • error 事宜

var events = require('events'); 
var emitter = new events.EventEmitter(); 
emitter.emit('error');

Node.js Buffer(缓冲区)

  • 竖立 Buffer 类

var buf = new Buffer(10);// 竖立空数组

var buf = new Buffer([10, 20, 30, 40, 50]);// 给定数组竖立buffer

var buf = new Buffer("smudge", "utf-8"); // 字符串竖立buffer
  • 写入缓冲区

返回现实写入的大小

buf = new Buffer(256);
len = buf.write("smduge");
console.log("写入字节数 : "+  len);

《Node.js 中度体验》

  • 缓冲区读取数据

buf = new Buffer(26);
for (var i = 0 ; i < 26 ; i++) {
    buf[i] = i + 97;
}

console.log( buf.toString('utf8',0,5));    // 输出: abcde
  • 将 Buffer 转换为 JSON 对象(相似php数组转JSON)

var buf = new Buffer(5); // 5个随机数
var json = buf.toJSON(buf);

console.log(json);

《Node.js 中度体验》

  • 缓冲区兼并(相似php兼并数组)

var confession = new Buffer('我爱你!');
var reject = new Buffer('我们照样好朋友');
var cothurnus = Buffer.concat([confession,reject]);
console.log(cothurnus.toString());
  • 缓冲区比较

var buffer1 = new Buffer('ABC');
var buffer2 = new Buffer('ABCD');
var result = buffer1.compare(buffer2);
console.log(result); // -1 buffer1 在 buffer2 之前
  • 缓冲区拷贝(相似PHP数组赋值)

var buffer1 = new Buffer('ABC');
// 拷贝一个缓冲区
var buffer2 = new Buffer(3);
buffer1.copy(buffer2);
console.log("buffer2 content: " + buffer2.toString());
  • 缓冲区裁剪(相似PHP数组支解)

var buffer1 = new Buffer('smudge');
// 剪切缓冲区
var buffer2 = buffer1.slice(0,3);
console.log("buffer2 content: " + buffer2.toString()); // smu
  • 缓冲区长度(相似PHP数组长度)

var name = new Buffer('smudge');

console.log(name.length); // 6

Node.js Stream(流)

Stream 是一个笼统接口,Node 中有许多对象完成了这个接口。比方,对http 效劳器提议要求的request 对象就是一个Stream,另有stdout(规范输出)。

  • Node.js,Stream 有四种流范例

Readable - 可读操纵。
Writable - 可写操纵。
Duplex - 可读可写操纵.
Transform - 操纵被写入数据,然后读出效果。

  • Stream 对象都是 EventEmitter 的实例

data - 当有数据可读时触发。

end - 没有更多的数据可读时触发。

error - 在吸收和写入历程当中发作错误时触发

finish - 一切数据已被写入究竟层体系时触发

  • 从流中读取数据

var fs = require("fs");

var string = '';

// 竖立可读流
var readerStream = fs.createReadStream('smudge.txt');

// 设置编码
readerStream.setEncoding('UTF8');

// 处置惩罚流事宜 --> data, end, and error
readerStream.on('data', function(chunk) {
    string += chunk;
});

readerStream.on('end',function(){
    console.log(string);
});

readerStream.on('error', function(err){
    console.log(err.stack);
});
  • 写入流

var fs = require("fs");
var data = '对我来讲打发时刻的体式格局只要一个抱着你睡觉';

// 竖立一个能够写入的流,写入到文件 output.txt 中
var writerStream = fs.createWriteStream('love.txt');

// 运用 utf8 编码写入数据
writerStream.write(data,'UTF8');

// 标记文件末端
writerStream.end();

// 处置惩罚流事宜 --> data, end, and error
writerStream.on('finish', function() {
    console.log("写入完成。");
});

writerStream.on('error', function(err){
    console.log(err.stack);
});
  • 管道流

管道供应了一个输出流到输入流的机制。平常我们用于从一个流中猎取数据并将数据通报到别的一个流中。
完成了大文件的复制历程

var fs = require("fs");

// 竖立一个可读流
var readerStream = fs.createReadStream('love.txt');

// 竖立一个可写流
var writerStream = fs.createWriteStream('smduge.txt'); // 存在同名文件也会新建文件

// 管道读写操纵
// 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中
readerStream.pipe(writerStream);

console.log("顺序实行终了");
  • 链式流

链式是经由历程衔接输出流到别的一个流并竖立多个对个流操纵链的机制。链式流平常用于管道操纵。

var fs = require("fs");
var zlib = require('zlib');

// 紧缩 input.txt 文件为 input.txt.gz
fs.createReadStream('smudge.txt')
    .pipe(zlib.createGzip())
    .pipe(fs.createWriteStream('smudge.txt.gz'));

console.log("文件紧缩完成。");

声明

文章悉数来自 http://www.runoob.com/nodejs/nodejs-tutorial.html 我只是本身精读一遍 趁便做了这个笔记

    原文作者:Julylovin
    原文地址: https://segmentfault.com/a/1190000005725925
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞