Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';t将对象推送到nodejs中的数组_Javascript_Node.js_Async Await - Fatal编程技术网

Javascript Can';t将对象推送到nodejs中的数组

Javascript Can';t将对象推送到nodejs中的数组,javascript,node.js,async-await,Javascript,Node.js,Async Await,获取类型错误:data.push不是函数 在Object.addContact(/Users/jewkuza/Documents/goit-node-hw-01/contacts.js:43:30)数据是字符串,而不是数组,因此没有可用的方法推送 您可能缺少一个JSON.parse(): const data=wait fsPromises.readFile(contactsPath,编码); const parsedData=JSON.parse(数据) const updatedata=pa

获取类型错误:data.push不是函数
在Object.addContact(/Users/jewkuza/Documents/goit-node-hw-01/contacts.js:43:30)

数据是字符串,而不是数组,因此没有可用的方法
推送

您可能缺少一个
JSON.parse()

const data=wait fsPromises.readFile(contactsPath,编码);
const parsedData=JSON.parse(数据)
const updatedata=parsedData.push({
id:uid,
姓名:姓名,,
电邮:电邮,,
电话:电话,,
});

尽管事实上,您的代码只是缺少fsPromises定义的一个片段,但这里有两个bug

  • readFile返回字符串而不是数组(请参见此处:)

  • 将变量
    updateData
    写回文件。Array.push返回数组的新长度,而不是更新的数组。您可能想要回写数据


  • 您是否可以检查数据类型,如
    console.log(数据类型)
    ?由于.push是一个数组函数,我认为数据是objectif
    fspromissions.readFile()
    只是一个包装器,在
    fs.readFile()
    周围有承诺,然后它返回
    Promise
    ,它不是对象数组(!)从文件读取总是读取字符串,除非你的
    readFile
    函数不知何故没有…你的意思是
    JSON.parse
    文件内容吗…?,它的承诺不是用数组实现的,而是用
    缓冲区或字符串实现的。(假设
    encoding
    不是
    undefined
    ,则本例中的字符串也返回数组的新长度,而不是您推送的内容(根据从
    push
    获取后对
    updateData
    所做的操作推断)。当您得到意外结果时,最好先检查文档。@deceze-或
    缓冲区
    ,但在本例中是字符串,因为提供了编码(假设
    编码
    不是
    未定义
    )。
    async function addContact(name, email, phone) {
      try {
        const data = await fsPromises.readFile(contactsPath, encoding);
        const updatedData = data.push({
          id: uid,
          name: name,
          email: email,
          phone: phone,
        });
        await fsPromises.writeFile(contactsPath, JSON.stringify(updatedData));
        console.log(updatedData);
      } catch (err) {
        console.error(err);
      }
    }