fs.readFileSync 不是 Meteor 的函数,React

Posted

技术标签:

【中文标题】fs.readFileSync 不是 Meteor 的函数,React【英文标题】:fs.readFileSync is not a function Meteor, React 【发布时间】:2018-01-10 00:48:53 【问题描述】:

在尝试调用 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

【问题讨论】:

你的代码中是否也存在 require 调用的错误? 不,这是我帖子中的错字。对不起。这不是问题。 什么是文件类型?您正在从文件中读取什么样的数据? 它实际上是一个自定义的 .info 文件。它只是在每一行中都有需要拆分为数组的数据。 是在客户端还是服务器上运行? 【参考方案1】:

感谢大家的回答!

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

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

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

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

编辑:

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

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

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

【参考方案3】:

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

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

if (Meteor.isClient) return;

以避免错误。否则,应该有另一种方法来完成您想要完成的工作,例如 importing 需要 JSON。

【讨论】:

以上是关于fs.readFileSync 不是 Meteor 的函数,React的主要内容,如果未能解决你的问题,请参考以下文章

节点 fs.readFileSync 返回一个 uInt8 数组而不是原始缓冲区数组?

如何为 fs.readFileSync() 捕获没有文件?

Node.JS fs.readFileSync() 错误参数

使用 lambda 部署时 fs.readFileSync 找不到文件

fs.readFileSync无法读取nodejs中的文件传递路径变量

如何将使用 fs.readFileSync() 的 Node.js 代码重构为使用 fs.readFile()?