node.jsday03
目录
前言
node.jsday03学习开始
一、复习
二、同步API和异步API
- 同步:在主程序中执行,会阻止主程序中后续代码的执行;同步API是通过返回值获取结果。
- 异步:在一个独立的线程下运行,不会阻止主程序后续代码的执行;异步API是通过回调函数获取结果。
- 哪些是异步API:Node.js下,提供的API带有回调函数的都是异步API
三、文件系统(fs)
文件分为目录形式和文件形式
3.1查看文件状态
- 可以通过一个文件的路径知道是文件形式还是目录形式,如果是文件形式还可以知道文件大小
- statSync(文件的路径) / stat(文件的路径, 回调函数)
- isFile()--是否为文件
- isDirectory()--是否为目录
3.2写入文件(清空写入)
- writeFileSync(文件的路径, 写入的值) / writeFile(文件的路径, 写入的值, 回调函数)
- 如果文件不存在,先创建文件,然后再写入值
- 如果文件已经存在,先清空文件中的内容,然后再写入值
3.3追加写入
- appendFileSync(文件的路径, 写入的值) / appendFile(文件的路径, 写入的值, 回调函数)
- 如果文件不存在,先创建文件,然后再写入值
- 如果文件已经存在,会在文件的末尾追加写入值
3.4读取文件
- readFileSync(文件的路径) / readFile(文件的路径, 回调函数)
- 读取的结果格式为Buffer
3.5删除文件
unlinkSync(文件的路径) / unlink(文件的路径, 回调函数)
3.6检测文件(目录)是否存在
- existsSync(文件的路径)
3.7示例代码及练习
// 引入文件系统模块,属于核心模块,会自动到安装目录下寻找 const fs = require('fs') // console.log(fs) // 查看文件的状态 // 同步API: 会阻止后续代码的执行 var s = fs.statSync('01_homework.html') console.log(s) // 查看是否为文件形式 console.log( s.isFile() ) // 查看是否为目录形式 console.log( s.isDirectory() ) // 异步API: 不会阻止后续代码执行 fs.stat('../day02',(err,r)=>{ // err 可能产生的错误结果 if(err){ throw err } // r 成功的结果 console.log(r) // 是否为文件 console.log( r.isFile() ) // 是否为目录 console.log( r.isDirectory() ) // console.log('这是异步执行') }) //2. 写入文件(清空) //同步 // fs.writeFileSync('1.txt','ming666') //异步 fs.writeFile('2.txt','楠姐222',(err)=>{ if(err){ throw err } console.log('写入成功') }) // 追加写入 // 同步 // fs.appendFileSync('3.txt','xin\n') // 异步 fs.appendFile('4.txt','楠222', (err)=>{ if(err) { throw err } console.log('追加写入成功') }) // 练习:创建数组,包含一组姓名,遍历数组获取每个姓名,使用异步方法将每个姓名写入到文件stu.txt var arr = ['王一帆','丁博','陈龙飞','陈卓'] for(var i=0;i<arr.length;i++){ // arr[i] 每个姓名 fs.appendFile('stu.txt',arr[i]+'\n',(err)=>{ if(err) { throw err } console.log('写入成功') }) } // 4.读取文件:格式为Buffer // 同步 var data = fs.readFileSync('1.txt') console.log(data.toString()) // 练习:使用异步方法读取文件2.txt fs.readFile('2.txt',(err,r)=>{ if(err) { throw err } console.log(r.toString()) }) // 5.同步删除 // fs.unlinkSync('1.txt') // 异步删除 fs.unlink('2.txt',(err)=>{ if(err) { throw err } }) // 6.检测文件是否存在 // console.log( fs.existsSync('../day02') ) // 练习:如果文件3.txt存在,则删除文件 if( fs.existsSync('3.txt') ){ fs.unlinkSync('3.txt') } console.log(1)
四、文件流
- createReadStream(文件的路径)--创建读取的流,以流方式读取文件
- createWriteStream(文件的路径)--创建写入的流,创建一个新的文件
- pipe()--管道,可以将读取的流添加到写入的流
- on('事件名称', 回调函数)-- 添加事件,监听某一个操作,会自动调用回调函数;事件名称是固定的字符串形式
// 引入文件系统模块 const fs = require('fs') // 以流的方式读取文件 // 读取的流 var rs = fs.createReadStream('banner1.jpg') // 创建写入的流 var ws = fs.createWriteStream('banner2.jpg') // 将读取的流通过管道添加到写入的流 rs.pipe(ws) // 添加事件,监听是否有数据流入到内存 // data 固定的字符串,数据流入,一旦流入到内存会自动调用函数 // 声明变量,用于统计数量 var count = 0 rs.on('data',(c)=>{ // c 代表流入的每一段数据 // console.log(c) // 读取一段数量加1 count++ }) // 添加事件,监听是否读取结束 rs.on('end',()=>{ console.log(count) })
五、HTTP协议
HTTP协议:超文本传输协议,是客户端和WEB服务器之间的通信协议
5.1通用的头信息
- 请求的网址(Request URL):要请求的服务器端的资源
- 请求的方法(Request Method):对资源的操作方式,get 获取资源 post传递资源...
- 响应的状态码(Status Code)
- 1**:接收了部分请求,还没有结束
- 2**:成功的响应
- 3**:响应的重定向,发生了跳转
- 4**:客户端错误
- 5**:服务器端错误
5.2响应的头信息(response)
- Location:要跳转的网址
- Content-Type:响应的内容类型,如果要解决中文乱码(text/html;charset=utf-8)
5.3请求的头信息(request)
六、HTTP模块
- 可以用来创建WEB服务器
- WEB服务器:为前端提供资源的服务器
- createServer()--创建WEB服务器
- listen()--设置端口
添加事件,监听客户端请求,并做出响应
on('request', (req,res)=>{
res 响应的对象
res.statusCode = 状态码 设置响应的状态码
res.setHeader() 设置响应的头信息
res.write() 设置响应到浏览器的内容
res.end() 结束并发送
})
// 引入http模块 const http = require('http') // 创建WEB服务器 const app = http.createServer() // 设置端口,用于访问WEB服务器 app.listen(3000,()=>{ console.log('服务器启动成功') }) // 域名 // http://localhost:3000 // IP地址 // http://127.0.0.1:3000 // 添加事件,监听客户端的请求,并做出响应 app.on('request',(req,res)=>{ // console.log('有一个请求进来') // req 请求的对象 // res 响应的对象 // 设置响应的头信息中,内容类型这项 res.setHeader('Content-Type','text/html;charset=utf-8') // 设置响应到浏览器的内容 res.write('WEB前端') // 结束并发送 res.end() //设置响应的状态码为302 res.statusCode = 302 //设置响应的头信息中,跳转的网址 res.setHeader('Location','https://www.tmooc.cn/') // 结束并发送 res.end() })
课后练习:使用http模块创建WEB服务器,设置端口;添加事件监听客户端的请求,设置响应的状态码为404,响应的内容为“请求的页面不存在”。
// 引入http模块 const http = require('http') // 创建WEB服务器 const app = http.createServer() // 设置端口 app.listen(3000,()=>{ console.log('服务器启动成功') }) // 添加事件,监听客户端的请求 app.on('request',(req,res)=>{ // req 请求的对象 // 获取请求的资源,获取请求的方法 console.log( req.url, req.method ) // 设置响应的状态码为404 res.statusCode = 404 // 设置响应头信息中,内容类型 res.setHeader('Content-Type','text/html;charset=utf-8') // 设置响应的内容 res.write('<h1>请求的页面不存在</h1>') // 结束并发送响应 res.end() })
总结
node.jsday03学习结束。