node.js简单的项目:ReferenceError:<ClassName>没有定义

我试图学习Node.js(ES6),但在require失败

这是我的结构:

在这里输入图像说明

baseModel.js

 "use strict"; class BaseModel { constructor(options = {}, data = []) { // class constructor this.name = 'Base' this.url = 'http://azat.co/api' this.data = data this.options = options } getName() { // class method console.log(`Class name: ${this.name}`) } } 

AccountModel.js

 "use strict"; require('./baseModel.js'); class AccountModel extends BaseModel { constructor(options, data) { super({private: true}, ['32113123123', '524214691']) //call the parent method with super this.name += 'Account Model' this.url +='/accounts/' } get accountsData() { //calculated attribute getter // ... make XHR return this.data } } 

main.js

 "use strict"; require('./AccountModel.js'); let accounts = new AccountModel(5) accounts.getName() console.log('Data is %s', accounts.accountsData); 

现在我运行: node --harmony-default-parameters main.js

并得到错误:

ReferenceError:BaseModel没有在Object中定义。 (/Users/tamirscherzer/POC/projects/NodeJS/tutorials/classes/AccountModel.js:5:28)在Module._compile(module.js:397:26)在Object.Module._extensions..js(module.js :module.js:347:32)在Module.require(module.js:353:17)在Function.Module._load(module.js:300:12) /module.js:12:17)在Object。 (/Users/tamirscherzer/POC/projects/NodeJS/tutorials/classes/main.js:5:1)at Module._compile(module.js:397:26)at Object.Module._extensions..js(module.js :404:10)

真奇怪,如果我改变require('./baseModel.js'); 到其他名称,我得到错误,找不到文件,所以path写入正确。

还定义了权限777 – 同样的事情, BaseModel is not defined

有任何想法吗?

当你在Node中定义一个variables时,它不会像在浏览器中那样被添加到全局范围中,而是在一个文件/模块中。 因此,你不能简单地导入一个文件,并期望它里面定义的东西是可用的 – 你明确地必须导出和导入它们。

BaseModel.js:

 class BaseModel { constructor(options = {}, data = []) { // class constructor this.name = 'Base' this.url = 'http://azat.co/api' this.data = data this.options = options } getName() { // class method console.log(`Class name: ${this.name}`) } } module.exports = BaseModel; 

AccountModel.js:

 "use strict"; let BaseModel = require('./baseModel.js'); class AccountModel extends BaseModel { constructor(options, data) { super({private: true}, ['32113123123', '524214691']) //call the parent method with super this.name += 'Account Model' this.url +='/accounts/' } get accountsData() { //calculated attribute getter // ... make XHR return this.data } } module.exports = AccountModel; 

main.js:

 "use strict"; let AccountModel = require('./AccountModel.js'); let accounts = new AccountModel(5) accounts.getName() console.log('Data is %s', accounts.accountsData);