前端需要去了解的nodejs知识(fs文件处理)

简介: 文件系统时nodejs中至关重要的一个模块,它使得JavaScript具备了操作文件的能力。对于所有文件或目录的操作fs都提供了同步和异步两种操作方式。另外nodejs也提供了文件流的处理。想要熟练掌握nodejs中文件的处理需要先了解以下几个概念:字符,字符集,字符编码,文件流,buffer。

文件系统时nodejs中至关重要的一个模块,它使得JavaScript具备了操作文件的能力。对于所有文件或目录的操作fs都提供了同步和异步两种操作方式。另外nodejs也提供了文件流的处理。想要熟练掌握nodejs中文件的处理需要先了解以下几个概念:字符,字符集,字符编码,文件流,buffer。

  • 字符:字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。
  • 字符集和字符编码:字符集就是各种字符的集合,而字符编码就是为字符集中每个字符规定个二进制数的一套规则,如我们常用的ASCALL,Unicode,UTF-8等。简单的来说字符集就是一套集合,字符编码就是一种集合对应的规则。
  • ASCALL编码:
  • Unicode:
  • UTF-8
  • 文件流:从字面意思可以看出,文件流其实就是把文件当作水流一样进行处理。为何需要文件流呢,这个就要说到计算机等I/O处理了,大文件的打开和处理对于计算机I/O的消耗是很大的,随着互联网的发展几十几百G的文件很常见但是几百G的内存成本却很大,因此对文件的处理就需要流来进行,下载或上传时候把一个大文件分成若干份像水流一样进行传输。
  • Buffer:前端在刚接触buffer的时可能会把他当作字符串处理,这一点是不可取的,buffer和字符串有本质的区别,buffer是二进制数据流。

文件


nodejs中提供文件服务的是fs模块,他能够实现文件、目录的增删改查,以及文件的信息获取。

  • 文件目录的增删改查,fs对于目录的处理基本功能都有实现,新增(mkdir),删除(rmdir),查询(readdir)下面简单介绍下这些API的同步使用。
let fs = require("fs");
const newDir = __dirname + '/fsdir';
if(fs.existsSync(newDir)){
    console.log('dir is exists,delete dir!')
    fs.rmdirSync(newDir);
    const currentFiles = fs.readdirSync(__dirname);
    console.log('query current dir file list:')
    currentFiles && currentFiles.forEach(file=>{
        console.log(file)
    })
    return
}
// 新建目录,新建前需要判断是否存在,如果存在还新建则会报错
fs.mkdirSync(newDir)
  • 文件的增删改查,fs中具有对文件的新增(writeFile),删除(rm),重命名(rename),读取文件(readFile)内容以及复制(copyFile)等常用功能,下面简单介绍下这些API的同步使用。
let fs = require("fs")
const userFile = newDir + '/user.json';
console.log(userFile)
if (fs.existsSync(userFile)) {
    console.log('user.json file is exists!')
    const f = `${newDir}/${Date.now()}.json`
    const fcp = `${newDir}/${Date.now()}cp.json`
    const cpf = fs.copyFileSync(userFile, fcp);
    const rnf = fs.renameSync(userFile, f);
    const fileBuff = fs.readFileSync(f);
} else {
    fs.writeFileSync(userFile, '{"name":"json"}');
}

对于文件的直接操作通常用在日常的脚本处理中,在生产服务器上考虑到性能等原因使用文件流来处理文件是更好的选择。

应用


根据fs的功能我们实现一个简单的文件复制的脚本

  • 功能描述:脚本接受两个参数src目录或文件,des目录或文件,将dest代表的目录或文件完整的复制到dest目录或文件中
  • 实现分析:首先需要判断输入的src是否存在,如果存在则判断是文件还是目录,如果是目录则执行目录的逻辑,如果是文件则执行文件的复制逻辑。
  • 大概代码如下,详细请看
