关于Nodejs模块的错误

时间:2013-10-21 02:27:35

标签: javascript node.js module

我是Nodejs的初学者,我按照指南研究了这个。 现在,我有module.js

function Hello()
{
  var name;
  this.setName=function(thyName){
      name=thyName;
  };

  this.sayHello=function()
  {
    console.log("hello,"+name);
  };
};

module.exports=Hello;

getModule.js

var hello = require("./module");
hello.setName("HXH");
hello.sayHello();

但是当我跑步时:

d:\nodejs\demo>node getModule.js

我收到了错误:

d:\nodejs\demo\getModule.js:2
hello.setName("HXH");
      ^
TypeError: Object function Hello()
{
  var name;
  this.setName=function(thyName){
      name=thyName;
  };

  this.sayHello=function()
  {
    console.log("hello,"+name);
  };
} has no method 'setName'
    at Object.<anonymous> (d:\nodejs\demo\getModule.js:2:7)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:901:3

为什么我这样做?我只是按照指南。

2 个答案:

答案 0 :(得分:1)

我不确定您遵循的指南,但module.js会导出一个班级。由于module.js导出一个类,当你执行require('./module')时,你会得到一个类。但是,您正在使用该类,就好像它是该类的实例一样。如果您想要一个实例,则需要使用new,如下所示:

var Hello = require('./module');  // Hello is the class
var hello = new Hello();  // hello is an instance of the class Hello
hello.setName("HXH");
hello.sayHello();

答案 1 :(得分:1)

首先,NodeJS遵循CommonJS规范来实现模块。你应该知道它是如何工作的。

其次,如果您想像编写方式一样使用模块,则应修改module.jsgetModule.js,如下所示:

//module.js
module.exports.Hello= Hello;

//getModule.js.js
var Hello = require("./module");
var hello = new Hello();
hello.setName("HXH");
hello.sayHello();