一、安装node.js

方式很多npm,git等,新手建议从官网上直接去下载node的安装包。一键安装.

二、创建一个web服务器。

const http = require('http');
http.createServer(function(request,response){
response.writeHead(200,{'Content-Type':'text/plain'});
response.end('Hello World');
}).listen(8888);
console.log('server start http://127.0.0.1:8888')

三、读取文件的方式(同步,异步)

1.同步

var fs = require('fs');
var data = fs.readFileSync('input.txt');
console.log(data.toString());
console.log('同步执行');

2.异步

var fs = require('fs');
fs.readFile('input.txt',function(error,data){
if(error){
    console.log(error);
  };
console.log(data.toString());
});
console.log('异步执行')

三、事件循环

var events = require('events');

var eventEmitter = new  events.EventEmitter();//创建一个事件对象

function handEvent(){

    eventEmitter.emit('data_connection'); //调用 data_connection事件
};
function data_connection(){
console.log('数据已经连接');
};
eventEmitter.on('connection',handEvent);
eventEmitter.on('data_connection',data_connection); eventEmitter.emit('connection'); //调用,on绑定的connection事件 console.log('程序执行完毕');
/*
* 事件 执行的过程.
* 1. require('events') events 模块
* 2.new events.EventEmitter(); 创建以事件模块
* 3. eventEmitter.on(); 绑定事件
* 4.eventEmitter.emit(); 触发绑定事件的函数
*
*/

四、数据缓冲区

1.向缓存区写入数据

var buf = new Buffer(26);  // buf 的字节数

var l  = buf.write('start nodejs'); // 向node Buffer缓冲区写入数据.并返回长度
console.log('字节长度为:' + l); //

2.读取缓冲区的内容

var buf = new Buffer(26);  // buf 的字节数

for(var i = 0; i < 26; i++){
buf[i] = i + 97;
}; var str = buf.toString('utf8',0,8); //buf.toString(encoding,start,end);
//编码格式, 开始位置, 结束位置
console.log(str);

3.Buffer 转为JSON对象

var buf = new Buffer('hello world');
var json = buf.toJSON(buf); console.log(json);
//{ type: 'Buffer',data: [ 104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100 ] }

4.concat();合并几个Buffer对象

var buf1 = new Buffer('hello');
var buf2 = new Buffer(' ');
var buf3 = new Buffer('world');
var count = Buffer.concat([buf1,buf2,buf3]);
//Buffer.concat([]); concat(); 中的参数必须是对象
console.log(count.toString());// hello world

5.缓冲区的比较buf1.compare();

var buf1 = new Buffer('A');
var buf2 = new Buffer('B');
var result = buf1.compare(buf2);
console.log(result); //-1; /*
1. result < 0; 说明 buf1 在 buf2之前
2. result == 0; 说明 buf1 和buf2相等
3.result > 0 ; 说明 buf2在 buf2之前 */

6.拷贝缓冲区 buf.copy();

var buf1 = new Buffer('hello');
var buf2 = new Buffer('worl');
buf1.copy(buf2);
console.log(buf2.toString());//hello //buf1.copy(target,start,end);
//target 拷贝的对象,start 起始位置, end 结束位置

7.缓冲区的剪切 buf.slice();

var buf1 = new Buffer('hello');
var end = buf1.slice(0,2); //he
console.log(end.toString()); //he //buf1.slice(start,end); start.开始的位置,结束的位置

8.缓冲区的长度 buf.length

var buf1 = new Buffer('hello');
var l = buf1.length;
console.log(l); //5;缓冲区 长度

五、stream

1.从流中读取数据 createReadStream();

var fs = require('fs');
var txt = ''; //用于储存 stream.txt中的内容 //1.创建可读的流
var readStream = fs.createReadStream('stream.txt'); //2.设置编码格式
readStream.setEncoding('UTF8'); //3.事件流的处理 data,end,error //a. data 事件
readStream.on('data',function(chunk){
txt += chunk;
}); // b end 事件
readStream.on('end',function(){
console.log(txt);
}); //c错误情况 readStream.on('error',function(error){
console.log(error.stack)
}); console.log('执行完毕')

2.写入流 createWriteStream();

var fs = require('fs');
var data = '这是一个写入的stream流'; var writeStream = fs.createWriteStream('output.txt'); //写入数据 并设置格式 writeStream.write(data,'UTF8');
writeStream.end(); //事件处理流 data end error writeStream.on('finish',function(data){
console.log('写入完成')
}); console.log('程序执行完毕');

3.管道流 pipe 从一个文件读取东西,放到另外一个文件中

var fs = require('fs');
var readStream = fs.createReadStream('output.txt');
var writeStream = fs.createWriteStream('null.txt'); //把output.txt 中的内容 写 到null.txt中
readStream.pipe(writeStream); console.log('写入完毕');

4.链式流 通过pipe来压缩,解压文件

a.压缩文件

