手记

【九月打卡】第6天 Node.js开发博客——日志概要、stream介绍、安全的基本概念

课程信息

课程名称: Node.js+Express+Koa2+开发Web Server博客
课程章节: 第6章 博客项目之登录
课程讲师: 双越

课堂笔记

1、日志概要

1.日志简介

系统没有日志,就等于人没有眼睛:抓瞎。日志通常放在文件中。
QPS:每秒访问量峰值。

2.日志分类

(1)访问日志 access log,server端最重要的日志
(2)自定义日志,包括自定义事件、错误记录等

3.日志存放在文件中的原因

1:对性能要求不高
2:体积较大
3:不同设备查看成本低(不需要部署环境就可查看)

4.nodejs文件操作

const fs = require("fs")
const path = require("path")

// 获取文件路径
const fileName = path.resolve(__dirname, "data.txt")
console.log(fileName)

// 读取文件内容
fs.readFile(fileName, (err, data) => {
  if (err) {
    console.error(err)
    return
  }
  // data是二进制类型,需要转换为字符串
  console.log(data.toString())
})

// 写入文件
const content = "这是新写入的内容\n"
const opt = {
  flag: "a" // 追加写入,覆盖用"w"
}
fs.writeFile(fileName, content, opt, (err) => {
  if (err) {
    console.error(err)
  }
})

// 判断文件是否存在
fs.exists(fileName, (exist) => {
  console.log("exist",exist)
})

2、stream介绍

1、IO简介(IO操作的性能瓶颈)

IO,包括网络IO和文件IO。I:IN,O:OUT。

相比于CPU计算和内存读写,IO的突出特点:慢。

2.如何在有限的硬件资源下提高IO的操作效率

可以用stream(流水)。写入和写出就类似于source和dest的倒入和倒出过程。
在网上看视频,像爱奇艺,视频资源是一点一点慢慢给你,而不是一开始就让你加载完,这种成本会非常低,他能节省很多资源。
如:网络

3.基本案例

(1)标准输入输出

// pipe是管道的意思,输入什么内容就显示什么内容,由输入流向输出。

// process.stdin:来源;process.stdout:目的地

process.stdin.pipe(process.stdout)

(2)网络IO

// request写的内容,会在response中显示
const http = require('http')
const server = http.createServer((req, res) => {
if (req.method === 'POST') {
req.pipe(res)
}
})
server.listen(8000)

(3)文件IO

// 复制文件
const fs = require('fs')
const path = require('path')
// 两个文件名
const fileName1 = path.resolve(__dirname, 'data.txt')
const fileName2 = path.resolve(__dirname, 'data-bak.txt')
// 读取文件的stream对象
const readStream = fs.createReadStream(fileName1)
// 写入文件的stream对象
const writeStream = fs.createWriteStream(fileName2)
// 执行拷贝,通过pipe一点一点写入
readStream.pipe(writeStream)
// 数据读取完成,即拷贝完成
readStream.on('data', chunk => {
console.log(chunk.toString())
})
readStream.on('end', () => {
console.log('copy done')
})

(4)将文件IO和网络IO进行结合

const http = require('http')
const fs = require('fs')
const path = require('path')
const fileName1 = path.resolve(__dirname, 'data.txt')
const server = http.createServer((req, res) => {
if (req.method === 'GET') {
const readStream = fs.createReadStream(fileName1)
readStream.pipe(res) // 将res作为stream的dest
}
})
server.listen(8000)
0人推荐
随时随地看视频
慕课网APP