2014-07-23 39 views
1

作爲一個初學者到這的NodeJS可能straigtforward,但尚未我無法揣摩出我錯了功能要求()拋出未定義的錯誤

我home.js文件是遵循

module.exports = function (deps) { 
    var sample = require('../lib/sample'), // My own library 
     express = require('express'), 
     router = express.Router(); 

    router.get('/', function (req, res) { 
    op = sample.parse('hi'); // Error here 
    res.send(op); 
    }); 

    return router; 
}; 

在lib文件夾,我的sample.js代碼

module.exports = function() { 

    function parse(text) { 
     return 'hello' + text; 
    } 

    return { 
     'sample': { 
      'parse': parse 
     } 
    }; 
}; 

但我得到一個錯誤說上突出顯示的行undefined is not a function。任何人都可以讓我知道我失蹤了嗎?

回答

4

由於您導出了一個函數,因此現在可以使用sample函數。你需要明確地執行它來獲得同一個對象。所以,你需要做這樣的事情

var sample = require('../lib/sample')().sample 

現在,require語句返回功能,我們立即執行,它返回一個對象,具有sample屬性。由於您只對sample財產感興趣,我們只獲得sample財產。

如果你打算隱藏parse從用戶的執行情況,我建議做

function parse(text) { 
    return 'hello' + text; 
} 

module.exports = { 
    'parse': parse 
}; 

現在,你只是導出parse功能,在對象和代碼需要這個模塊將能夠使用parse函數,就像你在問題中提到的那樣。

1

module.exports您的module.exports評估爲一個函數,在調用時產生包含您嘗試調用的parse函數的對象,在某些嵌套下。您可以嘗試重組你的sample.js文件看起來像這樣:

function parse(text) { 
    return 'hello' + text; 
} 

module.exports = { 
    parse: parse 
}; 

除非你真的需要在您的示例所示的功能包裝。在這種情況下,你必須在那裏你將其導入以解開它,所以是這樣的:

var sample = require('../lib/sample')().sample 
1

更改exports到:

module.exports = function() { 

    function parse(text) { 
     return 'hello' + text; 
    } 

    return { 
     'parse': parse 
    }; 
}; 
相關問題