无法将对象推送到Node.js中的数组

时间:2020-09-01 09:27:18

标签: javascript node.js async-await

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);
  }
}

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

2 个答案:

答案 0 :(得分:1)

data是一个字符串,而不是数组,因此没有可用的方法push

您可能缺少JSON.parse()

const data = await fsPromises.readFile(contactsPath, encoding);
const parsedData = JSON.parse(data)
const updatedData = parsedData.push({
      id: uid,
      name: name,
      email: email,
      phone: phone,
});

答案 1 :(得分:1)

尽管事实是您的代码只是缺少fsPromises定义的一小段,但这里有两个错误。

  1. readFile返回一个字符串而不是一个数组(请参见此处:https://nodejs.org/api/fs.html#fs_fs_readfile_path_options_callback

  2. 您将变量updatedData写回到文件中。 Array.push返回数组的新长度,而不是更新后的数组。您可能想写回数据。