nodejs讀寫文本

fs模塊

fs 模塊提供了一個 API,用于以模仿標準 POSIX 函數(shù)的方式與文件系統(tǒng)進行交互。

使用該模塊:

const fs = require('fs');

讀寫文本

詳細方法請參閱官方文檔http://nodejs.cn/api/fs.html;

讀取文本需要用到readFile方法, 該方法為fs.readFile(path[, options], callback), callback中可以接受兩個參數(shù)errdata, readFile方法為異步操作, 同樣的也存在同步操作readFileSync

使用該方法:

fs.readFile('./mock/person.json', (err, data) => {
    if(err) throw err;
    console.log(data); // 這里將會獲得文本內(nèi)容, 以String形式獲取
  })

寫入文本需要用到writeFile方法, 該方法為fs.writeFile(file, data[, options], callback), file為文件名或文件地址等, data則是寫入的數(shù)據(jù),options確定編碼等, callback則接收一個參數(shù)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);
  })
}
// 修改某一項(根據(jù)id, 若是存儲數(shù)據(jù)格式不同則需要不同查詢方式)
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')
    })
  })
}
// 寫入數(shù)據(jù), 這里是將數(shù)據(jù)填入到data數(shù)組里, 同樣, 不同存儲格式需要稍微修改
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');
    })
  })
}

下方是簡易克蘇魯調(diào)查員屬性生成,根據(jù)克蘇魯?shù)恼賳臼孛厝耸謨缘谄甙嬖O定

// create.js


function createRole() {
  let str = complexD(3, 6) * 5; // 力量
  let con = complexD(3, 6) * 5; // 體質(zhì)
  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());
// 寫入數(shù)據(jù)
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}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 個人入門學習用筆記、不過多作為參考依據(jù)。如有錯誤歡迎斧正 目錄 簡書好像不支持錨點、復制搜索(反正也是寫給我自己看...
    kirito_song閱讀 2,655評論 1 37
  • 每個人出行的目的是不同的,比如有些是度假,有些是旅游。有得節(jié)奏快,有得節(jié)奏慢。這次出行本來是慢節(jié)奏的預定,但因為預...
    暮曉玲瓏閱讀 167評論 2 0
  • 含義 單線程模型指的是,JavaScript只在一個線程上運行。也就是說,JavaScript同時只能執(zhí)行一個任務...
    許先生__閱讀 1,304評論 0 1
  • 第五課 畫面貌似有點花 哈哈 “我”上面的小娃娃是我十多年來無論去哪里旅行走都會帶在身邊的很有故事的小玩意,出鏡率...
    bugbugbug65閱讀 215評論 2 0
  • 【女生百科!】(為自己未來的老婆保存吧,怕以后找不到了) 1. 1紅霉素軟膏,治臉上開放性或者封閉性的痘痘比較管用...
    xlgarrilco閱讀 475評論 0 0

友情鏈接更多精彩內(nèi)容