【Node.js实战】一文带你开发博客项目之日志(文件读写、stream流、写日志)

这篇具有很好参考价值的文章主要介绍了【Node.js实战】一文带你开发博客项目之日志(文件读写、stream流、写日志)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,也会涉及到服务端
📃个人状态: 在校大学生一枚,已拿多个前端 offer(秋招)
🚀未来打算: 为中国的工业软件事业效力n年
🥇推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2&Vue3项目实战 🥝Node.js🍒Three.js
🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧

Node.js系列文章目录

内容 参考链接
Node.js(一) 初识 Node.js
Node.js(二) Node.js——开发博客项目之接口
Node.js(三) Node.js——一文带你开发博客项目(使用假数据处理)
Node.js(四) Node.js——开发博客项目之MySQL基础
Node.js(五) Node.js——开发博客项目之API对接MySQL
Node.js(六) Node.js——开发博客项目之登录(前置知识)
Node.js(七) Node.js——开发博客项目之登录(对接完毕)
Node.js(八) Node.js——开发开发博客项目之联调


一、前言

开发日志对整个项目可以起到备忘、记录、总结等作用。以帮助开发或者运维人员快速定位错误位置,提出解决方案。

  • 系统没有日志,就等于人没有眼睛(重要性可见一斑)
  • 第一,访问日志 access log(server 端最重要的日志)
  • 第二,自定义日志(包括自定义事件、错误记录等)

所以,日志的存在还是非常非常有必要的!

日志要放在文件中,可读可写~

  • node.js 文件操作,node.js stream(流 => 提升性能)
  • 日志功能开发和使用
  • 日志文件拆分,日志内容分析

二、文件的读写

1、读取文件

接下来,我们先学习如何进行文件的读取…

创建 file-test 文件夹,文件夹下创建 test1.txt 文件 和 data.txt 文件

test1.txt

进行文件读取操作,读取 data.txt 文本的内容,并进行输出

const fs = require('fs')
const path = require('path')

// 获取文件目录 __dirname 表示当前文件所在目录
const fileName = path.resolve(__dirname, 'data.txt')

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

data.txt

这是我们在文本中存储的一些信息

Hello
这里是前端杂货铺
感谢你的观看
Thanks

nodejs发表博客数据怎么写,node.js+express+koa2博客项目,node.js,前端,javascript


2、写入文件

接下来,我们进行文件的写入操作(分为两种:追加写入和覆盖写入)

test1.js

const fs = require('fs')
const path = require('path')

// 获取文件目录 __dirname 表示当前文件所在目录
const fileName = path.resolve(__dirname, 'data.txt')

// 写入文件
const content = '哇咔咔,这是新写入的内容\n'
// 写入的方式(追加'a'/覆盖'w')
const opt = {
    flag: 'a' // 追加写入用'a',覆盖用 'w'
}
// 写入文件(文件名,内容,方式,错误的回调)
fs.writeFile(fileName, content, opt, err => {
    if (err) {
        console.error(err)
    }
})

终端运行 node test1.js

nodejs发表博客数据怎么写,node.js+express+koa2博客项目,node.js,前端,javascript


3、判断文件是否存在

接下来,我们来进行判断文件是否存在的操作

test1.js

const fs = require('fs')
const path = require('path')

// 获取文件目录 __dirname 表示当前文件所在目录
const fileName = path.resolve(__dirname, 'data.txt')

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

nodejs发表博客数据怎么写,node.js+express+koa2博客项目,node.js,前端,javascript


三、stream 流

1、IO 操作的性能瓶颈

  • IO 包括 “网络IO” 和 “文件IO”
  • 相比于 CPU 计算和内存读写,IO 的突出特点就是慢!
  • 我们需要在有限的硬件资源下提高 IO 的操作效率!!

那么我们就要使用 stream 流(不是一下子全给,而是通过“小管子”一点点给…)

nodejs发表博客数据怎么写,node.js+express+koa2博客项目,node.js,前端,javascript


2、stream 流

在 stream-test 文件夹下创建 test1.js 文件

test1.js

// 标准输入输出
process.stdin.pipe(process.stdout)

nodejs发表博客数据怎么写,node.js+express+koa2博客项目,node.js,前端,javascript

下面我们监听端口,通过 postman 进行简单测试

test1.js

