node.js
  • ecmascript-6
  • 2016-07-26 27 views 1 likes 
    1

    我努力學習的Node.js(ES6),但未能對requireNode.js的簡單的項目:的ReferenceError:<ClassName>沒有定義

    這是我的結構:

    enter image description here

    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 is not defined at 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) at 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');以其他名稱,我得到錯誤的文件n沒有發現這樣的路徑寫得很好。

    還定義權限777 - 同樣的事情,BaseModel is not defined

    什麼想法?

    +0

    可能是名稱的情況下sensite的文件和類的名稱baseModel –

    +0

    當你需要某個東西時,你需要將返回的對象分配給一個名字 – thefourtheye

    +0

    通過前綴export來導出類,如下所示export class BaseModel { –

    回答

    2

    當您在Node中定義一個變量時,它不會像在瀏覽器中那樣添加到全局範圍內 - 它對於該文件/模塊是本地的。因此,您不能簡單地導入文件,並期望其中定義的內容可用 - 您明確地必須導出並導入它們。

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

    偉大的,工程,所以如何使用'es6出口'而不是'modules.export'? – snaggs

    +0

    @snaggs:它們尚未在Node中實現。你必須使用諸如[Babel](https://babeljs.io/)的轉譯器來使用ES6導入和導出。 –

    相關問題