控制台中出现Uncaught TypeError: fs.readFileSync不是一个函数。

5

我使用以下代码从本地系统读取文件:

var fs = require('fs');            
var text = fs.readFileSync("./men.text");
var textByLine = text.split("\n")
console.log(textByLine);

2
什么是 fs?忘记导入了吗? - Tushar
抱歉..我已经在文件中导入了,但是忘记在这里写了。var fs = require("fs"); - Himanshu Pandey
你是否试图在浏览器中运行代码? - robertklep
@robertklep,那么我们对于相同的需求该怎么做呢?我们需要从本地系统中读取文件内容并将其存储在数组或映射(键,值)中。 - Himanshu Pandey
1
@HimanshuPandey 看看这个:使用HTML5文件API在浏览器中本地处理文件 - robertklep
显示剩余3条评论
3个回答

7

注意:fs是一个Node.js模块,无法在浏览器中使用。

导入fs模块,

readFileSync将为您提供缓冲区。

要使用split()函数,您必须将Buffer转换为String

var fs = require('fs')

var text = fs.readFileSync("./men.text");
var string = text.toString('utf-8') // converting the Buffer into String

var textByLine = string.split("\n")
console.log(textByLine);

更新


服务器端

fs 是一个 Node.js 内置模块,不能在浏览器端(客户端)使用。在服务器端使用 fs 进行操作,获取数据并按所需格式进行处理,然后可以使用 htmlejs 等多种模板引擎进行渲染。

这里我创建了一个使用 express 的 Node.js 服务器,从浏览器访问 http://localhost:8000/ 将得到数据数组。

您可以使用 res.render 格式化您的数据并将其呈现为 .ejshtml 文件。

app.js

var express = require('express');
var app = express();
var fs = require('fs')

app.get('/', function (request, response) {
  var text = fs.readFileSync("./men.text");
  var string = text.toString('utf-8')

  var textByLine = string.split("\n")
  console.log(textByLine);
  response.send(textByLine);
});

app.listen('8000');

虚拟输出:

在此处输入图片描述


1
仍然出现相同的错误 Uncaught TypeError: fs.readFileSync不是一个函数 - Himanshu Pandey
你保存了文件吗?你在浏览器中运行代码吗? - parwatcodes
Node.js 运行于服务器上,fs 是一个 Node.js 模块。如果你想在浏览器中加载文本文件,则可以使用来自 Express 路由的 HTML、EJS 进行渲染,或者使用 AJAX 请求来访问它们。 - parwatcodes
请查看我的更新答案,我只会发送数据,但您可以使用HTML、EJS文件将数据与HTML、EJS一起发送,在服务器上必须设置视图引擎、静态文件路径。 - parwatcodes

2

对于仍在其电子应用程序中遇到未定义函数的所有人:

解决方案(至少对我而言)是改为不使用:

const fs = require('fs');

而是使用:

const fs = window.require('fs');

这样就可以解决我遇到的所有问题。

注意:保留html标签,本文中的"Original Answer"翻译成"最初的回答"。


0
var fs = require('fs');

var text = fs.readFileSync('./men.text', 'utf8');
var textByLine = text.split("\n");
console.log(textByLine);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接