# fs 模块

# readFile

  • 使用 fs.readFile 方法,可以读取指定文件中的内容,语法格式如下
fs.readFile(path[, options], callback)
  • 参数一:必选参数,字符串,表示文件的路径

  • 参数二:可选参数,表示以什么编码格式来读取文件

  • 参数三:必选参数,文件读取完成后,通过回调函数拿到读取的结果

  • 示例代码:

  • 以 utf8 的编码格式,读取指定文件的内容,并打印 err 和 data 的值

// 1. 导入 fs 模块
const fs = require('fs')
// 2. 调用 fs.readFile () 方法读取文件
// 参数一 读取文件存放路径
// 参数二 读取文件时采用的编码格式 一般默认指定 utf8
// 参数三 回调函数 拿到读取失败和成功的结果
fs.readFile('./files/data.yml', 'utf8', function (err, data) {
  if(err) return console.log('读取文件失败', err.message);
  console.log('读取文件成功', data); 
})

# writeFile

  • 使用 fs.writeFile 方法,可以向指定的文件中写入内容,语法格式如下:
fs.writeFile(file, data[, options], callback)
  • 参数一:必选参数,指定文件路径的字符串,表示文件存放的路径

  • 参数二:必选参数,表示要写入的内容

  • 参数三:可选参数,表示以什么格式写入文件内容,默认值是 utf8

  • 参数四:必选参数, 文件写入完成后的回调函数

  • 示例代码:

const fs = require('fs')
// 2. 调用 fs.writeFile () 方法读取文件
// 参数一 表示文件的存放路径
// 参数二 表示要写入的内容
// 参数三 回调函数
fs.writeFile('file', data, 'utf8', (err) => {
  // 文件写入成功 err 为 null
  // 文件写入失败 err 为一个错误对象
  console.log(err)
})

# __dirname

  • 在使用 fs 模块操作文件时,如果提供的操作路径是以 ./ 或 ../ 开头的相对路径时,很容易出现路径动态拼接错误的问题
  • 原因:代码在运行的时候,会以执行 node 命令时所处的目录,动态拼接被操作文件的完整路径
  • 解决方案:在使用 fs 模块操作文件时,直接提供完整的路径,不要提供 ./ 或../ 开头的相对路径,从而防止路径动态拼接的问题
const fs = require('fs')
//__dirname 表示当前文件所处的目录
fs.writeFile(__dirname + './txt', data, 'utf8', (err) => {
  console.log(err)
})

# path 模块

  • path 模块是 node.js 官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理需求
  • path.join () 方法,用来将多个路径片段拼接成一个完整的路径字符串
  • path.basename () 方法,用来从路径字符串中,将文件名解析出来

# join

const path = require('path')
// 注意 ../ 回抵消前面的路径
fs.readFile(path.join(__dirname, './txt'), 'utf8', (err, data) => {
   if(err) return console.log(err.message)
   console.log(data)
})

# basename

  • 使用 path.basename () 方法,可以获取路径中最后一部分,经常通过这个方法获取路径中的文件名
path.basename(path[, ext])
  • path <string> 必选参数,表示一个路径的字符串
  • ext <string> 可选参数,表示文件扩展名
  • 返回 <string> 表示路径中的最后一部分
const path = require('path')
const fpath = '/a/b/c/index.html'
// 获取当前路径的文件名
const fullName = path.basename(fpath)
console.log(fullName) // index.html
// 移除扩展名
const nameWithoutExt = path.basename(fpath, '.html')
console.log(nameWithoutExt); // index

# extname

  • 使用 path.extname () 方法,可以获取路径中的扩展名部分
const path = require('path')
const fpath = 'index.html' // 路径字符串
const fext = path.extname(fpath)
console.log(fext) // html

# http 模块

# req 请求对象

  • 服务器接收到了客服端的请求,就会调用通过 server.on() 为服务器绑定的 request事件处理函数

  • 如果想在事件处理函数中访问与客户端相关数据与属性,可以使用如下方式

server.on('request', (req, res) => {
  //req.url 是客户端请求的 URL 地址
  const url = req.url
  
  //req.method 是客户端请求的 method 类型
  const method = req.method
  
  const str = `Your request url is ${url}, and request method is ${method}`
 
  console.log(str)
})

# res 响应对象

  • 在服务器的 request 事件处理函数中,如果想访问与服务器相关的数据与属性,可以使用如下方式
server.on('request', (req, res) => {
  //req.url 是客户端请求的 URL 地址
  const url = req.url
  
  //req.method 是客户端请求的 method 类型
  const method = req.method
  
  const str = `您请求的 URL 地址是 ${url}, 请求的 method 类型为 ${method}`
  
  // 调用 res.end () 方法,向客户端发送指定内容,并结束这次请求的处理过程
  res.end(str)
})

# setHeader

  • 解决中文乱码问题,需要设置响应头 Content-Type 的值为 text/html; charset=utd-8
res.setHeader('Content-Type', 'text/html; charset=utf-8')

# 案例

  • 根据不同 url 响应不同的 html 内容
const http = require('http')
const server = http.createServer()
server.on('request', (req, res) => {
  // 1. 获取请求的 url 地址
  const url = req.url
  // 2. 设置默认的响应内容为 404 Not founc
  let content = '404 Not found!'
  // 3. 判断用户请求的是否为 / 或 /index.html 首页
  // 4. 判断用户请求的是否为 /about.html 关于页面
  if (url === '/' || url === '/index.html') {
    content = '<h2>首页</h2>'
  } else if (url === '/about.html') {
    content = '<h2>关于</h2>'
  }
  // 5. 设置 Content-Type 响应头,防止中文乱码
  res.setHeader('Content-type', 'text/html; charset=utf-8')
  // 6. 使用 res.end () 把内容响应给客户端
  res.end(content)
})
server.listen(8001, () => {
  console.log('server running at http://127.0.0.1');
})

# os 模块

Update on Views times

Give me a cup of [coffee]~( ̄▽ ̄)~*

Nico Niconi WeChat Pay

WeChat Pay

Nico Niconi Alipay

Alipay