【全栈】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中看到响应的请求信息。