node.js中fs模块、path模块和http模块详解

node

node.js是基于V8引擎开发的,负责解析和执行javaScript代码的运行环境,javaScript在浏览器环境中运行执行的是前端开发,javaScript在node.js环境中运行执行的是后端开发。node.js中无法调用DOM和BOM等浏览器内置API

在这里插入图片描述
Windows运行终端有两种 一种是 cmd 一种是powershell,powershell是微软在cmd基础上升级改进而来的功能比cmd更加强大。打开方式为 shift + 鼠标右键 就可以在对应文件夹中打开powershell。

终端快捷键

  • 在文件夹中输入文件首字母 按Tab键会自动补全文件全称
  • 使用 ↑ 键可以快速定位到上一次执行的命令
  • 使用esc键能够快速清空当前已输入的命令
  • 输入 cls命令 可以清空终端

fs文件系统模块

fs模块是node.js官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
例如:

  • fs.readFile()方法,用来读取指定文件中的内容
  • fs.writeFile()方法,用来向指定的文件中写入内容

如果要在javaScript代码中,使用fs模块来操作文件,则需要使用如下的方式先导入它

const fs = require('fs')

1.fs.readFile()的语法格式

使用fs.readFile()方法,可以读取指定文件中的内容,语法格式如下:

fs.readFile(path [,options], callback)
  • 参数1path:必选参数,字符串,表示文件的路径。
  • 参数2:可选参数,表示以什么编码格式来读取文件,(上面是可选参数的格式用一个数组包起来)
  • 参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果。
//1.导入fs模块,来操作文件
const fs = require('fs')
//2.调用fs.readFile()方法读取文件
fs.readFile('./files/1.txt','utf8',function(err,dataStr){
//如果读取成功,则err的值为null
//如果读取失败,则err的值为错误对象,dataStr的值为undefined
console.log(err)
console.log('----------')
//打印成功的结果
console.log(dataStr)
})

2.fs.writeFile()的语法格式

使用fs.writeFile()方法,可以向指定的文件中写入内容,语法格式如下:

fs.writeFile(file,data [,options],callback)
  • 参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径。
  • 参数2:必选参数,表示要写入的内容。
  • 参数3:可选参数,表示以什么格式写入文件内容。默认值为utf8
  • 参数4:必选参数,文件写入完成后的回调函数。
//1.导入fs模块,来操作文件
const fs = require('fs')
//2.调用fs.readFile()方法读取文件
fs.readFile('./files/1.txt','utf8',function(err,dataStr){
	if(err){
		return console.log('读取文件失败' + err.message)
	}
	const arrOld = dataStr.split(' ')
	const arrNew = []
	arrOld.forEach(item => {
		arrNew.push(item.replace('=',':'))
	})
	//把新数组中的每一项,进行合并,得到一个新的字符串
	const newStr = arrNew.join('\r\n')
	console.log(newStr)
})

3.fs处理路径问题

__dirname在js文件中表示当前文件所处的目录

path路径模块

1.什么是path路径模块

path模块是node.js官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理。
例如:

  • path.join()方法,用来将多个路径片段拼接成一个完整的路径字符串
  • path.basename()方法,用来从路径字符串中,将文件名解析出来

2.path.join()的语法格式

使用path.join()方法,可以把多个路径片段拼接为完整的路径字符串,语法格式如下:

path.join([...paths])
//导入path模块
const path = require('path')

const pathStr = path.join('/a','/b/c','../','./d','e')
console.log(pathStr)//输出 \a\b\d\e

3.path.basename()的语法格式

//导入path模块
const path = require('path')

const fpath ='/a/b/b/index.html' //文件存放路径
var fullName = path.basename(fpath)
var nameWithoutExt = path.basename(fpath,'.html')
console.log(nameWithoutExt)//输出index

path.exname()的语法获取文件扩展名
使用path.exname()方法,可以获取路径中扩展名的部分,语法格式如下

const path = require('path')

const fpath ='/a/b/b/index.html' //文件存放路径
const fext = path.exname(fpath)
console.log(fext)//输出.html

http模块

1.创建web服务器的基本步骤

  1. 导入http模块
  2. 创建web服务器实例
  3. 为服务器实例绑定request事件,监听客户的请求
  4. 启动服务器
const http = require('http')
const server = http.creatServer()
server.on('request',function(req,res){
	console.log('Someone visit our web server')
})
server.listen(80,function(){
	console.log('server running at http://127.0.0.1:80')
})

2.req请求对象

只要服务器接收到了客户端的请求,就会调用通过server.on()为服务器绑定的request事件处理函数。
如果想在事件处理函数中,访问与客户端相关的数据或属性,可以使用如下的方式:

server.on('request',(req) =>{
	//req是请求对象,它包含了与客户端相关的属性和数据,例如:
	//req.url是客户端请求的URL地址
	//req.method是客户端的method请求类型
	const str = `Your request url is ${req.url}, and request method is ${req.method}`
	console.log(str)
})

3.res响应对象

在服务器的request事件处理函数中,如果想访问与服务器相关的数据或属性,可以使用如下的方式:

server.on('request',(req,res) => {
	//res是响应对象,它包含了与服务器相关的数据和属性,例如:
	// 要发送到客户端的字符串
	const str =`Your request url is ${req.url}, and request method is ${req.method}`
	//res.end()方法的作用:
	//向客户端发送指定的内容,并结束这次请求的处理过程
	res.end(str)
})

当调用res.end()方法,向客户端发送中文内容的时候,会出现乱码问题,此时,需要手动设置内容的编码格式:

server.on('request',(req,res) => {
	//res是响应对象,它包含了与服务器相关的数据和属性,例如:
	// 要发送到客户端的字符串
	const str =`Your request url is ${req.url}, and request method is ${req.method}`
	//为防止中文显示乱码的问题,需要设置响应头Content-Type的值为text/html; charset=utf-8
	res.setHeader('Content-Type','text/html; charset=utf-8')
	//res.end()方法的作用:
	//向客户端发送指定的内容,并结束这次请求的处理过程
	res.end(str)
})

4.根据不同的url响应不同的html内容

核心实现步骤

  1. 获取请求的url地址
  2. 设置默认的响应内容为404 Not found
  3. 判断用户请求是否是/或/index.html首页
  4. 判断用户请求是否为/about.html关于页面
  5. 设置Content-Type响应头,防止中文乱码
  6. 使用res.end()把内容响应给客户端
server.on('request',(req,res) => {
	//1. 获取请求的url地址
	const url =req.url
	//2. 设置默认的响应内容为404 Not found
	let content ='<h1>404 Not found</h1>'
	//3. 判断用户请求是否是/或/index.html首页
	if(url ==='/' || url==='/index.html'){
		content = '<h1>首页</h1>'
	//4. 判断用户请求是否为/about.html关于页面
	} else if(url==='/about.html'){
		content = '<h1>关于页面</h1>'
	}
	//5. 设置Content-Type响应头,防止中文乱码
	res.setHeader('Content-Type','text/html; charset=utf-8')
	// 6. 使用res.end()把内容响应给客户端
	res.end(content)
})
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值