我在某些ExpressJS路线上有这行代码:
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 :(得分:2)
1 /
您可以定义filed1
&当您致电时,请使用field1
==>输入错误
2 /
你需要编写你的包返回具有atttribute 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()
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' );

答案 1 :(得分:-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()中的函数;