var fs = require("fs");
var zlib = require('zlib'); // 压缩 input.txt 文件为 input.txt.gz
fs.createReadStream('input.txt')
.pipe(zlib.createGzip())
.pipe(fs.createWriteStream('input.txt.gz')); console.log("文件压缩完成。");

b.解压文件

var fs = require('fs');
var zlib = require('zlib');
fs.createReadStream('input.txt.gz')
.pipe(zlib.createGunzip())
.pipe(fs.createWriteStream('newInput.txt')); console.log('解压完毕')

六、入门学习(一)完毕。

主要知识为 1.创建web服务器 2.同步,异步,读取文件的方法。

3.事件绑定机制 4.Buffer缓冲区对象 5.stream对象中的方法。

node入门学习(一)的更多相关文章

  1. node入门学习(二)

    一.模块系统 1.创建模块和引用模块 //如何创建一个模块 exports.hello = function(){ console.log('hello worl'); }; //这创建了一个模块 / ...

  2. node入门学习1

    一个普通网站访问过程(1)浏览器向服务器发出一个HTTP请求(2)域名解析为IP地址(3)建立TCP连接(4)浏览器发起HTTP请求(5)服务器接收到HTTP请求,解析请求的路径和参数 出现乱码的原因 ...

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

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

  4. Node入门(转)

    原文链接:http://www.nodebeginner.org/index-zh-cn.html Node入门 作者: Manuel Kiessling翻译: goddyzhao & Gra ...

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

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

  6. 蓝牙芯片NRF51822入门学习1:时间管理

    前言 之前辞职找工作的时候发现,很多公司希望招聘蓝牙技术方面的人才,所以干脆丢开LWIP静下心来学习蓝牙技术.原本以为一两星期能基本学会的,谁知道所选的蓝牙芯片nrf51822是个坑货,坑了我一个月. ...

  7. Json.Net6.0入门学习试水篇

    原文:Json.Net6.0入门学习试水篇 前言 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中 ...

  8. Node.js学习笔记(一):快速开始

    最近接了一个node项目,虽然最后顺利完成了,但是由于第一次实战,整个过程是赶出来的,许多地方一知半解.现在项目结束了,就静下心来系统地学一学,理一理,读书不忘拿笔,既然读书了,当然就要记点东西.一方 ...

  9. stylus入门学习笔记

    title: stylus入门学习笔记 date: 2018-09-06 17:35:28 tags: [stylus] description: 学习到 vue, 有人推荐使用 stylus 这个 ...

随机推荐

  1. 1797: [Ahoi2009]Mincut 最小割

    1797: [Ahoi2009]Mincut 最小割 链接 分析: 题意为:问一条边是否可能存在于最小割中,是否一定存在于最小割中. 首先最小割的边一定是满流的边.且这条边点两个端点u.v中,至少一个 ...

  2. 2115: [Wc2011] Xor

    2115: [Wc2011] Xor 链接 分析: 对于图中的一个环,是可以从1到这个环,转一圈然后在回到1的,所以可以一开始走很多个环,然后在走一条1到n的路径. 那么可以求出所有的环,加入到线性基 ...

  3. 第二章:走进shell

    2.2 通过Linux控制台终端访问CLI(command line interface) 打开CLI:control+alt+t   用于设置前景色和背景色的setterm选项 选项 参数 描述 - ...

  4. R实战:grid包

    grid包是一个底层的绘图系统,能够灵活地控制图形输出的外观和布局,但是grid包不提供创建完整图形的高级绘图系统,例如,ggplot2和lattice,而是提供绘制开发这些高级绘图的基础接口,例如: ...

  5. c# url链接转成二维码图片,再转成byte[]二进制流,输出到前段ajax

    需要用到的 dll 添加引用 代码: //获取配置文件设置的url string urllink = ConfigurationManager.AppSettings["urllink&qu ...

  6. HT7A6312—— 离线开关电源小功率初级转换开关IC 记录总结

    1. 芯片特性 a. 固定60KHz开关频率: b. 宽Vcc输出电压范围:9V - 38V: c. 宽交流输入电压范围:85Vac - 265Vac: d. 电流模式PWM控制: e. 带迟滞的辅助 ...

  7. Android——调用高德地图API前期准备

    1.登陆高德开放平台注册账号http://lbs.amap.com/ 2.创建自己的应用并且添加新key 获取发布版安全码获取方法: 在AndroidStudio的Terminal中编译: 输入如下图 ...

  8. Android Library和Android APP、Java Library的区别

    Android Library和Android APP.Java Library的区别 Android Library在目录结构上与Android App相同,它能包含构建APP所需的一切(如源代码. ...

  9. 环境变量的配置-java-JMETER - 【Linux】

    rz上传 lz下载 步骤: . Linux下首先安装Jdk: . 下载apache-jmeter-4.0.tgz,复制到Linux系统中的/opt目录下: . 解压apache-jmeter-4.0. ...

  10. Linux shell中&,&&,|,||的用法

    前言 在玩dvwa的命令注入漏洞的时候,遇到了没有预料到的错误,执行 ping 127.0.0.1 & echo "<?php phpinfo(); ?>" & ...