1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Node.js基础2 fs方法和path方法的使用

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

时间:2018-08-09 18:03:38

相关推荐

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

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和dtaStrfs.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.jslet 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')//利用正则表达式,分别匹配<style></style>和<script></script>const regStyle = /<style>[\s\S]*<\/style>/const regScript = /<script>[\s\S]*<\/script>///调用fs.readFile()方法来读取文件fs.readFile(path.join(__dirname, './modular/01index.html'), 'utf8', (err, dataSrt) => {//读取失败if (err) {return console.log('读取html文件失败' + err.message);}//读取成功就调用三个方法来分割css样式,标签和Script脚本resolveCss(dataSrt)resolveJs(dataSrt)resolveHtml(dataSrt)})//定义一个处理css文件的方法function resolveCss(htmlStr) {//使用正则提取需要的内容const r1 = regStyle.exec(htmlStr)//将提取出来的样式字符串,进行字符串的replace操作const newCss = r1[0].replace('<style>', '').replace('</style>', '')//使用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('<script>', '').replace('</script>', '')//使用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, '<link rel="stylesheet" href="./index.css">').replace(regScript, '<script src="./index.js"></script>')//使用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的访问方式类似于,域名服务器就是将域名和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.methodconst 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.获取请求的地址urlconst url=req.url//2.设置默认响应的内容404 Not foundlet content='<h1>404 Not found</h1>'//3.判断用户请求是否为/或者/iindexx.htmml 主页//4.判断用户请求是否为/about.html 关于页面if(url==='/'||url==='/index.html'){content='<h1>首页</h1>'}else if(url==='/about.html'){content='<h1>关于页面</h1>'}//调用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.htmlconst 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('<h1>404 Not found</h1>')}//读取文件成功返回读取的文件信息red.end(dataStr)})})//启动服务端事件server.listen(80, () => {console.log('server request gt http://127.0.0.1');})

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。