【全栈】Node.js学习记录(1)

本系列文章用以记录我对node.js的学习,如有专业知识表述不当之处,还请不吝赐教!
1、创建第一个http服务

var http = require('http');
//console.log(http)
http.createServer(function(request,response){
	//http头部信息 状态码:200
	//内容的类型:text/plain text/html text/xml(用得少)
	response.writeHead(200,{'Content-Type':'text/plain;charset=UTF-8'});
	//向客户端发送数据
	response.end('我的第一个http服务');
}).listen(2048);
console.log('2048端口http服务已启动!')

2、读取文件(同步操作)

//同步读取文件的例子
var fs = require('fs');
var data = fs.readFileSync('text.txt');
console.log(data.toString())
console.log('-------------')
console.log('JS执行结束')
/*
此操作形成阻塞。在读取文件过程中无法执行其他操作!
*/

3、读取文件(异步操作)

//这是一个基于回调的非阻塞的文件读取例子
var fs = require('fs');
fs.readFile('text.txt',function(err,data){
	if(err) return err;
	console.log(data.toString());
})
console.log('-------------')
console.log('JS执行结束')
/*
不需要等待文件读取完成
可以在读取文件的同时执行接下来的代码
提高了js的性能
*/

4、绑定、触发一个事件

var events = require('events');
//EventsEmitter的一个实例
var EventEmitter = new events.EventEmitter();
/*
这里的事件名不同于浏览器上的各种事件
这里的事件名是一个标识
绑定了一个回调函数
*/ 
EventEmitter.on('xx123',function(){
	console.log('xx123事件已经被触发');
})
//触发一个事件
EventEmitter.emit('xx123');
console.log(EventEmitter)

5、延时触发事件

//第2个nodejs中事件的例子
var eventEmitter = require('events').EventEmitter;
var events = new eventEmitter();
events.on('timeout',function(){
	console.log('timeout事件已经被触发');
})
setTimeout(function(){
	events.emit('timeout');
},3000)
console.log(events);

6、触发事件并传参

//第3个nodejs中事件的例子
var eventEmitter = require('events').EventEmitter;
var events = new eventEmitter();
events.on('xx1',function(a,b){
	console.log('xx1',a);
})
events.on('xx1',function(a,b){
	console.log('xx2',b);
})
events.emit('xx1','参数一','参数二')

7、Buffer与字符编码

const buf1 = Buffer.alloc(256);
let xx = buf1.write('小葱伴逗虎')
console.log(buf1);
console.log('写入的字节数:'+xx);
console.log(buf1.toString())
console.log(buf1.toString('utf8',3,6))

8、Buffer输出26个英文字母

//批量输出26个英文字母
buf = Buffer.alloc(26);
for(var i=0;i<26;i++){
	buf[i]=i+97;
}
console.log(buf);
console.log(buf.toString());
console.log(buf.toString());

9、将Buffer转换为 JSON 对象

const buf1 = Buffer.from([0x1,0x2,0x3,0x4,0x5]);
const json = JSON.stringify(buf1)
console.log(buf1)
console.log(typeof json)
console.log(json)
console.log(typeof JSON.parse(json))
console.log(JSON.parse(json))
console.log(JSON.parse(json).data)

10、读取文件内容

//引入fs文件模块
var fs = require('fs');
var data = '';
//创建一个可读流 createReadStream
var readStream = fs.createReadStream('input.txt')
//设置可读流的文件编码 utf-8
readStream.setEncoding('utf8');
//处理流的事件 data end error
readStream.on('data',function(d){
	data += d;
})
readStream.on('end',function(){
	console.log(data)
})
console.log('读取完毕')

11、写入文件内容

var fs = require('fs');
//准备写入的内容
var data = '这句话将被写入指定的文件中'
//创建一个可以写入的流
var writeStream = fs.createWriteStream('write.txt');
//设置编码
writeStream.write(data,'utf8');
//标记文件末尾
writeStream.end();
writeStream.on('finsh',function(){
	console.log('内容写入完成啦!')
})
console.log('执行完毕')

12、将文件内容进行管道流操作复制

var fs = require('fs');
//创建一个可读流 createReadStream
var readStream = fs.createReadStream('input.txt')
//创建一个可以写入的流
var writeStream = fs.createWriteStream('write_1.txt');
//管道流操作
readStream.pipe(writeStream);
console.log('执行完毕!');

13、压缩文件

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

