2017-03-02 19 views
2

我有一個類Node.js的要求類構造函數的參數

class advertHandler { 
    constructor(projects) { 
     this.projects = projects; 
    } 

    getProject(name) { 
     return this.projects[name]; 
    } 
} 


module.exports = new advertHandler(projects); 

當我嘗試使用它像這樣

const advertHandler = require('./advertHandler')(projectsArray); 
advertHandler.getProject('test'); 

它拋出異常,require is not a function,但沒有構造一切都很好,所以問題是如何使用類構造函數與需求?

+0

檢查這個答案http://stackoverflow.com/questions/30689817/es6-call-class-constructor-without-new-keyword – MyUserInStackOverflow

回答

4

這並不是說require不是函數,而是說require(...)不是函數。 :-)您正在嘗試致電require(...)的結果,但您要導出的內容(advertHandler的實例)不是函數。還請注意,在advertHandler.js中,您嘗試使用名爲projects的全局(在最後一行);理想情況下,最好在NodeJS應用程序中擁有全局變量,以避免出現這種情況。

你只是想導出類:

module.exports = advertHandler; 

...,然後調用它之前可能需要它:

const advertHandler = require('./advertHandler'); 
const handler = new advertHandler({test: "one"}); 
console.log(handler.getProject('test')); 

如:

advertHandler.js:

class advertHandler { 
    constructor(projects) { 
     this.projects = projects; 
    } 

    getProject(name) { 
     return this.projects[name]; 
    } 
} 

module.exports = advertHandler; 

個app.js:

const advertHandler = require('./advertHandler'); 
const handler = new advertHandler({test: "one"}); 
console.log(handler.getProject('test')); 
+0

是否有可能在單行辦? ('test /');' 'const advertHandler = new require('./ advertHandler')({test:「one」});' –

+0

@ A-letubby:是的,但它的可讀性較差:'const handler = new(require(' ./addHandler')({test:「one」});'(注意'require'調用周圍的'()')。 –