同步:在主程序执行,会阻止后续代码的执行,最终通过返回值获取结果
异步:会在一个独立的线程执行,不会阻止主程序后续代码执行,最终通过回调函数获取结果
二、文件系统模块(fs)用于 *** 作服务器端文件、不是本地文件
1.查看文件状态
statSync(文件路径)/stat(文件的路径,回调函数) //带Sync就是同步,不带的并且有回调函数的是异步
isFile()是否为文件
isDiretory() 是否为目录
//引入系统模块 //fs是官方提供的模块,是官方提供的模块,去自动到Node.js安装目录下寻找 const fs=require('fs') //console.log(fs) | |
//假设这个文件很大,后果就是特别耗时,影响后续代码执行————同步API var s=fs.statSync('./01_homework.js') //s是一个对象 //回去到命令行对应的目录下去寻找文件 //console.log(s) //查看是否为文件 console.log(s.isFile()) //查看是否为目录 console.log(s.isDirectory()) | //针对耗时的 *** 作,采用异步API //异步API会吧结果放在回调函数的参数中 fs.stat('./01_homework.js',function(err,s){ //err失败的结果,s成功的结果 //如果有错误就抛出错误 if(err){ throw err } console.log(s) }) |
2.写入文件
writeFileSync(文件的路径,写入的数据)/writeFile(文件的路径,写入的数据,回调函数)
如果文件不存在,先创建文件然后写入数据
如果文件已经存在,先清空文件的内容然后再写入数据
//往1.txt中写入用户名'tao' //如果文件不存在,系统会自动创建;存在会清空内容再写入 //同步 fs.writeFileSync('./txt','tao') | //异步 fs.writeFile('./2.txt','nan',function(err){ |
3.追加写入文件
appendFileSync(文件的路径,写入的数据)/appendFile(文件的路径,写入的数据,回调函数)
如果文件不存在,先创建文件然后写入数据
如果文件已经存在,会在文件的末尾追加写入数据
使用方法与“写入文件”相似 |
练习:使用同步方法往3.txt写入一个值 | 练习:使用异步方法往4.txt写入一个值 |
fs.appendFileSync('./3.txt','abc\n') //加一个\n可以换行 | fs.appendFile('./4.txt','def\n',function(err){ if(err){ throw err } }) |
练习:创建数组,保存一组姓名,遍历数组获取每一个姓名,将姓名写入到文件stu.txt中,是用异步方法(观察文件中姓名的顺序) | |
var stu=['张三','李四','王五','陈六','韩七','周八'] } | var stu=['张三','李四','王五','陈六','韩七','周八'] for(var k in stu){ fs.appendFile('./stu.txt',`${stu[k]}\n`,function(err){ if(err){ throw err } console.log('写入成功') }) } //异步写入会使元素顺序错乱 |
4.读取文件
readFileSync(文件的路径)/readFile(文件的路径,回调函数)
//读取文件 | |
var s=fs.readFileSync('./4.txt') //格式为Buffer,用函数强制转换为字符串 console.log(s.toString()) | //异步 var s=fs.readFile('./4.txt',(err,s)=>{ //箭头函数 |
5.删除文件 unlink:取消关联
unlinkSync(文件的路径)/unlink(文件的路径,回调函数)
练习:分别使用同步和异步删除文件1.txt和2.txt | |
fs.unlinkSync('./1.txt') | fs.unlink('./2.txt',(err)=>{ if(err){ throw err } }) |
6.拷贝文件
copyFileSync(源文件路径,目标文件路径)/copyFileSync(源文件路径,目标文件路径,回调函数)
拷贝文件,拷贝4.txt到当前目录下,并命名为5.txt | |
fs.copyFileSync('./4.txt','./5.txt') | fs.copyFile('./4.txt','./5.txt',(err)=>{ if(err){ throw err } }) |
流:可以把一个文件分成多段
createReadStream() 创建可读取的文件流
createWriteStream() 创建可写入的文件流
pipe() 管道,可以将读取的流添加到写入的流
on(事件名称,回调函数) 添加事件(事件是一个固定字符串,有需要去nodejs官网查),监听某一个动作,一旦监听到以后,会自动调用回调函数
利用文件流copy一个文件 | 文件流转换过程(了解) |
//引入fs模块 //创建写入的流,可以以流的方式写入文件 | //获取读取的每一段 //添加事件:监听是否有数据流入到内存 //on()用来添加事件,监听某一个动作 //'data'是固定的字符串形式,监听到数据流入内存,一旦流入会自动调用回调函数 rs.on('data',(c)=>{ //参数c 每次读取的一段数据 console.log(c) }) //添加事件:监听是否读取结束 //'end'是固定的字符串,监听读取结束 rs.on('end',()=>{ console.log('读取结束') }) |
超文本传输协议,用于浏览器和WEB服务器之间的通信协议
WEB服务器,为前端提供所需要的资源
1.通用头信息(general)
Request URL:请求的网址,表示要请求的资源
Request Method:请求的方式,表示对资源的 *** 作方式,get获取、delete删除...
Status Code:响应的状态码
1**:接收到了请求,还没有结束响应
2**:成功的响应
3**:响应的重定向(跳转)
4**:客户端错误
5**:服务器端错误
2.响应头信息(response)
Location:设置要跳转的URL
Content-Type:设置响应的内容类型,可以设置utf-8
text/html;charset=utf-8
3.请求头信息(request)
五、http模块可以用来创建WEB服务器的
有可能被防火墙拦截,最好关闭防火墙(在控制面板中关闭)
createServer() 创建WEB服务器
listen() 设置窗口
on('request',()=>{ 通过事件监听请求(添加请求要刷新浏览器网页)
req 请求的对象
res 响应的对象
res.statusCode=状态码 设置响应的状态码,默认是200
res.setHeader() 设置响应的头信息
res.write() 设置响应到浏览器的内容
res.end() 结束响应并发送
})
引入http模块 | //引入http模块 const http=require('http') //创建WEB服务器 const app=http.createServer() //设置端口 app.listen(3000,()=>{ console.log('服务器启动成功') }) |
使用浏览器请求服务器 | 使用浏览器请求服务器,获取资源(网址) 协议 域名/IP地址 端口 http://localhost:3000 http:127.0.0.1:3000 //使用浏览器打开网址,两者都可以 |
添加事件,监听浏览器的请求 1类型:响应内容 2类型:跳转网址 | //添加事件,监听浏览器的请求,一旦监听到,会自动调用回调函数 app.on('request',(req,res)=>{ //console.log('有一个请求进来') //req 请求的对象 //res 响应的对象 /* //设置响应的内容类型 res.setHeader('Content-type','text/html;charset=utf-8') //设置响应的浏览器的类容 res.write('这是你的wangye') //结束并发送响应 res.end() */ //设置响应的状态码为302 res.statusCode=302 //设置要跳转的网址 res.setHeader('Location','http://www.codeboy.com:9999/') //结束并发送响应 res.end() }) |
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)