Node.js基础2 fs方法和path方法的使用

Node.js基础2 fs方法和path方法的使用,第1张

fs方法

fs模块是和node.js一起下载安装的一个全局模块。

调用fs.readFile()方法来读取文件内容:

第一步: 创建一个js文件导入fs模块,来 *** 作文件。

第二步: 调用fs.readFile()方法读取文件

                  fs.readFile(path[,options],callback)

注释:
( 1.中括号里可选参数,表示以什么编码格式读取文件
2.path表示文件路径
3.callback表示回调函数拿到结果)

//参数一 读取文件的路径。
//参数二: 读取文件时候采用的编码格式,默认”utf8“。
//参数三: 回调函数返回成功还是失败的结果err和dtaStr。
代码示例:

//导入fs模块,来 *** 作文件
const fs = require('fs')

//调用fs.readFile()方法读取文件
//参数一:读取文件的路径
//参数二:读取文件时候采用的编码格式,默认”utf8“
//参数三:回调函数返回成功还是失败的结果err和dtaStr
fs.readFile('../node01/test.txt','utf8',function(err,dtaStr){
//读取信息失败
    if(err){
        return console.log('读取信息失败>>>',err);
    }
    //读取信息成功
    console.log('读取信息成功>>>',dtaStr)
})
})
//当前文件夹下有一个test.txt,里面有内容hello worle

//结果null
//    hello worle

在自己创建的文件夹内空白处按住SHIFT键右键按下PowerShell窗口选项来执行js代码。

调用fs.writeFile()方法,写入文件的内容:

第一步: 创建一个js文件导入fs模块,来 *** 作文件。

第二步: 调用fs.writeFile()方法,写入文件的内容

            fs.writeFile(file,data[,options],callback)

注释:
1.file文件路径,data内容,options编码格式,callback返回结果。
2.fs.writeFile()不能重写路径,但可以重写文件,意思是在当前文件夹下如果没有该文件,就自己写文件,如果有就向文件写入内容。
3.fs.writeFile()被多次写入内容不会报错,新的内容会覆盖旧的内容。

//参数一 文件的存放路径。
//参数二: 写入想要的文件内容。
//参数三: 回调函数。
代码示例:

//引入fs文件系统模块
const fs=require('fs')

//调用fs.writeFile()方法,写入文件的内容
  //参数一:文件的存放路径
  //参数二:写入想要的文件内容
  //参数三:回调函数
  
fs.writeFile('../node01/02test.txt','学学习',function(err){
  if(err){
    return console.log('创建失败>>>'+err.message);
  }
    console.log('写入成功>>>')
})
//写入成功02test.txt的内容为学学习

注释:
写入成功后,被写入文件的会有写入的内容,否则返回的是错误对象。

结合fs.readFile和fs.writeFile方法举例:

成绩.txt中的内容为 猪油仔=89 燕子=90 地沟油=80 下水道=99

//导入模块
const fs = require('fs')
//调用fs.readFile()读取文件内容
fs.readFile('../练习/素材/成绩.txt', 'utf8', function (err, dataStr) {
    if (err) {
        console.log('读取失败>>>' + err.message);
    }
    // console.log('读取成功>>>'+dataStr);
    //先分割数组
    const arrOld = dataStr.split(' ')
    //循环数组,然后对每一项的等号进行替换
    const arrNew = []
    arrOld.forEach(item => {
        arrNew.push(item.replace('=', ':'))
    })
    //把数组的每一项进行合并,组成一个字符串
    const nowStr = arrNew.join('\r\n')
    //用fs.writeFile()方法,把处理完毕的成绩,写到新文件中
    fs.writeFile('../练习/素材/成绩-01.txt', nowStr, function (err) {
        if (err) {
            console.log('创建失败>>>' + err.message);
        }
        console.log('创建成功>>>');
    })
})
//结果为
//猪油仔:89
//燕子:90
//地沟油:80
//下水道:99
path路径模块

第一步: 先引入内部模块const path=require(‘path’).

第二步: 将多个路径片段拼接成一个完整的路径path.join()

const pathStr=path.join(‘/a’,‘/b’,‘…/’,‘/c’)
//结果\a\c
注: …/会抵消到上一个相邻位置
const pathStr=path.join(__dirname,‘./test.txt’)
//当前目录下的test.txt文件

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

代码示例:

const route='/a/b/c/test.js'
let textName=path.basename(route)
console.log(textName)
//结果test.js
let name=path.basename(route,'.js')
console.log(name)
//结果test

获取文件扩展名
代码示例:

const route='/a/b/c/test.js'
let extName=path.extname(route)
console.log(extName)
//结果.js
结合fs.readFile和fs.writeFile方法加上patn.join拼接路径来举例:

示例:提取一个html文件,将css样式、js脚本和HTML标签分离出来,并将其改为外联式后重新存储

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



//利用正则表达式,分别匹配
const regStyle = /', '')
    //使用fs.writeFile()方法,将提取出来的css样式写入modular文件夹下的index.css中
    fs.writeFile(path.join(__dirname, './modular/index.css'), newCss, function (err) {
        if (err) {
            return console.log('写入css样式失败' + err.message);
        }
        console.log('写入css样式成功');
    })
}

