http模块
const http = require('http');
var server = http.createServer(function(req,res){});
这是一个函数,它有两个参数
request 请求 浏览器输入的请求信息
response 响应 输出到浏览器的信息
补充:
参数名可以随便取
通常request简写成req,response简写成res
res.write() 输出到前台
res.end() 结束请求
server.listen();
const http = require('http');
var server = http.createServer(function(req,res){
switch(req.url){
case '/1.html':
res.write('111');
break;
case '/2.html':
res.write('222');
break;
default:
res.write('404');
break;
}
res.end();
});
server.listen(8811);
fs文件模块
const fs = require('fs');
readFile() 读取文件
writeFile() 写入文件
readFile( 路径,(编码方式,)回调函数)
1. 编码方式可以忽略
2. 回调函数有2个参数,一个是err(错误),一个是data
3. 在获取data时调用toString方法
读取aaa.txt里面的内容
fs.readFile('aaa.txt',function(err,data){
if(err){
console.log('读取失败');
}else{
console.log(data.tostring());
}
})
writeFile( 路径,内容,回调函数)
向bbb.txt文件写入“shesfjh”。
fs.writeFile('bbb.txt','shesfjh',function(err){
console.log(err);
});
首先,创建一个www文件,里面存放允许外部访问的文件。
假设,现在别人请求了一个index.html。
req.url = "/index.html"
我们要读取www下的html ,就是 "./www/index.html"
也就是 "./www" + req.url
请看代码:
const http = require('http');
const fs = require('fs');
var server = http.createServer(function(req,res){
var file_name= './www'+req.url;
fs.readFile(file_name,function(err,data){
if(err){
console.log('404');
}
else{
res.write(data);
}
res.end();
});
});
server.listen(8800);
HTTP数据解析——GET
数据请求:
前台——>from、ajax、jsonp
后台——>大体都一样
请求方式:
GET 数据在url中
传统方法解析数据
例如:
/aaa?user=sas&pass=asd
请求地址 /aaa
数据 user=sas&pass=asd
所以,只要我们使用数组的split方法,便可以获得我们想要的数据。
实例:
const http = require('http');
var server = http.createServer(function(req,res){
var GET={};
if(req.url.indexOf('?')!=-1){
var arr=req.url.split('?'); //req获取前台的请求数据
var url = arr[0]; //arr[0]=>>地址 '/aaa'
//arr[1]=>>数据 'user=sas&pass=asd'
var arr2 = arr[1].split('&'); //arr2=>['user=sas','pass=asd']
for(var i = 0; i < arr.length; i++){
var arr3 = arr2[i].split('=');
//arr3[0]=>>名字 'user'
//arr3[1]=>>数据 'sas'
GET[arr3[0]]=arr3[1];
}
}
else{
var url = req.url;
}
console.log(url,GET);
res.end();
});
server.listen(8811);
简单方法——querystring模块
使用querystring,可以快捷解析出我们的数据。
1)引入querystring
const querystring = require('querystring');
2)建立http.createServer对象,监听端口
3)函数内声明GET为一个{}空对象
var GET={};
4)判断是否有数据?
if(req.url.indexOf('?')!=-1)
5)执行体内部对req.url进行分割var arr=req.url.split('?');
6)让GET等于querystring.parse(数据) GET = querystring.parse(arr[1]);
实例
const http = require('http');
const querystring = require('querystring');
var server = http.createServer(function(req,res){
var GET={};
if(req.url.indexOf('?')!=-1){
var arr=req.url.split('?');
var url = arr[0];
GET=querystring.parse(arr[1]);
}
else{
var url = req.url;
}
console.log(url,GET);
res.end();
});
server.listen(8811);
简单方法——url模块
使用url模块,也能达到解析数据的目的。
语法:
parse(完整地址, true)
返回值是一个对象。
解析后有用的属性:
pathname 请求地址
query 数据
注意,选择true才可以解析query的参数。
实例
const http = require('http');
const urlLib = require('url');
var server = http.createServer(function(req,res){
var obj = urlLib.parse(req.url,true);
var url = obj.pathname;
var GET = obj.query;
console.log(url,GET);
res.end();
});
server.listen(8811);
HTTP数据解析——POST
post数据量大,要分段接收。
首先,我们先介绍关于req的两个方法
req.on('data',回调函数) data有一段数据到达,就发生一次
req.on('end',回调函数) 数据全部到达的时候,只发生一次。
const http = require('http');
const querystring = require('querystring');
var server = http.createServer(function(req,res){
//声明一个空字符串,用来接受数据
var str='';
//data有一段数据到达,就发生一次
var i=0;
req.on('data',function(data){
console.log(`第${i++}次收到数据`);
str+=data;
});
//数据全部到达的时候,只发生一次。
req.on('end',function(){
var POST = querystring.parse(str);
console.log(POST);
});
});
server.listen(8813);
整合http和fs模块
const http = require('http');
const fs = require('fs');
const querystring = require('querystring');
const urlLib = require('url');
var server = http.createServer(function(req,res){
//GET
var obj = urlLib.parse(req.url,true);
var url = obj.pathname;
const GET = obj.query;
//POST
var str='';
req.on('data',function(data){
str+=data;
});
req.on('end',function(){
var POST = querystring.parse(str);
/* ***************************
目前完成了url——要什么
GET——get数据
POST——post数据
*************************** */
});
//文件请求
var file_name= './www'+url;
fs.readFile(file_name,function(err,data){
if(err){
res.write('404');
}
else{
res.write(data);
}
res.end();
});
});
server.listen(8813);