const fs = require('fs');
const argvs = process.argv;
const src = __dirname + '/' + argvs[2];
const dest = __dirname + '/' + argvs[3];
if (!fs.existsSync(src)) {
    console.log('file is not exists!')
    return
}
const stat = fs.lstatSync(src);
const handlerRemoveDir = (dir) => {
    let files = fs.readdirSync(dir)
    ****
}
if (stat.isDirectory()) {
    if (fs.existsSync(dest)) {
        console.log("目标目录已存在,请重新输入!")
        handlerRemoveDir(dest)
        return
    }
    fs.mkdirSync(dest);
    const files = fs.readdirSync(src);
    console.log(files)
    ****
    console.log('目录复制成功!')
}
if (stat.isFile()) {
    if (fs.existsSync(dest)) {
        console.log("目标文件已存在,请重新输入!")
        return
    }
    fs.copyFileSync(src, dest);
    console.log('文件复制成功!')
}

总结


nodejs对于前端来说难点不是他各个的模块的API,这些API和前端使用的JavaScript语法高度类似,基本看下文档就能使用。真正的难点是这些API背后的一些知识原理,就如本章描述的fs模块,他背后蕴含了计算机对于文件的许多知识内容。


相关文章
|
1月前
|
JavaScript 前端开发 API
Node.js在前端的妙用:打造更出色的Web体验
Node.js在前端的妙用:打造更出色的Web体验
197 5
|
1月前
|
前端开发
前端毕业设计|基于Vue+Nodejs实现游戏资讯平台(二)
前端毕业设计|基于Vue+Nodejs实现游戏资讯平台
|
28天前
|
JavaScript 前端开发
node.js中的fs模块,读写语法讲解
node.js中的fs模块,读写语法讲解
|
10天前
|
JavaScript 安全 前端开发
【Node.js】从入门到精通(一)—— fs 模块全解析
【Node.js】从入门到精通(一)—— fs 模块全解析
16 0
|
1月前
|
JavaScript 前端开发 NoSQL
构建基于Node.js的全栈应用:从前端到后端的完整指南
【5月更文挑战第24天】本文是关于使用Node.js构建全栈应用的指南,涵盖前端(React或Vue)、后端(Node.js + Express)和数据库(MongoDB)的选型与实现。文章介绍了项目结构、前端组件化开发、后端API接口编写、前后端联调及部署上线的注意事项,帮助读者掌握全栈开发流程。
|
21天前
|
Web App开发 资源调度 JavaScript
【保姆级】前端使用node.js基础教程
【6月更文挑战第3天】Node.js 是基于 Chrome V8 引擎的 JavaScript 运行环境,用于服务器端编程。常用命令包括:安装 Node.js,通过 `node -v` 查看版本;使用 npm(Node 包管理器)进行初始化、安装/卸载包、查看版本和更新;运行 `.js` 脚本;使用 `node inspect` 调试;借助 nodemon 实现自动重启;通过 `npm list` 管理包;
10 0
|
1月前
|
JavaScript API
Node.js API实例讲解——FS 文件夹操作
Node.js API实例讲解——FS 文件夹操作
38 0
|
1月前
|
JavaScript
Node fs 创建多层文件夹
Node fs 创建多层文件夹
14 0
|
1月前
|
JSON JavaScript 前端开发
Node.js:前端开发的后端利器
Node.js作为一种运行在服务器端的JavaScript环境,为前端开发者打开了后端开发的大门。它以其高效的事件驱动、非阻塞I/O模型以及强大的npm生态,使得前端开发者能够轻松构建服务器端应用,实现前后端的全栈开发。本文将探讨Node.js的核心优势、应用场景以及在前端开发中的重要性。
|
1月前
|
JavaScript 前端开发 算法
【Node.js 版本过高】运行前端时,遇到错误 `Error: error:0308010C:digital envelope routines::unsupported`
【Node.js 版本过高】运行前端时,遇到错误 `Error: error:0308010C:digital envelope routines::unsupported`
187 0