fs.readFile() 读取指定文件中的内容
fs.writeFile() 向指定文件写入内容
使用这个模块需要提前导入 const fs = require(‘fs’)
fs.readFile( path , [options], callback)
options 表示用什么样的格式读取文件
const fs = require('fs')//引入模块 fs.readFile('./1.js', 'utf-8', function (err,dataStr) { console.log(err);//null console.log("-------"); console.log(dataStr);//文件中的内容 })
image-20210730153129226
//如果读取成功,则err的值为null
//如果读取失败,则err的值为错误对象,dataStr 的值为undefined
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iElkm0OV-1627809501799)(C:\Users\墨宝\AppData\Roaming\Typora\typora-user-images\image-20210730153307021.png)]
const fs = require('fs') fs.readFile('./11.txt', 'utf-8', function (err,dataStr) { // console.log(err); // console.log("-------"); // console.log(dataStr); if(err){ return console.log('读取文失败!'+err); } console.log('读取文件成功!'); })
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UfxWKrgE-1627809501800)(C:\Users\墨宝\AppData\Roaming\Typora\typora-user-images\image-20210730153814734.png)]
fs.writeFile( file, data, [options], callback)
data是必选参数,表示要写入文件的内容
const fs = require('fs') fs.writeFile('./1.txt','456', 'utf-8', function (err) { console.log(err); if(err){ return console.log('写入文失败!'+err); } console.log('写入文件成功!'); }) //如果文件写入成功,err就是null //如果文件写入失败,err就是一个真正的错误对象
注意:这里的文件写入他是覆盖原内容写入。。。
如果你想一个未创建的文件写入内容时,是先创建文件,再写入
const fs = require('fs') fs.readFile(__dirname+'./1.txt', 'utf-8', function (err, dataStr) { if(err){ return console.log(err); } // console.log('文件读取成功!'+dataStr); const arr = dataStr.split(' ') const arr1 = [] arr.forEach(item=>{ arr1.push(item.replace('=',': ')) }) const str = arr1.join('\r\n') fs.writeFile('./2.txt',str, 'utf-8',function (err) { if(err){ return console.log(err); } console.log('文件写入成功!'); }) })
__dirname 表示当前文件的目录
path.join() 将多个路径片段拼接成一个完整的路径字符串
path.basename() 从路径字符串中将文件名解析出来
先导入这个模块 const path = require(‘path’)
path.join([…path])
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) // 输出当前文件所处目录\files\1.txt
以后所有的路径拼接都不要用+了
path.basename(path, [ext]) ext指的是文件拓展名
const fpath = '/a/b/c/index.html' //文件的存放路径 var fullName = path.basename(fpath) console.log(fullName) //输出index.html var nameWi thoutExt = path. basename(fpath,'.html' ) console.log(nameWithoutExt) //输出index
const fpath = '/a/b/c/index.html' var extname = path.extname(fpath) console.log(extname) //.html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rrFxHyNB-1627809501802)(C:\Users\墨宝\AppData\Roaming\Typora\typora-user-images\image-20210730190328939.png)]
http模块是Node.js官方提供的、用来创建web服务器的模块。通过http模块提供的http.createServer0方法,就
能方便的把一台普通的电脑,变成一台Web服务器,从而对外提供Web资源服务。
先导入const http = require(‘http’),在使用http.createServer()
服务器和普通电脑的区别是web服务器软件,就像IIS或者apache
①导入http模块. const http = require(‘http’)
②创建web服务器实例 const server = http.createServer()
③为服务器实例绑定request事件,监听客户端的请求 server.on(‘request’, (req,res) =>{
console.log(‘有人访问了!’)
})//只要有人访问我们的服务器,就会触发这个事件,调用回调函数
④启动服务器 server.listen(80, ()=>{
console.log(‘开始了’)
})
const http = require('http') const server = http.createServer() server.on('request', (req,res) =>{ console.log('有人访问我的服务器'); res.end('there are some data for customer') }) server.listen(8080, () =>{ console.log('开始运行服务器了'); }) //req是请求对象,包含了与客户端相关的数据和属性 // req.rul是客户端请求的URL地址 // req.method是客户端请求的method方法 // res是响应对象,包含的服务器向客户端响应的数据,并结束这次响应,调用res.end()方法响应内容
当返回数据时,中文会出现乱码,解决方法如下:
需要设置一个响应头,content-type的值时text/html; charset=utf-8
res.setHeader('Content-Type', 'text/html; charset=utf-8')
const http = require('http')const server = http.createServer()server.on('request', (req,res) =>{ console.log('有人访问我的服务器'); res.setHeader('Content-Type', 'text/html; charset=utf-8') res.end('there are some data for customer,这次好了') })server.listen(8080, () =>{ console.log('开始运行服务器了');})
根据不同URL响应不同的HTML内容
server.on('request', function(req, res){ const url = req.url// 1.获取请求的url 地址 let content = '<h1>404 Not found!</h1>' // 2.设置默认的内容为404 Not found if (url === '/'|| url === '/index.html'){ content = '<h1>首页</h1>'// 3.用户请求的是首页 }else if (url === '/about.html'){ content = '<h1>关于页面</h1>'// 4.用户请求的是关于页面 } res.setHeader( 'Content-Type','text/html; charset=utf-8') // 5.设置Content-Type 响应头,防止中文乱码 res.end(content)// 6.把内容发送给客户端})
就是遵守固定的规则,把一个大文件拆成独立并互相依赖的多个小模块。
模块化规范就是对代码进行模块化的拆分与组合时,需要遵守的那些规则。
例如:
●使用什么样的语法格式来引用模块
●在模块中使用什么样的语法格式向外暴露成员
内置模块 fs,path,http
自定义模块 我们创建的每一个js文件
第三方模块 第三方的,需要下载使用
// 1.加载内置的fs模块const fs = require( 'fs' )// 2.加载用户的自定义模块 文件的相对路径const custom = require('./custom.js')// 3.加载第三方模块(关于第三方模块的下载和使用,会在后面的课程中进行专]的讲解)const moment = require('moment')
使用require加载自定义的模块时可以省略文件拓展名
类似函数的作用域,好处是防止了全局变量污染问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Iky9i0z-1627809501804)(C:\Users\墨宝\AppData\Roaming\Typora\typora-user-images\image-20210731181731591.png)]
module.exports对象可以将模块成员共享出去,require()获得的对象就是这个exports的对象
// console.log(module);const age = 20module.exports = { name: 'zs', say: function () { console.log('hello'); }}module.exports.age = age//向对象上挂载一个属性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a5Vkqelw-1627809501805)(C:\Users\墨宝\AppData\Roaming\Typora\typora-user-images\image-20210731182534757.png)]
使用require0方法导入模块时,导入的结果,永远以module.exports指向的对象为准。就是最后指向的对象,如下图所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kQEyimYW-1627809501806)(C:\Users\墨宝\AppData\Roaming\Typora\typora-user-images\image-20210731182754169.png)]
和module。exports一样的作用,只是这样写更见的方便,像下图中一样,就是我添加了不同的属性和方法,导致了两者的不同
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6RNqpKoB-1627809501806)(C:\Users\墨宝\AppData\Roaming\Typora\typora-user-images\image-20210731183542257.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PyURfCIt-1627809501807)(C:\Users\墨宝\AppData\Roaming\Typora\typora-user-images\image-20210731184359190.png)]
什么是包,通俗的说就是第三方模块 电脑=计算机
可以在 https://www.npmjs.com/下载相应的包,但是需要耐心用这个搜包,用https://registry.npmjs.org/下载包
安装包的命令 npm install 包名 或者 npm i 包名
node_ modules 文件夹用来存放所有已安装到项目中的包。require() 导入第三方包时,就是从这个目录中查找并加载包。
package-lock.json配置文件用来记录node_ modules 录下的每一个包的下载信息, 例如包的名字、版本号、下载地址等。
若安装指定版本的包 在包名后加上@ 版本号(点分十进制)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0aSjCdon-1627809501807)(C:\Users\墨宝\AppData\Roaming\Typora\typora-user-images\image-20210801111541373.png)]
如何在项目中记录安装了那些包——创建一个package.json文件 --npm init -y(快速创建这个文件且只用一次)
上述命令智能在英文目录下创建,不能有中文和空格
一次性下载所有的包—— npm i 先读取节点中的饱和版本,再一次性下载
卸载包—— npm uninstall 包名
如果某些包只在项目开发阶段会用到,在项目上线之后不会用到,则建议把这些包记录到devDependencies节点中。要使用 npm i -D(具体可以在项目文档中找)
与之对应的,如果某些包在开发和项目上线之J后都需要用到,则建议把这些包记录到dependencies节点中。
解决下包速度慢——淘宝NPM镜像服务器——npm config get registry(检查下包源),
npm config set registry=https://registry.npm.taobao.org/ 切换下包的地址
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eNbctX3f-1627809501808)(C:\Users\墨宝\AppData\Roaming\Typora\typora-user-images\image-20210801114613431.png)]