调用node.js中的module.exports时未定义结果

时间:2018-07-07 18:54:56

标签: javascript node.js

我的app.js内容:

 var greet3=require('./greet3');
 greet3.greet();

我的greet3.js内容

  function Greetr(){
  this.greeting='greet3';
  this.greet=function(){
    console.log(this.greeting);
   }
  }
   module.exports=new Greetr();

我的控制台窗口输出:greet3

但是当我将app.js的内容更改为:

 var greet3=require('./greet3');
 greet3();

我得到的输出为'undefined'

我是node.js的初学者,正在尝试使用不同的模块模式。我需要有关为什么我得到未定义结果的帮助

4 个答案:

答案 0 :(得分:1)

给出上面的模块,行

var greet3=require('./greet3');

基本上变为:

var greet3 = {
  greeting: "greet3",
  greet: function(){
    console.log(this.greeting);
  }
}

因此在app.js中,greet3现在是一个对象。 greet3.greet();正常工作,并记录"greet3"

但是greet3()不是函数,因此greet3 is not a function会产生greet3

答案 1 :(得分:0)

您正在导出初始化的对象,当您设置var greet3 = require('./ greet3')并调用greet3()时,您试图将该对象用作函数,因此它表示未定义。

答案 2 :(得分:0)

更改greet3.js中的代码:

  module.exports = function(){
  this.greeting='greet3';
  this.greet=function(){
    console.log(this.greeting);
   }
  }

答案 3 :(得分:0)

正如其他人之前所说,您的代码按预期运行。 您的模块:

function Greetr(){
  this.greeting='greet3';
  this.greet=function(){
    console.log(this.greeting);
  }
}
module.exports=new Greetr();

返回一个对象,但我认为您想返回一个函数,因此最后一行应如下所示:

module.exports=Greetr;

代替此:

module.exports=new Greetr();

因为现在您打电话:

var greet3=require('./greet3');
greet3();

它将功能Greetr的对象分配给变量greet3,并且您无法调用对象。