node.js 简单项目:ReferenceError: <ClassName> 未定义

sna*_*ggs 4 node.js ecmascript-6

我尝试学习 Node.js (ES6) 但失败了 require

这是我的结构:

在此处输入图片说明

基础模型.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}`)
    }
}
Run Code Online (Sandbox Code Playgroud)

账户模型.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
    }

}
Run Code Online (Sandbox Code Playgroud)

主文件

"use strict";

require('./AccountModel.js');

let accounts = new AccountModel(5)

accounts.getName()

console.log('Data is %s', accounts.accountsData);
Run Code Online (Sandbox Code Playgroud)

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

并得到错误:

ReferenceError: BaseModel 未在 Object 中定义。(/Users/tamirscherzer/POC/projects/NodeJS/tutorials/classes/AccountModel.js:5:28) at Module._compile (module.js:397:26) at Object.Module._extensions..js (module.js :404:10) at Module.load (module.js:343:32) at Function.Module._load (module.js:300:12) at Module.require (module.js:353:17) at require (internal /module.js:12:17) 在对象。(/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');为其他名称,则会出现找不到文件的错误,因此路径写入正确。

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

有任何想法吗?

Joe*_*lay 6

当您在 Node 中定义一个变量时,它不会像在浏览器中那样添加到全局范围内——它是该文件/模块的本地变量。因此,您不能简单地导入文件并期望您在其中定义的内容可用 - 您必须明确地导出和导入它们。

基础模型.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;
Run Code Online (Sandbox Code Playgroud)

账户模型.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;
Run Code Online (Sandbox Code Playgroud)

主要.js:

"use strict";

let AccountModel = require('./AccountModel.js');

let accounts = new AccountModel(5)

accounts.getName()

console.log('Data is %s', accounts.accountsData);
Run Code Online (Sandbox Code Playgroud)