Node.js入门

  1. http作为服务端
    Node.js模块化规范,common.js,引入模块用require,不可以用es6的import
    server.js代码如下:

开启服务,server模块

const http = require('http');
//node中的服务都是继承eventemit
//开启服务的第一种写法,createServer方法
var server = http.creatServer(function(req, res){
	//开启服务后需要做什么
	res.end('hello word')
}).listen(8080)

//开启服务器的第二种写法,server对象监听
const server = new http.Server();
server.on('request', function(req, res){
	//开启服务后需要做什么
	
	//请求路径:req.url
	var path = req.url
	
	//设置响应头:
	// 1. res.setHeader();  可以调用多次,每次只能设置一个属性
	res.setHeader('aaa', 'bbb');
	res.setHeader('ccc', 'ddd')
	
	//2. res.writeHead(); 全局只能调用一次,设置多次会被覆盖,可以设置多个属性。
	
	res.writeHeader(200, {'content-type': 'text/plain;charset = utf-8', 'aaa' : 12344})
	//第一个参数是状态码,第二个参数是告诉浏览器,这是一个text文件
	
	switch(path){
		case '/':res.end('home page');
		break;
		case '/second':res.end('second page');
		break;
		default:res.end('404');
		break;
	}
	res.end('hello world!');
})
server.listen(8081)

设置setHeader会和writeHeader融合到一起。如果setHeader和writeHeader同时设置相同的属性,会以writeHeader为主。在network中看response headers,aaa的属性值是12344。writeHeader必须写在setHeader之后,否则会报错。如果要往客户端写入cookie,也可以通过设置响应头。

res.write(); //可以多次调用
res,end(); //只能调用一次
write和end必须接收一个字符串或者buffer(二进制编码)
buffer.tostring(); //可以将buffer转成字符串

获取请求头信息

req.httpVersion  //http协议版本  1.0  1.1
req.method  //请求方法
req.url  //请求路径
req.headers  //请求头
http.STATUS_CODES   //状态码信息

//验证token
var token = md5(req.url+req.headers['time']+'hsifisafasifu ');
//前端token加密方法:md5加密,路径拼时间戳拼随机密匙
if(req.headers['token']===token){
	res.end()
}else{
	res.writeHead(401, {'content-type': 'text/html;charset = utf-8'});
	res.end('请求不被允许');
}

服务端常用的监听事件:
connection事件:tcp连接已经建立好了(在http运行之前,要先建立tcp连接)

//在数据传过来之前做的事情,在request事件之前触发
server.on('connection', function(){
	
})
//错误处理
server.on('error', function(err){
	console.log(err)
	//err.code  错误码,错误原因
})

服务端超时处理

//2s之后,没有发送任何消息了,就进行超时处理
server.setTimeout(2000, function(){})

response事件

//之调用一次
res.on('finish', function(){
	console.log('响应完成')
})

//响应超时处理
res.on('timeout', function(){
	console.log('服务器繁忙')
})
res.setTimeout(3000)  //设置超时的时间

request事件监听
当发送一个大的请求的时候,node是按流一点点接受过来的,不是一次性接受过来的,每次接受数据都会触发data事件

//一般用来接受post请求,get请求不会触发,data是请求体,get请求的数据在请求头
req.on('data', function(chunk){
	console.log('接受数据')
})
req.on('end', function(){
	console.log('数据接受完')
})

文件断点续传,用的是req,pause(); //暂停
req.consume(); //继续

服务端接受get和post请求

  1. get请求
const url = require('url');
server.on('request', function(req, res){
	//获取请求参数
	var params = url.parse(req.url, true).query;
})
  1. post请求
const url = require('url');
server.on('request', function(req, res){
	//获取请求参数
	var body = '';
	req.on('data', function(chunk){
		body+=chunk;
	});
	req.on('end', function(){
		console.log(body)
	})
})

运行node,在目录打开命令行窗口,执行 node server.js
3. http作为客户端
client.js
发送请求

const http = require('http');
const option= {
	hostname:'127.0.0.1',   //请求的地址
	port:3000,  //请求端口
	path: '/second',  //请求路径
	method: 'POST',  //请求方法
	headers:{
		'Content-Type' : 'application/json'
	}  //请求头	
}

//第一个参数是 接受配置,第二个参数是接受回调函数
var req = http.request(option, function(res){
	var body = '';
	res.on('data', function(chunk){
		body+=chunk
	})
	res.on('end', function(chunk){
		console.log(body)
	})
});
var postjson = '{"a":123, "b":345}';
req.write(postjson);
req.end();

http.get('http://localhose:3000/?a=123', function(res){
	var body = '';
	res.on('data', function(chunk){
		body+=chunk
	})
	res.on('end', function(chunk){
		console.log(body)
	})
});

响应头和请求头的设置

  1. req设置
const http = require('http');
const option= {
	hostname:'127.0.0.1',   //请求的地址
	port:3000,  //请求端口
	path: '/second',  //请求路径
	method: 'POST',  //请求方法
	headers:{
		'Content-Type' : 'application/json'
	}  //请求头	
}

//第一个参数是 接受配置,第二个参数是接受回调函数
var req = http.request(option, function(res){
	var body = '';

	//防止接收的是乱码
	res.setEncoding('utf-8');
	res.headers;  //服务器发送的响应头
	res.statusCode; //服务器发送的状态码
	
	res.on('data', function(chunk){
		body+=chunk
	})
	res.on('end', function(chunk){
		console.log(body)
	})
});
var postjson = '{"a":123, "b":345}';

//设置请求头
req.setHeader('xxx', 123);

req.write(postjson);
req.end();

//错误处理
req.on(error, function(err){
	console.log(err)
})
超时处理
req.setTimeout(3000, function(){
	console.log('请求超时')
})

开启https

const https = require('https');
const fs = require('fs');

const options = {
	key: fs.readFileSync('./privatekey.pem'), //私钥
	cert: fs.readFieSyne('./certificate.pem')  //公钥
};

https.createServer(options, (req, res)=>{
	res.end()
}).listen(8080)


开启http和https的区别:开启https的配置需要一个读取私钥和公钥的属性

开启http2

const http2 = require('http2');
const fs = require('fs');

const options = {
	key: fs.readFileSync('./privatekey.pem'), //私钥
	cert: fs.readFieSyne('./certificate.pem')  //公钥
};

https.createSecureServer(options, (req, res)=>{
	res.end()
}).listen(8080)

真正会node还要掌握什么?
node使用数据库,Redis

node框架的使用
express,koa,egg

node服务器的部署
Linux服务器

node项目开发实战

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值