为什么require提供的函数在类实例中未定义?



我问这个主要是作为一个完整性检查,我不确定我是否在某个地方犯了错误,或者如果这根本不起作用。

我正在转换一些Java到Nodejs,一个名为Site的类通过datfunctions . getsiteinfo (id)函数从数据库中填充自己。它还存储Page实例列表。

问题是,当创建Site的实例时,datfunctions返回为未定义。

我是否误解了类和模块在这种情况下的工作方式?这个类的实例是否可以访问datfunctions模块?同样地,Site类也可以引用Page类吗?还是我犯了什么愚蠢的错误?

Site.js

let Page = require('./Page.js');
let dataFunctions = require('../DataFunctions.js');
module.exports = class Site {
constructor(id) {
this.id = id;
this.pages = [];
console.log(dataFunctions);
this.siteInfo = dataFunctions.getSiteInfo(id);

DataFunctions.js

let Site = require('./classes/Site.js');
function makeASite() {
let id = 2;
let site = new Site(id);
}
function getSiteInfo(id) {
etc etc
}
module.exports = {
getSiteInfo: function (id) {
return getSiteInfo(id);
},
};

根据提供的代码,我相信您忘记创建新的dataFunctions实例了。

const df = new dataFunctions();
console.log(df);

如果dataFunctions提供静态功能,请确保getSiteInfo方法是静态的。

否则,可能需要额外的细节。

编辑

看起来项目结构和require路径是不稳定的,但是很难判断。

当我运行使用require语句推断的项目结构提供的代码时,我无法重现您的问题。

然而,我确实看到的一个问题是,您需要DataFunctions.js模块的Site.js模块,并需要Site.js模块的DataFunctions.js模块,创建循环依赖关系。尽量消除这些通过移动makeASiteSite.js模块,例如。

相关内容

最新更新