fs.readFileSync 不是函数 Meteor, React

IT技术 node.js reactjs meteor npm fs
2021-04-17 05:23:54

尝试调用 readFileSync() 后,我在 Chrome 调试器中收到“fs.readFileSync 不是函数”;

我叫它...

const fs = require('fs');

调用函数...

let content = fs.readFileSync('/path/to/my/file.stuff');

并尝试显示内容..

console.log(content);

我什么也得不到。当我做...

console.log(fs);

我似乎得到了一个通用的 javascript 对象......我完全被卡住了。

流星版本:1.5.1 npm 版本:3.10.10 节点版本:v6.10.1

3个回答

感谢所有的答案!

我已经确认您不能在客户端使用 fs。

相反,我制作了另一个本地简单的 express 节点 api,而 react web 应用程序只是向节点 api 发出请求以获取该数据。

另外,你必须这样做......

https://enable-cors.org/server_expressjs.html

编辑:

很久以前写的。3 年前,我刚刚开始学习 Web 开发。只是想更新一下,说用户看到的和服务器看到的有严重的根本区别。允许前端(Meteor、React、Angular 等)读取文件将是一个非常严重的安全问题。任何人都可以制作一个网站,当用户访问它时,它只会读取您本地计算机的文件。不好...

虽然这对我来说现在非常明显,但在 3 年前并不明显。所以对于你们所有的新手来说,没关系:) 毫无疑问,这是一个愚蠢的问题。

尝试调用 readFileSync() 后,我在 Chrome 调试器中收到“fs.readFileSync 不是函数”;

fs不会在浏览器中工作。这是为了保护您的文件系统免受潜在安全威胁而设计的。

在浏览器环境中使用低级 Node 包

如果您需要在浏览器环境中访问它,请考虑使用Electron,它允许您在运行的 Chromium 实例中使用操作系统级 NodeJS 包。

fs 不能在客户端使用,因为浏览器限制了一些 javascript 代码。

如果您的代码同时在服务器和客户端上运行,您可以使用:

if (Meteor.isClient) return;

以避免错误。否则,应该有另一种方法来完成您要完成的任务,例如importing required JSON。