14、解压文件

var fs = require('fs');
var zlib = require('zlib');
//解压缩文件
fs.createReadStream('input.txt.gz')
	.pipe(zlib.createGunzip())
	.pipe(fs.createWriteStream('output.txt'));	
console.log('解压缩完成!')

15、公开一个模块

//引入外部的模块
var module_1 = require('./module_2');
//console.log(module_1);
module_1.demo1()
exports.demo1 = function(){
	console.log('这是模块二中的方法一')
}

15、公开整个模块

//公开整个模块
function demo2(){
	this.a = 123;
	this.b = function(){
		console.log('这是整个模块中给b定义的函数');
	}
}
module.exports = demo2;
var module_4 = require('./module_3');
var xxobj = new module_4;
console.log(xxobj.a);
xxobj.b()

16、get请求服务

//get 请求
var http = require('http');
var util = require('util');
var url = require('url');
http.createServer(function(req,res){
	res.writeHead(200,{
		'Content-Type':'text/plain;charset= utf-8'
	});
	res.end('响应内容')
}).listen(2048)
console.log('2048端口服务已启动!')
//get 请求
var http = require('http');
var util = require('util');
var url = require('url');
http.createServer(function(req,res){
	res.writeHead(200,{
		'Content-Type':'text/plain;charset= utf-8'
	});
	var param = url.parse(req.url,true).query;
	res.write('姓名:' + param.name)
	res.write('\n') 
	res.write('年龄:' + param.age)
	res.end();
}).listen(2048)
console.log('2048端口服务已启动!')

17、post请求服务

//post 请求
var http = require('http');
var querystring = require('querystring');
var formHtml = 
	'<form method="post">'+
		'姓名:<input name="name"><br>'+
		'年龄:<input name="age"><br>'+
		'<input type="submit">'+
	'</form>';
http.createServer(function(req,res){
	var body = '';
	req.on('data',function(d){
		body += d;
	});
	req.on('end',function(){
		body = querystring.parse(body);
		res.writeHead(200,{
			'Content-Type':'text/html;charset=utf-8'
		});
		if(body.name){
			res.write('姓名:' + body.name)
			res.write('<br/>') 
			res.write('年龄:' + body.age)
		}else{
			res.write(formHtml);
		}
		res.end();
	})
}).listen(2048)
console.log('2048端口服务已启动')

18、使用Express框架创建服务
需要先安装Express,使用命令:npm install express -save会生成文件夹:node_modules

//第一个express例子,创建一个服务
var express = require('express');
var app = express();
app.get('/',function(req,res){
	res.send('第一个express例子,创建一个服务');
});
app.listen(2048,function(){
	console.log('2048端口服务已启动!')
})

19、Express 简单的路由

//第二个express例子,简单的路由
var express = require('express');
var app = express();
app.get('/',function(req,res){
	res.send('第二个express例子,简单的路由<br><a href="/a">A页面</a><br><a href="/b">B页面</a><br><a href="/c">C页面</a>');
});
app.get('/a',function(req,res){
	res.send('这是A页面<br><a href="/a/a1">AA页面</a><br><a href="/">首页</a>');
});
app.get('/a/a1',function(req,res){
	res.send('这是AA页面<br><a href="/">首页</a>');
});
app.get('/b',function(req,res){
	res.send('这是B页面<br><a href="/b/b1">BB页面</a><br><a href="/">首页</a>');
});
app.get('/b/b1',function(req,res){
	res.send('这是BB页面<br><a href="/">首页</a>');
});
app.get('/c',function(req,res){
	res.send('这是C页面<br><a href="/c/c1">CC页面</a><br><a href="/">首页</a>');
});
app.get('/c/c1',function(req,res){
	res.send('这是CC页面<br><a href="/">首页</a>');
});
app.listen(2048,function(){
	console.log('2048端口服务已启动!')
})

20、Express 中间件、静态目录
此处需要创建静态文件夹:staticDev ,存放文件:index.html ,用于展示使用。

//第三个express例子,静态目录
var express = require('express');
var app = express();
app.use(express.static('staticDev'));
app.listen(2048,function(){
	console.log('2048静态目录已经启动!')
})
//此时访问http://localhost:2048/ 可查看到事先准备好的index.html文件,并且可以在Network中看到响应的请求信息。
posted @ 2020-10-03 23:44  小葱伴逗虎  阅读(105)  评论(0编辑  收藏  举报