基于Node.js的fs,path,http模块搭建web服务器

Node.js三个模块

一、fs模块

1.导入fs模块

const fs = require('fs')

2.调用 fs.readFile()方法读取文件

fs.readFile(path[,options],callback)
//参数path:读取文件的存放路径
//参数options(可选参数):读取文件时采用的编码格式,默认指定 utf8
//参数callback:回调函数,拿到读取失败和成功的结果 err dataStr
ep:fs.readFile('./files/test.txt','utf8',function(err,dataStr){})

判断文件是否读取成功

const fs = require('fs')
fs.readFile('./files/test.txt','utf8',function(err,dataStr){
	if(err){
		return console.log('文件读取失败!' + err.message)
	}
	console.log('文件读取成功,内容是:' + result)
})

3.调用fs.writeFile()方法向指定的文件中写入内容

fs.writeFile(file,data[,options],callback)
//参数file:需要指定一个文件路径的字符串,表示文件的存放路径
//参数data:表示要写入的内容
//参数options(可选参数):写入文件时采用的编码格式,默认指定 utf8
//参数callback:回调函数,拿到写入文件失败的结果 err
ep:fs.writeFile('./files/test.txt','abcd',function(err){})

判断文件是否写入成功

const fs = require('fs')
fs.writeFile('./files/test.txt','abcd',function(err){
	if(err){
		return console.log('文件写入失败!' + err.message)
	}
	console.log('文件写入成功!‘)
})

二、path文件路径模块

0.概况

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

1.导入path模块

const path = require('path')

2.路径拼接path.join()

path.join([...paths])
//...paths<string>路径片段的序列
返回值:<string>

代码示例

const pathStr = path.join('/a','/b/c','../','./d','e')
console.log(pathStr)//输出 \a\b\d\e “../会抵消前一个/”

const pathStr2 = path.join(__dirname,'./files/1.txt')
console.log(pathStr2)//__dirname为当前所处目录

3.获取路径中的文件名path.basename()

path.basename(path[,ext])
//path<string>必选参数,表示一个路径的字符串
//ext<string>可选参数,表示文件扩展名
//返回:<string>表示路径中的最后一部分

代码示例

const fpath = '/a/b/c/index.html'
let fullName = path.basename(fpath)
console.log(fullName)
let nameWithoutExt = path.basename(fpath,'.html')
console.log(nameWithoutExt) //输出index

4.获取路径中的文件扩展名path.extname()

path,extname(path)
//path<string>必选参数,表示一个路径的字符串
//返回:<strin>返回得到的扩展名字符串

代码示例

const fpath = '/a/b/c/index.html'
const fext = path.extname(fpath)
console.log(fext) //输出.html

三、http模块

0.概况

客户端:在网络节点中,负责消费资源的电脑。
服务器:负责对外提供网络资源的电脑。
IP地址:互联网上每台计算机的唯一地址,格式“点分十进制”(a.b.c.d)形式,其中a、b、c、d都是0~255之间的十进制数。
端口:每个web服务对应一个端口号,形式(a,b,c,d:端口),实际应用中URL的80端口可省略。
域名(Domain Name):字符型的地址方案,与IP地址一一对应。
域名服务器(DNS,Domain name server):提供IP地址和域名之间的转换服务的服务器

1.导入http模块

const http = require('http')

2.创建web服务器实例

const server = http.creatServer()

3.为服务器绑定 request 事件,监听客户端的请求

server.on('request',function(req,res){
	console.log('Someone visit our web server.')
})

3.1 req请求对象

只要服务器接收到了客户端的请求,就会调用通过server.on()为服务器绑定的request事件处理函数
req是请求对象,它包含了与客户端相关的数据和属性,例如:
req.url 是客户端请求的 URL 地址
req.method 是客户端的 method 请求类型

server.on('request',(req) => {
	const str = 'Your request url is ${req.url},and request method is ${req.method}'
	console.log(str)
})

3.2 res响应对象

res是响应对象,它包含了与客户端相关的数据和属性,例如:
res.url 是客户端请求的 URL 地址
res.method 是客户端的 method 请求类型

server.on('request',(req,res) => {
	const str = 'Your request url is ${req.url},and request method is ${req.method}'
	res.end(str) //向客户端发送指定的内容,并结束这次请求的处理过程
})

3.3 解决中文乱码问题

server.on('request',(req,res) => {
	const str = '您请求的url地址是${req.url},请求的method类型是${req.method}'
	res.setHeader('Content-Type','text/html;charset=utf-8')
	res.end(str) 

4.启动服务器

server.listen(8080,function(){//8080为端口
	console.log('server running at http://127.0.0.1:8080')
})

案例-实现calculator的web服务器

// 1.导入所需要的模块
const http = require('http') // 1.1 导入 http 模块
const fs = require('fs')// 1.2 导入 fs 模块
const path = require('path')// 1.3 导入 path 模块

// 2.创建基本的 web 服务器
const server = http.createServer() // 2.1 创建 web 服务器
server.on('request',(req,res) => { // 2.2 监听 web 服务器的 request 事件
    res.setHeader('Content-Type','text/html;charset=utf-8')// 解决中文乱码问题

    // 3.将资源的请求 url 地址映射为文件的存放路径
    const url = req.url // 3.1 获取到客户端请求的 url 地址
    //const fpath= path.join(__dirname,url)// 3.2 把请求的 url 地址,映射为本地文件的存放路径

    // 5.优化资源的请求路径
    let fpath = '' // 5.1 预定义一个空白的文件存放路径 
    if(url === '/'){
        fpath = path.join(__dirname,'./clock/calculator.html')
    }
    else{
        fpath = path.join(__dirname,'./clock',url)
    }
    // 4.读取文件的内容并响应给客户端
    fs.readFile(fpath,'utf8',(err,dataStr) => {// 4.1 根据“映射”过来的文件路径读取文件
        if(err) return res.end('404 Not Found.')// 4.2 读取文件失败后,向客户端响应固定的“错误信息”
        res.end(dataStr)// 4.3 读取文件成功后,将“读取成功的内容”响应给客户端
    })

}) // 2.2 监听 web 服务器的 request 事件
server.listen(80,() => {
    console.log('server listen at http://127.0.0.1')
}) // 2.3 启动 web 服务器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值