类型错误:无法读取未定义的 NodeJS dom 解析器的属性“readFileSync”

问题描述 投票:0回答:4

尝试将 Dom-Parser 与 Discord.js 一起使用。无法从其他地方找到帮助。 第 15 行出错

fs.readFile
我在让 fs 工作时也遇到了很多问题。首先它没有定义,然后在初始化之前无法运行,只是修复了这个问题(我希望)

// Discord stuff.
const Discord = require('discord.js');
const client = new Discord.Client();
const config = require('./config.json');
const token = config.token;

// DomParser
var DomParser = require('dom-parser');
var parser = new DomParser();
var data = fs.readFileSync(filepathHidden);

// Other requirements
var fs = require('fs');


// when getting online. 
client.once('ready', () => {
    console.log('WAHAHAHA IM ALIVE!');
}),

fs.readFile('https://url.com)', 'utf8', function(err, html){
    if (!err){
      var dom = parser.parseFromString(html);
  
      console.log(dom.getElementsByClassName('new_solution_box_title').innerHTML);
    }
  })

client.login(token);
javascript node.js discord domparser
4个回答
15
投票

请参阅另一个堆栈溢出问题中相同错误的答案。

对我有帮助的答案的链接来自Arun Kumar Mohan

他建议的是导入如下:

import * as fs from 'fs'


4
投票

var
升起

因此,既然您有

var fs
,那么在您拥有该语句的函数/模块/全局作用域中就有一个名为
fs
的变量。

它一开始是未定义的。

当您说

fs = require('fs')
时,您将文件系统模块分配给它。到那时它就不再是未定义的了。

上一行,当您尝试使用

fs.readFileSync
读取它时,您尚未定义它,因此会出现错误。

订单事宜


0
投票

请阅读有关 FS API 的 URL 对象支持的 NodeJS 文档。使用 URL 时似乎仅支持

file:
协议。

但是,我什至不建议您使用

fs.readFileSync
,因为它是一个阻塞操作(代码执行将停止直到完成)并且涉及网络传输。

尝试先使用

fetch
XMLHttpRequest
或您喜欢的库来获取文件,然后解析它。或者至少使用
fs.readFile
它将异步执行其任务(
file:
协议限制仍然适用)。

对于未定义的错误,使用前必须导入/require

fs
。换句话说,
var fs = require('fs')
必须出现在
fs
的任何其他用途之前。


0
投票

在 Node.js 最新版本

(>=20.16.0)
中,我们可以简单地导入,就像那样,
import fs from 'fs'
。但对于较低版本
(<=18.14.0)
,我们必须像这样导入它:
import * as fs from 'fs'

© www.soinside.com 2019 - 2024. All rights reserved.