• 有问题请联系QQ:2374146085
  • 有问题请联系QQ:2374146085

Node-http、fs文件系统

1年前 (2022-01-27) 969次浏览 已收录 0个评论 扫描二维码

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

 


渣渣龙, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Node-http、fs文件系统
喜欢 (2)

您必须 登录 才能发表评论!