如何修复 'Class extends value undefined is not a constructor or null' NodeJS
How to fix 'Class extends value undefined is not a constructor or null' NodeJS
我有 3 个文件结构,顺序如下,所有文件都包含 1 个 class
main.js extends events
events.js extends base
base.js
我已经查看了这些答案,但我的问题似乎与以下人员描述的完全不同。
main.js
const { Events } = require('./events.js');
module.exports = class Main extends Events {
constructor(token) {
super();
// Some code
}
}
events.js
const { Base } = require('./base.js');
module.exports = class Events extends Base {
constructor() {
super();
}
// more code
}
base.js
module.exports = class Base{
constructor() {
// Code
}
}
我无法在 index.js
中初始化主 class,因为这会导致以下错误:
module.exports = class Events extends Base {
^
TypeError: Class extends value undefined is not a constructor or null
我是否以某种循环方式要求 classes?我不确定我在这里遗漏了什么。
您可能通过在 index.js 中导入外部模块的方式创建了某种循环依赖循环。
但是,看来大多数情况下您只需要从这里更改:
const { Base } = require('./base.js');
对此:
const Base = require('./base.js');
并由此得出:
const { Events } = require('./events.js');
对此:
const Events = require('./events.js');
当你做这样的事情时:
const { Base } = require('./base.js');
它在名为 Base
的导入模块上寻找 属性,但没有这样的 属性。您将 class 作为整个模块导出。因此,这就是您需要分配给变量 Base
(整个模块)的内容:
const Base = require('./base.js');
index.js 中导入 main.js 的代码如果还没有正确完成,也必须正确完成。
当我将 Squelize ORM 与 NodeJS 结合使用时,我收到了 "Sequelize TypeError: Class extends value undefined is not a constructor or null, NodeJS" 的错误。我试图解决这个问题,并找到了一些解决方案。对于一些试图解决这个错误的人来说,有一个解决方案。
我遇到了这个错误并使用它解决了它。如果你有同样的错误,你可以使用我试图在代码中解释的以下解决方案。希望对您有所帮助!
module.exports = (sequelize, DataTypes) => {
// Modeling a table: Inheritance
class Todo extends sequelize.Model {} // (!) Error
// if you want to use the above line, add the following line to "lib\sequelize.js file
// Sequelize.prototype.Model = Model; // add this line here
class Example extends sequelize.Sequelize.Model { }
Example.init({
title: DataTypes.STRING,
description: DataTypes.STRING,
status: DataTypes.BOOLEAN
}, {
sequelize,
modelName: 'todo',
timestamps: true
});
return Example;
};
错误消息中报告的文件引用、行号和列号原来是准确且有用的。
在我的例子中,我扩展了从 '.'
导入的 class。
所以,它看起来像:
import { BaseSchema } from '.';
@ObjectType
export class SomeSchema extends BaseSchema {
}
这应该是可行的,因为文件夹中有一个 index.ts
文件。但是,由于某种原因,它触发了上述错误。我设法通过简单地将导入语句修改为特定路径来修复它。
import { BaseSchema } from './Base.schema';
我一直使用来自 '.'
的导入和 index.ts 文件。所以,我确实相信在这个特定案例中存在某种循环依赖问题。
总结:
- 仔细查看错误消息。它可能指向
extends ...
.
- 接下来,查找扩展 class.
的导入语句
- 尝试更改该导入语句的路径。这可能会解决它。
我有 3 个文件结构,顺序如下,所有文件都包含 1 个 class
main.js extends events
events.js extends base
base.js
我已经查看了这些答案,但我的问题似乎与以下人员描述的完全不同。
main.js
const { Events } = require('./events.js');
module.exports = class Main extends Events {
constructor(token) {
super();
// Some code
}
}
events.js
const { Base } = require('./base.js');
module.exports = class Events extends Base {
constructor() {
super();
}
// more code
}
base.js
module.exports = class Base{
constructor() {
// Code
}
}
我无法在 index.js
中初始化主 class,因为这会导致以下错误:
module.exports = class Events extends Base {
^
TypeError: Class extends value undefined is not a constructor or null
我是否以某种循环方式要求 classes?我不确定我在这里遗漏了什么。
您可能通过在 index.js 中导入外部模块的方式创建了某种循环依赖循环。
但是,看来大多数情况下您只需要从这里更改:
const { Base } = require('./base.js');
对此:
const Base = require('./base.js');
并由此得出:
const { Events } = require('./events.js');
对此:
const Events = require('./events.js');
当你做这样的事情时:
const { Base } = require('./base.js');
它在名为 Base
的导入模块上寻找 属性,但没有这样的 属性。您将 class 作为整个模块导出。因此,这就是您需要分配给变量 Base
(整个模块)的内容:
const Base = require('./base.js');
index.js 中导入 main.js 的代码如果还没有正确完成,也必须正确完成。
当我将 Squelize ORM 与 NodeJS 结合使用时,我收到了 "Sequelize TypeError: Class extends value undefined is not a constructor or null, NodeJS" 的错误。我试图解决这个问题,并找到了一些解决方案。对于一些试图解决这个错误的人来说,有一个解决方案。
我遇到了这个错误并使用它解决了它。如果你有同样的错误,你可以使用我试图在代码中解释的以下解决方案。希望对您有所帮助!
module.exports = (sequelize, DataTypes) => {
// Modeling a table: Inheritance
class Todo extends sequelize.Model {} // (!) Error
// if you want to use the above line, add the following line to "lib\sequelize.js file
// Sequelize.prototype.Model = Model; // add this line here
class Example extends sequelize.Sequelize.Model { }
Example.init({
title: DataTypes.STRING,
description: DataTypes.STRING,
status: DataTypes.BOOLEAN
}, {
sequelize,
modelName: 'todo',
timestamps: true
});
return Example;
};
错误消息中报告的文件引用、行号和列号原来是准确且有用的。
在我的例子中,我扩展了从 '.'
导入的 class。
所以,它看起来像:
import { BaseSchema } from '.';
@ObjectType
export class SomeSchema extends BaseSchema {
}
这应该是可行的,因为文件夹中有一个 index.ts
文件。但是,由于某种原因,它触发了上述错误。我设法通过简单地将导入语句修改为特定路径来修复它。
import { BaseSchema } from './Base.schema';
我一直使用来自 '.'
的导入和 index.ts 文件。所以,我确实相信在这个特定案例中存在某种循环依赖问题。
总结:
- 仔细查看错误消息。它可能指向
extends ...
. - 接下来,查找扩展 class. 的导入语句
- 尝试更改该导入语句的路径。这可能会解决它。