require()函数抛出未定义的错误

作为NodeJS的初学者,这可能是直截了当的,但是我无法弄清楚我错在哪里

我的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突出显示行上的undefined is not a function 。 任何人都可以让我知道我失踪了吗?

既然你导出了一个函数, sample现在就是一个函数。 你需要明确地执行它来获得相同的对象。 所以,你需要做这样的事情

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

现在, require语句返回函数,我们立即执行它,返回一个带有sample属性的对象。 既然你只对sample属性感兴趣,我们只得到sample属性。

如果你打算隐藏从用户的parse的执行,我会build议做的

 function parse(text) { return 'hello' + text; } module.exports = { 'parse': parse }; 

现在,您只需将对象的parse函数导出,并且需要此模块的代码将能够使用parse函数,就像您在问题中提到的一样。

你的module.exports计算结果是一个函数,在调用的时候会产生包含你试图调用的parse函数的对象。 您可以尝试重构您的sample.js文件,如下所示:

 function parse(text) { return 'hello' + text; } module.exports = { parse: parse }; 

除非你真的需要在你的例子中显示的function包装。 在这种情况下,你必须在导入它的地方打开它,所以像这样:

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

将您的exports更改为:

 module.exports = function () { function parse(text) { return 'hello' + text; } return { 'parse': parse }; };