const http = require('http')
const server = http.createServer((req, res) => {
    if (req.method === 'POST') {
        // 管道连接请求和响应
        req.pipe(res)
    }
})
// 监听的端口 8000
server.listen(8000)

终端 node test1.js 启动它,之后去 postman 进行测试

nodejs发表博客数据怎么写,node.js+express+koa2博客项目,node.js,前端,javascript


3、复制文件

我们先创建 stream-test 文件,之后创建文本(原文本和复制的目标文本,之后在 test1.js 中添加一些代码),此时 data.txt 文本有内容,data-bak.txt 文本为空。

nodejs发表博客数据怎么写,node.js+express+koa2博客项目,node.js,前端,javascript

data.txt

这里是前端杂货铺
当前目标如下:
把 data.txt 文本里的内容拷贝到 data-bak.txt 中

test1.js

// 复制文件
const fs = require('fs')
const path = require('path')

const fileName1 = path.resolve(__dirname, 'data.txt')
const fileName2 = path.resolve(__dirname, 'data-bak.txt')

// 读取流
const readStream = fs.createReadStream(fileName1)
// 写入流
const writeStream = fs.createWriteStream(fileName2)

// 管道连接
readStream.pipe(writeStream)

// 监听每一次读取的内容
readStream.on('data', chunk => {
    console.log(chunk.toString())
})

// 监听拷贝完成
readStream.on('end', () => {
    console.log('copy done')
})

nodejs发表博客数据怎么写,node.js+express+koa2博客项目,node.js,前端,javascript
nodejs发表博客数据怎么写,node.js+express+koa2博客项目,node.js,前端,javascript


4、发起请求读取文件

发送一个 GET 请求,读取文本的内容

test.js

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)
        // 将 res 作为 stream 的 dest
        readStream.pipe(res)
    }
})
// 监听的端口 8000
server.listen(8000)

终端 node test1.js 运行,之后打开 8000 端口

nodejs发表博客数据怎么写,node.js+express+koa2博客项目,node.js,前端,javascript


四、写日志

我们首先改变一下我们的目录结构(新增如下文件)

logs 里面的文件用来存放写入的日志(创建空文件就好),utils 里面的 log.js 文件用来编写一些写入日志的逻辑

nodejs发表博客数据怎么写,node.js+express+koa2博客项目,node.js,前端,javascript

log.js

首先我们引入所需模块,封装写入流函数,访问我们所需的日志,进行换行写入

// 引入 fs 和 path 模块
const fs = require('fs')
const path = require('path')

// 写日志
function writeLog(writeStream, log) {
    // 关键代码(每写入一行日志换行一次)
    writeStream.write(log + '\n')
}


// 生成 write Stream(第二个水桶)
function createWriteStream(fileName) {
    // 找到文件名
    const fullFileName = path.join(__dirname, '../', '../', 'logs', fileName)
    // 创建写入流(追加的方式)
    const writeStream = fs.createWriteStream(fullFileName, {
        flags: 'a'
    })
    // 返回写入的内容
    return writeStream
}

// 写访问日志
const accessWriteStream = createWriteStream('access.log')
// 参数 log 为 app.js 中传入的内容
function access(log) {
    writeLog(accessWriteStream, log)
}

module.exports = {
    access
}

之后更改 app.js 文件,调用 access 函数

app.js

我们先导入 access 进来,之后进行调用,传进所需的参数,用来记录 access log

const { access } = require('./src/utils/log')
...

const serverHandle = (req, res) => {
    // 记录 access log
    access(`${req.method} -- ${req.url} -- ${req.headers['user-agent']} -- ${Date.now()}`)
    ......
}

之后,我们打开 http://localhost:8000/api/blog/list 端口,进行三次刷新,查看 access.log 文件中日志的写入

nodejs发表博客数据怎么写,node.js+express+koa2博客项目,node.js,前端,javascript


五、写在最后

至此,我们明白了 如何进行文件读写,了解了 stream流 的原理及其基本使用,以及如何写日志。 继续跟进学习吧!

后续会对该项目进行多次重构【多种框架(express,koa)和数据库(mysql,sequelize,mongodb)】

如果你需要该项目的 源码,请通过本篇文章最下面的方式 加入 进来~~


nodejs发表博客数据怎么写,node.js+express+koa2博客项目,node.js,前端,javascript文章来源地址https://www.toymoban.com/news/detail-803904.html


