nodejs读写文本

fs模块

fs 模块提供了一个 API,用于以模仿标准 POSIX 函数的方式与文件系统进行交互。

使用该模块:

const fs = require('fs');

读写文本

详细方法请参阅官方文档http://nodejs.cn/api/fs.html;

读取文本需要用到readFile方法, 该方法为fs.readFile(path[, options], callback)callback中可以接受两个参数errdatareadFile方法为异步操作, 同样的也存在同步操作readFileSync

使用该方法:

fs.readFile('./mock/person.json', (err, data) => {
    if(err) throw err;
    console.log(data); // 这里将会获得文本内容, 以String形式获取
  })

写入文本需要用到writeFile方法, 该方法为fs.writeFile(file, data[, options], callback)file为文件名或文件地址等, data则是写入的数据,options确定编码等, callback则接收一个参数err

使用该方法:

fs.writeFile('./mock/person.json', data, err => {
    if(err) throw err;
    console.log('write over');
  })

可以通过readFilewriteFile方法对本地.json等文件进行读取和写入, 具体请查阅下方示例代码

let fs = require('fs');
let create = require('./create');
// writeJson(newRole);
// deleteJson(1);
// editJson(1, {
//   name: 'Adventurer1'
// })

writeJson(create.createRole());

// pagination(0, 2)
// 分页功能
function pagination(page, size) {
  fs.readFile('./mock/person.json', (err, data) => {
    if(err) throw err;
    let person = JSON.parse(data.toString());
    let pagePerson = person.data.slice(size * page, (page + 1) * size);
    console.log('pagination over');
    console.log(pagePerson);
  })
}
// 修改某一项(根据id, 若是存储数据格式不同则需要不同查询方式)
function editJson(id, params) {
  fs.readFile('./mock/person.json', (err, data)=> {
    if(err) throw err;;
    let person = JSON.parse(data.toString());
    for(let i = 0; i< person.data.length; i++) {
      if(id === person.data[i].id) {
        for(let key in params) {
          if(person.data[i][key]) {
            person.data[i][key] = params[key];
          }
        }
      }
    }
    person.total = person.data.length;
    let str = JSON.stringify(person);
    fs.writeFile('./mock/person.json', str, err => {
      if(err) throw err;
      console.log('edit over')
    })
  })
}
// 写入数据, 这里是将数据填入到data数组里, 同样, 不同存储格式需要稍微修改
function writeJson(params) {
  fs.readFile('./mock/person.json', (err, data) => {
    if(err) throw err;

    let person = JSON.parse(data.toString());
    person.data = person.data || [];
    console.log(person.data);
    person.data.push(params);
    person.total = person.data.length;
    console.log(person);
    let str = JSON.stringify(person);
    console.log(str)
    fs.writeFile('./mock/person.json', str, function(err) {
      if(err) {
        console.error(err);
      }
      console.log('add over');
    })
  })
}
// 删除某项, 基于id
function deleteJson(id) {
  fs.readFile('./mock/person.json', (err, data) => {
    if(err) throw err;
    let person = JSON.parse(data.toString());
    for(let i = 0; i<person.data.length; i++) {
      if(id === person.data[i].id) {
        person.data.splice(i, 1);
      }
    }
    console.log(person.data);
    person.total = person.data.length;
    let str = JSON.stringify(person);
    console.log(str);
    fs.writeFile('./mock/person.json', str, err => {
      if(err) return console.error(err);
      console.log('delete id: ' + id + ' over');
    })
  })
}

下方是简易克苏鲁调查员属性生成,根据克苏鲁的召唤守秘人手册第七版设定

// create.js


function createRole() {
  let str = complexD(3, 6) * 5; // 力量
  let con = complexD(3, 6) * 5; // 体质
  let siz = (complexD(2, 6) + 6) * 5; // 体型
  let dex = complexD(3, 6) * 5; // 敏捷
  let app = complexD(3, 6) * 5; // 外貌
  let int = (complexD(2, 6) + 6) * 5; // 智力
  let pow = complexD(3, 6) * 5 // 意志
  let edu = (complexD(2, 6) + 6) * 5 // 教育

  return {
    str, con, siz, dex, app, int, pow, edu
  }

}

function complexD(n, d) {
  let b = dice(d);
  for(let i = 0; i< n - 1; i++) {
    b = b + dice(d);
  }
  return b;
}

function dice(d) {
  return Math.floor(Math.random() * d) + 1;
}

module.exports = {
  createRole
}
// save.js

let fs = require('fs');
let create = require('./create');

save(create.createRole());
// 写入数据
function save(params) {
  let str = JSON.stringify(params);
  fs.writeFile('./save.json', str, function (err) {
    if (err) throw err;
    console.log('add over');
  })
}

node save.js即可获得save.json, 如:
{"str":55,"con":60,"siz":60,"dex":40,"app":40,"int":55,"pow":55,"edu":70}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容