//定义一个处理js脚本的方法
function resolveJs(htmlStr) {
    //使用正则提取需要的内容
    const r2 = regScript.exec(htmlStr)
    //将提取出来的样式字符串,进行字符串的replace操作
    const newJs = r2[0].replace('', '')
    //使用fs.writeFile()方法,将提取出来的js脚本写入modular文件夹下的index.js中
    fs.writeFile(path.join(__dirname, './modular/index.js'), newJs, (err) => {
        if (err) {
            return console.log('写入javaScript脚本失败' + err.message);
        }
        console.log('写入avaScript脚本成功');
    })

}
//定义一个处理html的方法
function resolveHtml(htmlStr) {
    //使用字符串的replace方法将内嵌的style和script替换为link外联式
    const newHtml = htmlStr.replace(regStyle, '').
        replace(regScript, '')
    //使用fs.writeFile()方法,将提取出来的html脚本写入modular文件夹下的index.html中
    fs.writeFile(path.join(__dirname, './modular/index.html'), newHtml, (err) => {
        if (err) {
            return console.log('写入htmlm成功' + err.message);
        }
        console.log('写入html成功');
    })
}
http网络模块

网络基础知识

1.ip地址

互联网中每一台WEB服务器都要自己的唯一ip地址。(通过ip地址访问服务器,用于测试的ip地址127.0.0.1)

2.域名和域名服务器

由于ip地址太长并且没有语义化,就出现了域名这种替代ip的访问方式类似于baidu.com,域名服务器就是将域名和ip两者进行互换。

3.端口号

一台服务器上有成千上百个服务,每个端口号对应一个服务。
注:
80端口号在js编辑时可以省略。

创建一个WEB服务器

(1).首先调用http内置内置模块require(‘http’)

(2).创建WEB服务http.createServer()

(3).监听服务server.listen()

代码示例:

//导入http模块
const http=require('http')
//创建基本的web服务器
const server=http.createServer()
//为服务器实例绑定request事件,监听客户端的请求
server.on('request',(req,res)=>{
    console.log('服务器响应成功>>>')
})
//启动服务器
server.listen(8080,()=>{
    console.log('server running at http://127.0.0.1:8080')
})

WEB服务器的两个对象
1.req请求对象包含与客户端相关的数据和属性.
(req.url客户端请求的地址)
(req.method客户端请求的方法类型)

2.res响应对象,向客户端传输内容.
(res.end像客户端响应内容)
代码示例:

const http = require('http')
const server = http.createServer()
//req是请求对象,包含了与客户端相关的数据和属性
server.on('request', (req,res) => {
    //req.url是客户端请求的URL地址
    const url = req.url
    //req.method是客户端请求的method类型
    const method = req.method
    const str = `yous request url is ${url}.your request method is ${method}`
    //使用res.end()方法,像客户端响应内容。
    res.end(str)
    console.log(str);
})
//启动服务器
server.listen(80, () => {
    console.log('server request gt http://127.0.0.1');
})

解决中文乱码问题
调用res.setHeader()方法,设置Content-Type 响应头,解决中文乱码的问题。

res.setHeader(‘Content-Type’,‘text/html;charset=utf-8’)
代码示例:

const http=require('http')
const server =http.createServer()


server.on('request',(req,res)=>{
    //定义一个字符串,包含中文的内容
    const str=`您请求的 url 地址是 ${req.url}.请求的 method 类型是 ${req.method}`
    //调用res.setHeader()方法,设置Content-Type 响应头,解决中文乱码的问题
    res.setHeader('Content-Type','text/html;charset=utf-8')
    //将内容返回给客户端
    res.end(str)
})
//启动服务端
server.listen(80,()=>{
    console.log('server request gt http://127.0.0.1');
})

根据不同的url地址响应不同的html内容

获取请求的url地址设置默认响应内容为404 Not found判断用户的请求防止乱码使用res.end()将内容给客户端
代码示例:
const http=require('http')
const server=http.createServer()

server.on('request',(req,res)=>{
//1.获取请求的地址url
const url=req.url
//2.设置默认响应的内容404 Not found
let content='404 Not found'
//3.判断用户请求是否为/或者/iindexx.htmml 主页
//4.判断用户请求是否为/about.html 关于页面
if(url==='/'||url==='/index.html'){
    content='首页'
}else if(url==='/about.html'){
    content='关于页面'
}
 //调用res.setHeader()方法,设置Content-Type 响应头,解决中文乱码的问题
 res.setHeader('Content-Type','text/html;charset=utf-8')
 //将内容返回给客户端
 res.end(content)
})

//启动服务端
server.listen(80,()=>{
    console.log('server request gt http://127.0.0.1');
})

结合fs、path模块和WEB服务器来实现当客户端输入不同访问地址显示不同的页面
代码示例:

//导入fs模块
const fs = require('fs')
//导入path模块
const path = require('path')
//导入http模块
const http = require('http')
//创建web服务器

const server = http.createServer()

//监听wed的request事件
server.on('request', (req, red) => {
    //获取到客户端请求的 URL 地址
    // /modular/index.css
    // /modular/index.js
    // /modular/index.html

    const url = req.url
    //把请求的 ULR 地址映射为具体文件的存放路径
    //优化路径 *** 作
    //定义一个空的fpath 
    let fpath=''
    if(url==='/'){
        fpath=path.join(__dirname,'/modular/index.html')
    }else{
        fpath=path.join(__dirname,'/modular',url)
    }
    // const fpath = path.join(__dirname, url)

    //根据“映射”过来的文件路径,读取文件的内容
    fs.readFile(fpath,'utf8',(err,dataStr)=>{
     //读取失败返回固定的错误消息
     if(err){
         return red.end('404 Not found')
     }
     //读取文件成功返回读取的文件信息
     red.end(dataStr)
    })
})

//启动服务端事件
server.listen(80, () => {
    console.log('server request gt http://127.0.0.1');
})

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/945117.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-18
下一篇 2022-05-18

发表评论

登录后才能评论

评论列表(0条)

保存