作为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
。谁能让我知道我错过了什么?
答案 0 :(得分: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 :(得分:1)
您的module.exports
计算一个函数,该函数在调用时会产生包含您尝试调用的parse
函数的对象,在某些嵌套下。您可以尝试重构sample.js文件,如下所示:
function parse(text) {
return 'hello' + text;
}
module.exports = {
parse: parse
};
除非你真的需要你的例子中显示的函数包装。在这种情况下,你必须在导入它的地方解开它,所以像这样:
var sample = require('../lib/sample')().sample
答案 2 :(得分:1)
将您的exports
更改为:
module.exports = function () {
function parse(text) {
return 'hello' + text;
}
return {
'parse': parse
};
};