Web前端105天-day31-Node.js

node.jsday03

目录

前言

一、复习

二、同步API和异步API

三、文件系统(fs)

3.1查看文件状态

3.2写入文件(清空写入)

3.3追加写入

3.4读取文件

3.5删除文件

3.6检测文件(目录)是否存在

3.7示例代码及练习

四、文件流

五、HTTP协议

5.1通用的头信息 

5.2响应的头信息(response)

5.3请求的头信息(request)

六、HTTP模块

总结


前言

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学习结束。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值