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 }; };