fs模块
- 创建目录
fs.mkdir(path, callback) / fs.mkdirSync(path)
path
:目录的路径
callback
:回调函数//引入fs模块 const fs=require('fs'); //1.创建目录 //make direcotry fs.mkdir( 'mydir',function(err){ //err可能产生的错误 if(err) throw err; console.log('目录创建成功'); } );
- 读取目录
fs.readdir(path,callback)/fs.readdirSync(path)
//2.读取目录 fs.readdir('01_homework',function(err,result){ if(err) throw err; //result是读取的结果 console.log(result); });
- 移除目录
fs.rmdir(path,callback)/fs.rmdirSync(path)
//3.移除目录 fs.rmdir('01_homework',function(err){ if(err) throw err; console.log('目录移除成功'); });
- 覆盖写入文件
fs.writeFile(path,data,callback)/fs.writeFileSync(path,data)
path
:文件路径
data
:文件要写入的数据
如果文件不存在,会先创建文件然后写入数据//4.创建文件/写入文件 fs.writeFile('1.txt','然哥今天穿一件翠绿色的衣服',function(err){ if(err) throw err; console.log('数据写入成功'); });
如果文件已经存在,会覆盖其中的内容写入数据 - 追加写入文件
fs.appendFile(path,data,callback)/fs.appendFileSnyc(path,data)
如果文件不存在,会先创建文件然后写入数据//5.创建文件/追加写入 fs.appendFile('2.txt','然哥今天穿了一斤荧光绿的泳衣\n',function(err){ if(err) throw err; });
如果文件存在,会在文件的末尾追加写入数据
练习:将一组数据(数组)使用同步方法追加写入到文件data.txt中
- 读取文件
fs.readFile(path,callback)/fs,readFileSync(path)
读取的数据格式为Buffer
,需要转字符串//6.读取文件 fs.readFile('data.txt',function(err,data){ if(err) throw err; //data读取到的数据,格式为Buffer,需要转为字符串 console.log( data.toString() ); });
- 删除文件
fs.unlink(path,rallback)/fs.unlinkSync(path)
//7.删除文件 fs.unlink('1.txt',function(err){ if(err) throw err; console.log('删除成功'); });
练习:使用异步方法删除1.txt,使用同步方法删除2.txt
- 检测文件(目录)是否存在
fs.existsSync(path)
如果存在返回true,不存在返回false//8.检测文件(目录)是否存在 //console.log( fs.existsSync('mydir') ); //练习:如果目录mydir2不存在则创建该目录,如果文件data.txt存在则删除该文件 if( !fs.existsSync('mydir2') ){ fs.mkdirSync('mydir2'); } if( fs.existsSync('data.txt') ){ fs.unlinkSync('data.txt'); }
练习:如果目录mydir2不存,则创建该目录,如果文件data.txt存在,则删除该文件
- 流:数据流,只需要内存中很小空间,就可以读取一个大文件
fs.createReadStream(path)
:创建可读取的流对象
fs.createWriteStream(path)
:创建可写入的流对象
pipe()
:管道,专门用于处理流const fs=require('fs'); //文件流 //创建可读取的文件流对象 let readStream=fs.createReadStream('1.zip'); //获取数据 //通过事件:一旦有数据流进来,自动获取 //on('data') 监听是否有数据流,data是固定写法,就是事件名称; //通过回调函数获取数据 let i=0; readStream.on('data',function(chunk){ //chunk 就是所读取的数据,分段的数据 //console.log(chunk); //每读取一段加1 i++; }); //事件:监听是否读取结束 //end是事件名称,固定写入;如果结束会自动触发该事件,执行后边的回调函数 readStream.on('end',function(){ console.log('读取结束',i); }); //使用流完成拷贝大文件 //创建可读取的流 const readStream=fs.createReadStream('1.zip'); //创建可写入的流,同时也会创建新的文件 const writeStream=fs.createWriteStream('2.rar'); //把读取的流通过管道添加到写入流 //pipe 管道 readStream.pipe(writeStream);
http协议
- 客户端浏览器和web服务器之间的通信协议
- 通用头信息(General)
Request URL
:请求的URL,代表请求的内容是哪些Request Method
:请求的方法,请求内容的方式,常用的get/postStatus Code
:响应的状态码
1**:正在响应,还没有结束
2**:成功的响应
3**:响应的重定向,会跳转到另一个URL,要结婚响应头信息的Location完成跳转
4**:客户端错误,例404
5**:服务器端错误
- 响应头信息(Response)
Location
:跳转到另一个URL,结合状态码3**Content-Length
:响应的内容长度Accept-Ranges
:响应内容的单位,通常是bytesContent-Type
:响应的文件类型
- 请求头信息(Request)
Accept-Encodeing
:浏览器接收的压缩类型 gzip/deflate - 请求的主题
传递的数据,可有可无
http模块
既可以创建一个独立web服务器,也可以模拟浏览器向其他服务器发送请求
1.向其他服务器发请求
http.get(url,callback)
ul
:请求的URLcallback
:通过回调函数获取响应
res
:响应的对象
res.statusCode
:响应的状态码res.on('data',function(chunk){ })
通过事件获取传递的参数,chunk就是获取的数据,格式为Buffer
const http=require('http'); //请求其它服务器 //get 请求方法 //参数1:请求的URL //参数2:通过回调函数获取服务器端的响应 http.get('http://www.weather.com.cn/data/sk/101030100.html',function(res){ //res响应的对象 //获取响应状态码 console.log(res.statusCode); //获取数据(流) //监听是否有数据流,通过回调函数获取数据 res.on('data',function(chunk){ //chunk传递的数据,分段的 console.log(chunk.toString()); }); });
- 创建web服务器
const http=require('http');
//创建web服务器
const app=http.createServer();
//设置端口
app.listen(8080);
//服务器端要做出响应
//事件:一旦有请求发生,自动触发这个这个事件,执行回调函数
//通过回调函数做出响应
app.on('request',function(req,res){
//console.log('有客到!!!');
//req 请求的对象
//获取请求的内容
console.log(req.url);
//res 响应的对象
//跳转到另一个URL
//参数1:设置响应的状态码
//参数2:可以为空,用来设置响应的头信息
//res.writeHead(302,{
// Location:'http://www.baidu.com'
//});
res.write('this is your beer');//设置响应的内容
res.end(); //结束并发送响应
});
通过:http://127.0.0.1:8080/http://localhost:8080
访问
练习:创建web服务器,根据请求作出响应
1. 请求url /login 响应 this is login
2. 请求url /study 跳转到 http://www.baidu.com
3. 其他 响应转台码,404 内容为 not found
思路:就是if判断req.url