到了这里,关于【Node.js实战】一文带你开发博客项目之日志(文件读写、stream流、写日志)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Node.js实战】一文带你开发博客项目(使用假数据处理)

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端 📃 个人状态: 在校大学生一枚,已拿 offer(秋招) 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2Vue3项目实战 🥝Node.js 🌕 个人推广:每篇文章最下方都有加入方式,旨在

    2024年02月02日
    浏览(53)
  • 【Node.js实战】一文带你开发博客项目之安全(sql注入、xss攻击、md5加密算法)

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端 📃 个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀 未来打算: 为中国的工业软件事业效力n年 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2Vue3项目实战 🥝

    2024年02月03日
    浏览(52)
  • 【Node.js】一文带你开发博客项目之接口(处理请求、搭建开发环境、开发路由)

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端 📃 个人状态: 在校大学生一枚,已拿 offer(秋招) 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2Vue3项目实战 🥝Node.js 内容 参考链接 Node.js(一) 初识 Node.js DNS 解析,建

    2023年04月21日
    浏览(55)
  • Node.js博客项目开发思路笔记

    开发一个博客系统,具备博客基本功能 只开发 server 端,不关心前端 首页、作者页、博客详情页 登陆页 管理中心、新建页、编辑页 数据如何存储 博客 id title content createtime author 1 标题 1 内容 1 1111112 zhangsan 2 标题 2 内容 2 1111111 lisi 用户 id username password realname 1 zhangsan 123 张三

    2024年02月12日
    浏览(43)
  • 实战:Docker化Node.js项目

    Docker是一种轻量级的应用容器技术,可以将应用程序及其所有依赖项打包成一个可移植的容器,以便在任何支持Docker的环境中运行。Node.js是一种基于Chrome的JavaScript运行时,可以用于构建高性能和可扩展的网络应用程序。在现代软件开发中,将Node.js应用程序Docker化是一项重要

    2024年02月21日
    浏览(52)
  • Vue.js+Node.js开发实战就业反馈小程序-培训机构学员

     💖💖更多项目资源,最下方联系 IT实战课堂 ✨✨✨✨✨✨ 博主拥有多年的T技术研发项目架构和教学经验,CSDN/51CTO/腾讯课堂等平台优质作者、高级讲师,培训机构联合创始人!现专注项目定制Java、小程序、前端网页、Python、App、NodeJs、PHP、微服务、NET等远程部署、售后答

    2024年02月20日
    浏览(57)
  • 一文带你了解MySQL之undo日志

    我们在前边学习事务的时候说过事务需要保证 原子性 ,也就是 事务中的操作要么全做,要么全不做 。但是有的时候事务会出现一些情况,比如: 情况一: 事务执行过程中可能遇到各种错误,比如服务器本身的错误,操作系统错误,甚至是突然断电导致的错误 情况二:程序

    2024年02月07日
    浏览(78)
  • 一文带你了解MySQL之redo日志

    前言 本文以及接下来的几篇文章将会频繁的使用到我们前边唠叨的 InnoDB记录行格式 、 页面格式 、 索引原理 、 表空间的组成 等各种基础知识,如果大家对这些东西理解的不透彻,那么阅读下边的文字可能会特别的些费力,为保证您能正常的理解,请确保自己已经掌握了我

    2024年02月08日
    浏览(45)
  • 【node进阶】一文带你快速入门koa框架

    ✅ 作者简介:一名普通本科大三的学生,致力于提高前端开发能力 ✨ 个人主页:前端小白在前进的主页 🔥 系列专栏 : node.js学习专栏 ⭐️ 个人社区 : 个人交流社区 🍀 学习格言: ☀️ 打不倒你的会使你更强!☀️ 💯 刷题网站:这段时间有许多的小伙伴在问有没有什么

    2024年01月22日
    浏览(57)
  • 45天带你玩转Node(第一天)初探Node.js

    45天带你玩转Node 粉丝要求博主系统的写一篇关于Node.js的学习资料,但其实我们的Node.js知识点并不少,所以博主为大家搭建了一个专栏,为了方便大家系统的学习Node.js,大家记得订阅哦!虽然我们的Node.js还很年轻,但是他也已经有了很高的地位,让我们尽情的畅游在Node.js的

    2024年02月12日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包