node.js fs生成新文件并写入内容 生成了文件但是没有写入内容

前两天学习的node文件读取和文件写入,今天又学习了readline。然后做了个小练习,类似于用node生成一个json文件,并且内容可以是一边提问一边写入的。参考视频在B站老陈打码node系列课程。
首先把昨天学习的文件读写已经封装好的方法放入到一个allfs.js文件里面。方便我们接下来直接调用。

let fs = require('fs')

function fsRead(path) {
  return new Promise(function (resolve, reject) {
    fs.readFile(path, {
      flag: 'r',
      encoding: 'utf-8'
    }, function (err, data) {
      if (err) {
        //console.log(err)
        //失败执行的内容
        reject(err)
      } else {
        //console.log(data)
        //成功执行的内容
        resolve(data)
      }
      // console.log(456)
    })
  })
}


function fsWrite(path, content) {
  return new Promise(function (resolve, reject) {
    fs.writeFile(path, content, {
      flag: 'a',
      encoding: "utf-8"
    }, function (err) {
      if (err) {
        //  console.log('写入内容出错')
        reject(err)
      } else {
        // console.log("写入内容成功")
        resolve(err)
      }
    })
  })
}

module.exports = {
  fsRead,
  fsWrite
}

别忘了用到了fs的都要再引入fs,最后module.exports=导出。PS:这段代码类似于解构赋值语法,按照一定模式,从数组和对象中提取值,对变量进行赋值。
又 比如.const { SourceMapConsumer, SourceNode } = require("source-map");
接下来的练习只用到了文件写入这个方法。上练习代码

let readline = require("readline"); //导入readline包
let {
  fsWrite
} = require("./allfs"); //导入封装好的方法



//实例化接口对象

let r1 = readline.createInterface({
  output: process.stdout,
  input: process.stdin,
});


//设置r1提问事件
function lcQuestion(title) {
  return new Promise(function (resolve, reject) {
    r1.question(title, function (answer) {
      resolve(answer);
    });
  });
}
//一问一答
async function createPackage() {
  let namea = await lcQuestion("你的工程叫什么?");
  let versona = await lcQuestion("你的版本是多少?");

  let authora = await lcQuestion("作者的名字?");
  let content = `{
    "name": "${namea}",
    "version": "${versona}",
    "author": "${authora}"
    }`;
  await fsWrite("package.json", content);
  r1.close(); //最终写完要关闭
}

createPackage();

r1.on("close", function () {
  process.exit(0);
});

在终端用node运行这个文件后,你设置的问题按顺序显示在控制台,你按顺序回答最后会生成一个package.json,问题和你写入的答案就都在了。
后来问题就来了。。。。文件是生成了,但是是空白的,然后疯狂比对老陈的代码,一直以为自己导入模块写错了,文件写入写错了,一个小时后不知道为啥恍然大悟,其实就是
fsWrite("package.json", content);这行代码前面忘记加await了~~~因为大家都是按照await 一步一步来的,你这个方法没有await 于是就和close方法一起运行了,close方法比写入快,还没写入这个进程就停了,当然是空白的了。
最后总结下,因为这个小问题耗费了一小时,其实up主讲课提醒过了,但是自己忘记了,就亲自踩了下坑。async方法里面,真的要和await 配合好使用,排好队一步步来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值