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);