位置: IT常识 - 正文

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

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

推荐整理分享【Node.js实战】一文带你开发博客项目之日志(文件读写、stream流、写日志)(node.js in action),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:node.js入门教程,node.js入门教程,node.js 10实战,node.js in action,node-js,node js教程,node-js,node-js,内容如对您有帮助,希望把文章链接给更多的朋友!

个人简介

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

Node.js系列文章目录内容参考链接Node.js(一)初识 Node.jsNode.js(二)Node.js——开发博客项目之接口Node.js(三)Node.js——一文带你开发博客项目(使用假数据处理)Node.js(四)Node.js——开发博客项目之MySQL基础Node.js(五)Node.js——开发博客项目之API对接MySQLNode.js(六)Node.js——开发博客项目之登录(前置知识)Node.js(七)Node.js——开发博客项目之登录(对接完毕)Node.js(八)Node.js——开发开发博客项目之联调文章目录Node.js系列文章目录一、前言二、文件的读写1、读取文件2、写入文件3、判断文件是否存在三、stream 流1、IO 操作的性能瓶颈2、stream 流3、复制文件4、发起请求读取文件四、写日志五、写在最后一、前言

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

系统没有日志,就等于人没有眼睛(重要性可见一斑)第一,访问日志 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

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

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)})

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

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

2、stream 流

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

test1.js

// 标准输入输出process.stdin.pipe(process.stdout)【Node.js实战】一文带你开发博客项目之日志(文件读写、stream流、写日志)(node.js in action)

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

test1.js

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

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

3、复制文件

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

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')})

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) }})// 监听的端口 8000server.listen(8000)

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

四、写日志

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

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

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 文件中日志的写入

五、写在最后

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

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

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

本文链接地址:https://www.jiuchutong.com/zhishi/295333.html 转载请保留说明!

上一篇:Electron-vue 系列之自动更新与手动更新(electron-vue官网)

