【问题标题】:Uncaught TypeError: fs.writeFile is not a function未捕获的类型错误:fs.writeFile 不是函数
【发布时间】:2021-08-18 15:34:18
【问题描述】:

我在我的程序中收到错误Uncaught TypeError: fs.writeFile is not a function,我只想在其中向 JSON 文件写入一些内容。 fs.readFileSync 函数可以正常工作,但 fs.writeFile 由于某种原因不能正常工作。这是我的代码:

HTML:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <h1>Hello World!</h1>
    <button id="button">Write Something</button>
    <script src="./app.js"></script>
  </body>
</html>

JavaScript:

const fs = require("fs");
const data = fs.readFileSync("db.json", "utf8");
const db = JSON.parse(data);

console.log(db);

document.getElementById("button").onclick = () => {
  fs.writeFile("db.json", "test", () => {
    console.log("Written file!");
  });
};

JSON:

["something1", "something2"]

只是让您知道,我使用 Parcel 作为我的捆绑器。请帮助我了解为什么这不起作用。

【问题讨论】:

  • 您不应该拥有浏览器的写入权限。所以,我希望在浏览器中运行的fs 可能只是删除了所有的写入方法。

标签: javascript node.js parceljs


【解决方案1】:

Node.js fs 模块不是用 JavaScript 编写的。它是用 C/C++ 编写的 Node.js 的核心部分。它不会在网络浏览器中运行,也不能捆绑到 JS 文件中。

(注意readFileSync 可以是inlined,它只是在打包时读取文件,而不是在运行时读取)。

如果您想生成 JSON 文件,那么您可以:

  • 编写一个 Web 服务(它将 JSON 写入服务器上的文件),然后向它发出 HTTP 请求
  • 将数据转换为downloadable URL(以便将其保存到用户的下载文件夹中)。

【讨论】:

  • 我不想生成 JSON 文件,我想修改我创建的现有文件,例如添加或删除其中的元素。您建议我的第一个选项可以工作,但我的托管类型不提供它的设施。除非您的第二个提案意味着我可以访问该文件、修改和删除其中的元素,否则我需要更多的工作。
  • @DG27 — 如果您需要更改服务器上的数据,那么您需要支持它的托管。
  • 我想要尽可能少的后端基础设施。如果有帮助,这里是我的文件夹结构照片的链接。希望您能够理解我的目标 - photos.app.goo.gl/qv6qobpBDKd93Nvu5。请告诉我更多关于第二个建议的信息。
  • 将修改后的文件副本放在最终用户的计算机上将无法满足您编辑已有文件的要求。
【解决方案2】:

您将无法在浏览器中使用writeFile,即使您使用捆绑器,因为这是 Node.js 而不是浏览器 API。 Bundler 不会在浏览器的构建中嵌入原生 Node.js 函数,因为这是两种不同的执行环境。

在浏览器中,未经用户同意,不能任意触发文件写入磁盘,因此必须实际触发文件下载

【讨论】:

  • "这是 Node.js 而不是浏览器 API。" 但 readFile 调用成功。因此,无论这是什么库,都存在于浏览器环境中。但我不知道会是哪一个。可能只是对文件执行 GET 以“读取”它。
  • 最好是编辑这个并进入更多细节。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
  • 2019-06-06
  • 2019-05-24
  • 2021-12-15
  • 2019-10-26
  • 2016-06-27
相关资源
最近更新 更多