http
创建最基本的web服务器
- 导入http模块
- 创建web服务器实例
- 为服务器实例绑定request事件,监听客户端的请求
- 启动服务器
const http = require('http') const serve = http.createServer() //使用服务器实例的on()方法,为服务器绑定一个request事件 serve.on('request',(req,res)=>{ //只要有客户端来请求服务器,就会触发request事件,从而调用这个事件的处理函数 console.log('有请求了') }) // 启动web服务器 serve.listen(80,()=>{ console.log('服务器启动成功') })
req请求对象
- 访问与客户端相关的数据和属性
- req.url 是客户端请求的url地址
- req.method 是客户端的method请求类型
const http = require('http') const url = require('url') //专门解析URL const qs = require('querystring') /专门解析query const serve = http.createServer() serve.on('request',(req,res)=>{ console.log(req.url) console.log(req.method) console.log(req.headers) }) // 启动web服务器 serve.listen(80,()=>{ console.log('服务器启动成功') }) /** * / * GET * /dd * GET */
res响应对象
- 访问与服务器相关的数据或属性
res.end
- 向客户端发送指定的内容,并结束这次请求的处理过程
const http = require('http') const serve = http.createServer() serve.on('request',(req,res)=>{ //防止中文乱码 res.setHeader('Content-Type','text/html; charset=utf-8') res.end('我响应的内容') }) // 启动web服务器 serve.listen(80,()=>{ console.log('服务器启动成功') })
根据不同url响应不同内容
const http = require('http') const path = require('path') const fs = require('fs') const serve = http.createServer() serve.on('request',(req,res)=>{ //获取客户端请求的URL地址 const url = req.url=== '/' ? 'index.html' : req.url //把请求的url地址,映射为本地文件的 存放路径 const fpath = path.join(__dirname,url) //根据映射过来 的文件路径读取文件的内容 fs.readFile(fpath,'utf-8',(err,dataStr)=>{ if(err){ return res.end('404') } res.end(dataStr) }) }) // 启动web服务器 serve.listen(80,()=>{ console.log('服务器启动成功') })
fs文件系统模块
readFile()
- 用来读取指定文件中的内容
const fs = require('fs') fs.readFile(path,[options],callback)
- 参数1:【必】字符串,表示文件的路径
- 参数2:【可选参数】表示以什么编码格式来读取文件
- 参数3:【必】文件读取完成之后,通过回调函数拿到读取的结果
const fs = require('fs') //传统方式读取 fs.readFile('../text.txt','utf-8',(err,dataStr)=>{ if(err){ return console.log('文件读取失败',err.message) } console.log(dataStr) }) /** * null * 王学龙 */ //流的方式读取 const reader = fs.createReadStream("../text.txt",{ start:3, end:6, highWaterMark:2 }) //监听数据读取过程 reader.on("data",(data)=>{ console.log(data) })
writeFile()
- 用来向指定的文件中写入内容
const fs = require('fs') fs.writeFile(file,data,[option],callback)
- 参数1:【必】表示文件的存放路径
- 参数2:【必】表示要写入的内容
- 参数3:【可选参数】表示以什么格式写入文件内容
- 参数4:【必】文件写入完成后的回调函数
const fs = require('fs') //传统方式 fs.writeFile('../test2.txt','渣渣龙','utf-8',(mes)=>{ if(mes){ return console.log('文件写入失败',mes.message) } console.log('文件写入成功') }) /** * 如果文件写入成功,则mes为null * 否则,mes为错误对象 */ //流方式写入,最后需要关闭流 const writer = fs.createWriteStream("../text.txt",{ flags:"a", start:4 }) writer.write("您好",err=>{ if(!err){ console.log('写入成功') } }) //关闭流 // writer.close() writer.end("也可以在这里传入最后内容") //告诉服务器写入完毕,可以理解把所有写的内容返回给服务器该文件
文件复制(通过流的方式)
const reader = fs.createReadStream("../test.txt") const writer = fs.createWriteStream("./b.txt") reader.pipe(writer)
___dirname
表示当前文件所处的目录
const fs = require('fs') fs.readFile(__dirname+'/text.txt','utf-8',(err,dataStr)=>{ if(err){ return console.log('文件读取失败',err.message) } console.log(dataStr) })
path路径模块
join 和 resolve 路径拼接
- path.join()方法,用来将多个路径片段拼接成一个完整的路径字符串
- 它和path.resolve的区别在于”/a/b/e” 和 “a/b/e” 的处理上 ,一般resolve用的居多
const path = require('path') const pathStr1 = path.join('/a','/b/c','../','e') console.log(pathStr1) const pathStr2 = path.join(__dirname,'./1.txt') console.log(pathStr2) /** * /a/b/e * /Users/new/lean/view/serve/fs文件系统模块/1.txt */
basename获取路径中文件名
- path.basename()方法,用来从路径字符串中,将文件名解析出来
const path = require('path') const fpath='./text.txt' var fullName = path.basename(fpath) console.log(fullName) var fullName = path.basename(fpath,'.txt') console.log(fullName) /** * text.txt * text */
extname 获取路径中的文件扩展名
const path = require('path') const fpath='./text.txt' var Name = path.extname(fpath) console.log(Name) /** * .txt */
加载模块
//加载内置/第三方模块 const fs = require('fs') //加载用户自定义模块 const sum = require('./sum.js')
使用require方法加载模块时,会执行被加载模块中的代码
向外共享模块作用域中的成员
exports对象
将模块内的成员变量共享出去,供外界使用
01.js向外暴露成员
const a=10 exports.a=a //module.export.a=a exports.say=function(){ console.log('我说话了') }
02.js导入01.js模块
const {a,say} = require('./01.js') console.log(a) say() /** * 10 * 我说话了 */
CommonJS模块化规范
- 每个模块内部,module变量代表当前模块
- module变量是一个对象,他的exports属性(即module.export)是对外 的接口
- 加载某个模块,起始加载该模块的module.exports属性。
events模块
类似vue里的事件总线
const EventBus = require("events") const eventBus = new EventBus() eventBus.on('e_name',(arg)=>{}) //监听 emit off once