node 读写文件

最近在完成一个从文件提取数据的繁杂任务时,发现node真的非常万能,竟然可以读/写文件,为此简单记录下其中遇到的一些使用心得。

读取文件

基本原理就是通过引入fs的模块,实现对文件的读取。node 已经内置了fs 模块,可以通过官网一窥究竟:

The fs module provides a lot of very useful functionality to access and interact with the file system.
There is no need to install it. Being part of the Node.js core, it can be used by simply requiring it:

const fs = require(‘fs’)

意思:fs模块提供了大量有用的函数来访问和与文件系统交互。我们没有必要来安装(fs),作为node.js的核心,通过简单的 require即可使用。

const fs = require('fs')

通过官网例子,我写了下面一个返回promise对象的读文件函数。

var fs = require("fs");

function getContent(name){
    return new Promise((resolve, reject) => {
        fs.readFile(`./components/${name}.txt`, function (err, data) {
            const dataStr = data.toString();
            resolve(dataStr);
            if (err) reject(err);
        });
    });
}

可见:

  • node 是支持模块化的,其通过require来引入模块,module.exports 来输出模块。参照CommonJs模块化规范。

写入文件

也是通过引入fs的模块,

	const fs = require("fs");
	const str = JSON.stringify(data);
    fs.writeFile('data.json', str, function(err){
        if (err) {res.status(500).send('Server is error...')}
    })

注意:

  • 如何增量写入文件,而非上面的覆盖写入,可借助下面方法
fs.appendFile('data.json', str, function (err) {
    if (err) {
         reject(err);
     }
 });
  • 如果为了让写入的 json 文件格式规整,可以这样写:
//...
let str = JSON.stringify({ data }, null, "\t")
//...

阻塞io/非阻塞io

参照博文中所讲,主要是fs.readFileSyncfs.readFile两者的区别,其中:

  • readFileSync 是同步的,也就是阻塞io,后边的程序会等待 readFileSync 执行完再执行
  • readFile 是非同步的,那么通常我们会添加一个回调,方便读取 io 的结果
//阻塞i/o
var fs = require("fs");

var data = fs.readFileSync('input.txt');

console.log(data.toString());
console.log("程序执行结束!");


//非阻塞i/o 通常添加回调,方便读取结果
var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
    if (err) return console.error(err);
    console.log(data.toString());
});

console.log("程序执行结束!");

作者:高静最近在长脑子
链接:https://www.jianshu.com/p/da41b051bcfe
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

总结

原来 node 内置了http/fs等一些模块来方便我们进行开发,而 node 的模块化规范非常方便让我们去封装使用这些模块。


最终完成了一个基于node的爬虫demo:链接


参考:

  • node官网模块化规范:http://nodejs.cn/learn/expose-functionality-from-a-nodejs-file-using-exports
  • CommonJs
  • node官网fs模块:http://nodejs.cn/learn/the-nodejs-fs-module

你可能感兴趣的:(基础知识,nodejs,nodejs,javascript)