2016-07-31 36 views
0

我有一些ExpressJS路線這行代碼:出口的NodeJS功能上需要

var test = require('../app/test')('dev'); 
test.getData(); //this fails saying: typeError getData() is not a function 

我的測試文件看起來像這樣:

module.exports = function(env){ 

    var mod = { 
    'field1': 'asd', 
    'field2': 'asd2' 
}; 

mod.getData = function(){ 
    return 'data'; 
}; 

return mod; 
}; 

我在做什麼錯?

+0

只需返回'mod'。 '返回mod'。另外'mod.getData()= function(){'應該是mod。getData = function(){' – undefined

+0

是的,錯字抱歉,結果相同。 – mdv

+0

你能發表更多的代碼嗎?也許你的整個項目在zip文件? –

回答

2

2誤區:

1/

可以定義filed1 &當你打電話給你使用field1==>鍵入錯誤

2/

你需要寫你的包返回對象,其具有屬性getData這是另一個function像下面這樣:

module.exports = function(env){ 

    var mod = { 
    'filed1': 'asd', 
    'field2': 'asd2', 
    'getData' :function(){ 

     return 'data'; 
    } 
}; 

return mod ; 


}; 

解釋:

  • require('../app/test')回報function(env){ ....
  • require('../app/test')('dev')呼叫function(env){....}('dev') ==>它返回的function(env){....輸出。

  • 此輸出應是一個對象(mod),它包含作爲屬性getData &其值應的功能,能夠調用require('../app/test')('dev').getData()


DEMO:

test=function(env){ 
 

 
    var mod = { 
 
    'filed1': 'asd', 
 
    'field2': 'asd2', 
 
    'getData' :function(){ 
 
    
 
     return 'data'; 
 
    } 
 
    }; 
 
    
 
return mod ; 
 

 

 
}; 
 

 
    console.log(`Can i call "test.getData()" ?`) 
 
try{ 
 
    test('dev').getData(); //!--- Call like this 
 
    console.log('yes') 
 
}catch(e){ 
 

 
    console.log('No : ',e) 
 
} 
 
    
 
console.log(`Can i call "test('dev').filed1" ? => `,test('dev').filed1 ==='asd');

+0

但是這樣我就失去了mod數據。 – mdv

+0

@mdv:不,它可以從getData函數訪問..你不會丟失IT –

+1

但是如果來自外部,我想使用test.field1 // asd和test.getData()? – mdv

-1

這是完整的源代碼。

test.js:

module.exports = function(env){ 

    var mod = { 
    'filed1': 'asd', 
    'field2': 'asd2', 
    'somefunction' : function() { 


    return 'data'; 

    } 
    }; 


    return mod; 
}; 

index.js

var test = require('../test'); 
test().somefunction(); 

問題是你試圖訪問該對象的屬性調用的getData。 getData已經被定義爲mod對象的一個​​屬性。所以如果你想訪問它,你需要刪除括號。 test.getData就足夠了。但是,getData被定義爲一個函數。 另外test.js被導出爲函數。所以你需要訪問test()然後通過getData()調用test()中的函數;

+1

'test.somefunction'不會調用賦給屬性'somefunction'的函數,它只會訪問它。你總是需要括號來調用一個函數(除非你爲這個屬性定義了一個getter或者setter函數)。該錯誤表示存儲在屬性'somefunction'中的值不是函數。 –

+0

你說得對。我設法修復錯誤信息,但是我沒有測試以確保函數實際被調用。我將編輯我的帖子。 –