nodejs导出函数on require

时间:2016-07-31 06:26:22

标签: javascript node.js

我在某些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;
};

我做错了什么?

2 个答案:

答案 0 :(得分:2)

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()

    的函数

DEMO:



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()中的函数;