node入门学习(一)
一、安装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入门学习(一)的更多相关文章
- node入门学习(二)
一.模块系统 1.创建模块和引用模块 //如何创建一个模块 exports.hello = function(){ console.log('hello worl'); }; //这创建了一个模块 / ...
- node入门学习1
一个普通网站访问过程(1)浏览器向服务器发出一个HTTP请求(2)域名解析为IP地址(3)建立TCP连接(4)浏览器发起HTTP请求(5)服务器接收到HTTP请求,解析请求的路径和参数 出现乱码的原因 ...
- 【入门必备】最佳的 Node.js 学习教程和资料书籍
Web 开发人员对 Node.js 的关注日益增多,更多的公司和开发者开始尝试使用 Node.js 来实现一些对实时性要求高,I/O密集型的业务.这篇文章中,我们整理了一批优秀的资源,你可以得到所有你 ...
- Node入门(转)
原文链接:http://www.nodebeginner.org/index-zh-cn.html Node入门 作者: Manuel Kiessling翻译: goddyzhao & Gra ...
- Node.js学习系列总索引
Node.js学习系列也积累了一些了,建个总索引方便相互交流学习,后面会持续更新^_^! 尽量写些和实战相关的,不讲太多大道理... Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- ...
- 蓝牙芯片NRF51822入门学习1:时间管理
前言 之前辞职找工作的时候发现,很多公司希望招聘蓝牙技术方面的人才,所以干脆丢开LWIP静下心来学习蓝牙技术.原本以为一两星期能基本学会的,谁知道所选的蓝牙芯片nrf51822是个坑货,坑了我一个月. ...
- Json.Net6.0入门学习试水篇
原文:Json.Net6.0入门学习试水篇 前言 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中 ...
- Node.js学习笔记(一):快速开始
最近接了一个node项目,虽然最后顺利完成了,但是由于第一次实战,整个过程是赶出来的,许多地方一知半解.现在项目结束了,就静下心来系统地学一学,理一理,读书不忘拿笔,既然读书了,当然就要记点东西.一方 ...
- stylus入门学习笔记
title: stylus入门学习笔记 date: 2018-09-06 17:35:28 tags: [stylus] description: 学习到 vue, 有人推荐使用 stylus 这个 ...
随机推荐
- PPAS的MTK tool 工具使用说明
磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL基础知识与基本操作索引页 回到顶级页面:PostgreSQL索引页 [作者 高健@博客园 luckyjackg ...
- P3703 [SDOI2017]树点涂色
P3703 [SDOI2017]树点涂色 链接 分析: 首先对于询问,感觉是线段树维护dfs序,每个点记录到根的颜色个数.第二问差分,第三问区间取max. 那么考虑修改,每次将一个点的颜色变成和父节点 ...
- 【JUC源码解析】SynchronousQueue
简介 SynchronousQueue是一种特殊的阻塞队列,该队列没有容量. [存数据线程]到达队列后,若发现没有[取数据线程]在此等待,则[存数据线程]便入队等待,直到有[取数据线程]来取数据,并释 ...
- How to create a custom action type with a custom control (BarCheckItem), associated with it
https://www.devexpress.com/Support/Center/Example/Details/E1977/how-to-create-a-custom-action-type-w ...
- Direct2D处理几何图形之间的碰撞检测(上)
转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 Direct2D中支持以下几种类型的几何图形: a.简单几何图形(Simple Geometry):矩形.圆角矩 ...
- jQuery插件编写基础之“又见弹窗”
本文将通过一个实例来引出jQuery插件开发中的一些细节,首先介绍下jQuery插件开发的一些基础知识. jQuery的插件开发主要分为两类: 1. 类级别,即在jQuery类本身上扩展方法,类似与 ...
- JUC——线程同步锁(Condition精准控制)
在进行锁处理的时候还有一个接口:Condition,这个接口可以由用户来自己进行锁的对象创建. Condition的作用是对锁进行更精确的控制. Condition的await()方法相当于Objec ...
- 【HDU】3555【Bomb】
题目链接 此题题意就是给你T个n,找出n以内的包含49的数的个数. 很裸的一题数位dp. 直接dp包含49的数的个数有点麻烦,所以我先算出不包含49的数的个数,然后用n+1来减(因为计算不包含49的数 ...
- OpenGL学习笔记(6) 基础光照的计算方法
这个笔记只是冯氏光照模型下漫反射光以及镜面光照的计算方式的笔记 基础光照 基础光照分为环境光,漫反射光,镜面光照 环境光 环境光是一个常量,表示在没有光源的情况下物体的光 漫反射光 漫反射光分量的计算 ...
- 1.0 JAVA基础核心概念
JAVA基础知识 转载至:http://www.runoob.com/java/java-variable-types.html 对菜鸟教程进行核心整理: 一.JAVA理论概念 1.基础概念 Java ...