下一篇:HTML中关于边框(border)的使用(html关于边框的代码)

  • 网站推广方法系列之网站内容(网站推广的几种方法)

    网站推广方法系列之网站内容(网站推广的几种方法)

  • 移动app互联网行业的新产品推广的五种方法(移动互联网应用程序是什么)

    移动app互联网行业的新产品推广的五种方法(移动互联网应用程序是什么)

  • 电脑管家怎么测网速(电脑管家怎么测温度)

    电脑管家怎么测网速(电脑管家怎么测温度)

  • 信息被对方拒收是什么意思(信息被对方拒收是什么原因)

    信息被对方拒收是什么意思(信息被对方拒收是什么原因)

  • 微信图片翻译功能怎么找出来(微信图片翻译功能怎么取消)

    微信图片翻译功能怎么找出来(微信图片翻译功能怎么取消)

  • iPhonexs新加坡版是三网通吗(苹果xsm新加坡版本)

    iPhonexs新加坡版是三网通吗(苹果xsm新加坡版本)

  • 腾讯会议静音后还显示正在使用麦克风(腾讯会议静音后打电话别人可以听到吗)

    腾讯会议静音后还显示正在使用麦克风(腾讯会议静音后打电话别人可以听到吗)

  • 下载列表如何保存至网盘?(怎么把下载列表放到文件)

    下载列表如何保存至网盘?(怎么把下载列表放到文件)

  • ios12.4屏蔽更新描述文件失效(ios12.4.8屏蔽更新)

    ios12.4屏蔽更新描述文件失效(ios12.4.8屏蔽更新)

  • trtal00a什么型号(trtal00a参数)

    trtal00a什么型号(trtal00a参数)

  • qq群解散群失败怎么回事(qq群解散群一直失败怎么办)

    qq群解散群失败怎么回事(qq群解散群一直失败怎么办)

  • 联通手机卡欠费多久自动销号(联通手机卡欠费停机会影响征信吗)

    联通手机卡欠费多久自动销号(联通手机卡欠费停机会影响征信吗)

  • 三星怎么开启无线充电(三星怎么开启无线充电功能)

    三星怎么开启无线充电(三星怎么开启无线充电功能)

  • 怎么在抖音直播间点赞(怎么在抖音直播电视剧)

    怎么在抖音直播间点赞(怎么在抖音直播电视剧)

  • oppoa11x带nfc功能吗(oppoa11x有nfc吗)

    oppoa11x带nfc功能吗(oppoa11x有nfc吗)

  • b站怎么才能评论(b站怎么发展开的评论)

    b站怎么才能评论(b站怎么发展开的评论)

  • 如何删除评价记录(删除评价教程)

    如何删除评价记录(删除评价教程)

  • 手机银行锁定怎么办(手机银行锁死了)

    手机银行锁定怎么办(手机银行锁死了)

  • 苹果11老是重启(苹果11老是重启修不了什么办呢)

    苹果11老是重启(苹果11老是重启修不了什么办呢)

  • qq音乐怎么取消桌面壁纸(qq音乐怎么取消音乐人身份)

    qq音乐怎么取消桌面壁纸(qq音乐怎么取消音乐人身份)

  • 在电脑上登微信,手机上有显示吗(在电脑上登微信能看到手机上的记录吗)

    在电脑上登微信,手机上有显示吗(在电脑上登微信能看到手机上的记录吗)

  • 抖音现在都可以直播了吗(抖音现在可以发多长的视频)

    抖音现在都可以直播了吗(抖音现在可以发多长的视频)

  • 抖音声控怎么拍(抖音上的声控录音是怎么弄的)

    抖音声控怎么拍(抖音上的声控录音是怎么弄的)

  • 苹果8p有呼吸灯吗(苹果8p有呼吸灯功能吗)

    苹果8p有呼吸灯吗(苹果8p有呼吸灯功能吗)

  • 58同城如何出租房屋(在五八同城如何发布出租信息)

    58同城如何出租房屋(在五八同城如何发布出租信息)

  • 桌面鼠标右键菜单如何清理?(桌面鼠标右键菜单设置)

    桌面鼠标右键菜单如何清理?(桌面鼠标右键菜单设置)

  • 圣托里尼岛鸟瞰图,希腊 (© Amazing Aerial Agency/Offset)(圣托里尼岛游玩攻略)

    圣托里尼岛鸟瞰图,希腊 (© Amazing Aerial Agency/Offset)(圣托里尼岛游玩攻略)

  • 优胜美地国家公园中的春季瀑布 (© elvistudio/Shutterstock)(优胜美地国家公园简介)

    优胜美地国家公园中的春季瀑布 (© elvistudio/Shutterstock)(优胜美地国家公园简介)

  • 安全生产费用怎么入账
  • 短期借款利息计提分录
  • 申报无票收入次月红冲有没有风险
  • 电费为什么计入成本费用
  • 法人拿走公司利润要交税吗
  • 劳务报酬需要补税吗
  • 增值税专用发票抵扣期限
  • 退还押金怎么做账
  • 房地产开发企业会计科目
  • 无法确定购买日期
  • 收回多借差旅费
  • 建筑企业如何预缴税款
  • 抵扣发票未申报
  • 以前漏记的成本怎么处理
  • 广告业与服务业哪个好
  • 企业没有收入怎么办
  • 新企业会计准则什么时候实施的
  • 增值税专票电话号码错了有关系吗
  • 企业所得税如何计提会计分录
  • 其他应付款质保金到期怎么附单据
  • 网上申请的增值税专用纸质发票收到后如何确认已收到
  • 备案类减免税又做费用了
  • 金融企业的代理贷款什么意思
  • 退休人员工资所得税纳税调整
  • 可以做投标保证金的有银行汇票银行保函
  • 费用报销审批单填写样本图片
  • 新注册的公司用不用开公户
  • 小规模纳税人一个月能开多少税票
  • 中小企业费用管理
  • 收到货款未发货可以开发票吗
  • 网页显示不全怎么回事
  • 停薪留职单位欠缴社保怎么处理
  • 促销费影响主营利润吗
  • 三栏式明细账目录填写范本
  • 无形资产可以占多少比例
  • 如果工资少发怎么办
  • php缩放图片
  • 代收的税金如何记账
  • PHP:parse_ini_string()的用法_Filesystem函数
  • mongodb4.0安装教程
  • 同业拆入属于哪个行业
  • 销售费用期末余额
  • flash中文版
  • 结转成本 凭证
  • 所得税预缴申报表怎么填
  • 一般纳税人普票可以抵扣吗
  • 小规模纳税人可以开增值税专用发票吗
  • 织梦专题页模板
  • 附加税申报核心内容
  • 汇款退回多久到账
  • 开票只开大类
  • 律师事务所收到专票能抵扣吗合法吗
  • 取得虚开普票如何处置
  • 跨年发票分录
  • 计提工会经费如何划入工会专户
  • 处置子公司利润表怎么合并
  • 老板从公司借款怎么处理
  • 工资社保医保计算
  • 股权稀释违法吗
  • 货款和发票金额不一致
  • 商品和服务税收分类编码是什么
  • 产权转移书据纳税义务时间
  • 会计调账是什么意思
  • 固定资产公司
  • sql server Bulk Insert命令详细
  • 如何避免在游戏中切输入法
  • win7如何彻底删除软件
  • linux修改用户名
  • 电脑windows7无法验证此文件
  • win10麦克风无法说话
  • perl获取文件名
  • jquery滑动效果
  • 通过Tabs方法基于easyUI+bootstrap制作工作站
  • jquery选择器的基本语法
  • js实现功能
  • 使用jquery实现的项目
  • 出口企业的增值税怎么算
  • 房产税税源编号
  • 小规模纳税人开专票需要交税吗
  • 成品油进货
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设