使用nodejs 批量给文章添加二维码图片
发布网友
发布时间:2022-10-07 08:03
我来回答
共1个回答
热心网友
时间:2023-10-26 10:59
大家好,我是前端西瓜哥。
因为最近公众号没有涨粉,所以打算给我的个人博客网站(blog.fstars.wang)上的所有文章底部添加公众号的二维码。
为此我打算用 nodejs 写个批量处理文件的简单脚本。
我的具体需求是这样的。
文章都是用 markdown 文件写的,这是一种纯文本的文件格式,并且都位于 posts 文件夹下。
现在我们需要将 所有 markdown 文件的末尾都加上我的公众号二维码图片 ,即加上下面这种格式的内容。
其中有个模板文件,不需要添加图片,所以我们要设置一个 黑名单 。
此外 有些文章已经加了该图片,我们也需要将这些文章排除在外 ,防止文章出现两张相同图片。同时也能防止不小心多次执行脚本,导致不可逆的修改。
我们先看完整的代码。
我们先设置好要用到的几个变量,然后将它们全都放到文件开头。
放到开头是为了让我们在需要时快速修改,符合相关代码高内聚原则。如果这些变量流散在代码逻辑中,当我们要改配置时,就要找上半天。
这里我引入了 nodejs 内置的 fs 库。fs 指的是文件系统(File System),fs 库就是专门用来处理文件的这么一个库。
fs/promise 则是fs 的 promise 版,将原来 fs 方法的回调参数移除,然后返回一个 promise。
我们就用这个 promise 版的 fs,因为它能写出同步形式的代码,可读性会更好。
fs.readdir() 方法能够读取目录内容,返回一个字符串数组,里面是所有的文件名。
接下来我们就去遍历这个数组。这里有个 初学者容易犯的错误,就是会去使用 forEach 方法。
因为 forEach 是 for 循环的一层封装,会执行传入的回调函数。但 forEach 的这个函数并不是 async 函数,所以是无法等待 await 方法执行完的。
async 函数其实是挺新的特性,forEach 则是存在了很长时间,当时 forEach 并没有考虑 async 这种东西,为了兼容,以后也不会。
所以你需要使用原生的 for 循环方法。for 和 for...of 都可以。
然后我们检查一下文件名是否在黑名单中,如果在,跳过此轮循环,直接进入下一轮。
然后我们要将文件名、和它所在的目录名组合,生成一个绝对路径。
直接使用文件名是不行的,因为 脚本会以被执行时所在的工作目录进行路径计算的,文件名是个相对于指定目录的相对路径,相对工作目录不一定是正确的。
接着是使用 fs.readFile 读取文件内容,记住要将 encoding 设置为 'utf8',否则你会拿到一个二进制的内容。
如果文件中已经有图片了,就跳过。
否则在文件末尾通过 fs.appendFile 方法添加图片内容。
脚本写好了,我们准备执行了。
首先为了可以吃后悔药,我强烈建议你想将文件通过版本控制软件(如 git),先存一个档。当脚本配合得不是很好时,我们可以轻松愉快地回滚到修改前的版本。当然拷贝一份作为备份也行。
总之,备份很重要。
改改配置,然后执行。
成功!
大家可以去我的 blog.fstars.blog 看看,现在所有文章下都有这二维码图片了。
nodejsfs模块(nodejsfs模块)
在Node.js中,可以使用require函数来引入模块。Node.js中的require函数是用来加载模块的函数,它会按照搜索规则,搜索模块的文件路径,并返回模块的导出对象。 要引入nodeglobal文件夹下的模块,首先需要使用fs模块来读取nodeglobal文件夹下的文件列表,以查找模块所在的路径。 然后,可以使用require函数来引入模块,例如: constm...
微信小程序之生成图片分享
首先,在wxml代码中添加绘图区域组件,然后编写JS代码进行绘图操作。步骤包括绘制背景图、文字和小程序码图片。通过wx.getImageInfo下载背景图,并使用ctx.drawImage将其绘制到画布上。接着,在画布上添加居中显示的文字,并根据需要拆分长文本。最后,绘制小程序码图片,类似于绘制背景图。生成分享图后,可以...
利用微信小程序扫码授权
0表示已扫码未授权,1表示已经授权confirmnickName、openid,头像等-小程序的允许授权时确认的接口踩坑点scene长度为最大32字符,利用nodejs的uuid.v4生成的值超过32位解决方案
即时在线聊天源码?
8.群功能:设置群二维码、群公告、群共享文件、顶置聊天、消息免打扰,屏蔽群信息、禁言、举报、群管理、查找聊天记录、禁止全员相互加好友、清空聊天记录等。9.好友聊天:文字、语音、音视频通话、收藏、照片、小视频、各种表情、传送文件、发送位置、引用回复、撤回、复制、删除、收藏、撤回、录制、多乎...
怎样在vue中使用ts(详细教程)
本文介绍了如何在vue中使用ts的示例代码,分享给大家,具体如下:注意:此文并不是把vue改为全部替换为ts,而是可以在原来的项目中植入ts文件,目前只是实践阶段,向ts转化过程中的过渡。ts有什么用?类型检查、直接编译到原生js、引入新的语法糖为什么用ts?TypeScript的设计目的应该是解决JavaScript的“...
web前端开发都包括哪些技术
称之为“css样式”,CSS要熟练掌握float、position、width、height,以及对于的最大最小、会使用百分百、overflow、margin、padding,标题字体、颜色变化,或为标题加入背景图片、边框等等,这些都是跟布局有关系的样式,必须要掌握的。3、JS(java)—— 行为 java是用来实现网页上的特效效果。如:鼠标滑过...
web前端开发需要用到哪些知识
其中nodejs最常用到的就是npm包管理器,不用到各个网站去下载资源包。 数据库 的学习可以选择MongoDB或者MySQL,前者与Nodejs的契合度更好,不过现在大多数网站都是 PHP +Mysql的组合,如果有学PHP的打算的话,可以先学习 Mysql 。 5. ECMAScript 6 JavaScript 的语言标准。ES6中加入了很多新的概念,也弥补了之前版本...
通联好老板添加云打印机
3、自动接单打印外卖平台订单小票设置教程:①找到商家服务②登陆商家账号完成授权③开启自动接单开关④开启订单提醒开关。4、可以提供给开发者对接,API接口支持PHP、Java、Python、NodeJS等语言如:餐饮、酒店、商城、超市、物流等,可整体或局部自定义小票文字大小,支持店铺、服务器定制。