Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js模块导出功能结构_Javascript_Node.js - Fatal编程技术网

Javascript node.js模块导出功能结构

Javascript node.js模块导出功能结构,javascript,node.js,Javascript,Node.js,我想将服务公开为节点中的模块。一旦需要,例如: var MyService = require('../services/myservice'); 我希望能够创建模块的实例并使用其功能和属性,如: var myService = new MyService(); var data = myService.getData(); 我在使用导出构建模块时遇到问题。我应该如何使用导出设置myservice.js代码 //myservice.js module.exports = functi

我想将服务公开为节点中的模块。一旦需要,例如:

var MyService = require('../services/myservice');
我希望能够创建模块的实例并使用其功能和属性,如:

var myService = new MyService();
var data = myService.getData();
我在使用导出构建模块时遇到问题。我应该如何使用导出设置myservice.js代码

//myservice.js    
module.exports = function(dependency){
   return {
      getData: function(){
         return 'The Data';
      },
      name: 'My Service'
   }
} 
尝试使用实例化实例时出现以下错误:

var myService = new MyService();
TypeError:对象不是函数


假设这是我的Service.js模块:

//Service.js
function Service(){}

Service.prototype.greet = function(){
    return "Hello World";
};


module.exports = Service;
然后在另一个模块中,我可以简单地执行以下操作:

//another.js
var Service = require('./Service');

var service = new Service();
console.log(service.greet()); //yields "Hello World"
这对我很有用。您只需在服务模块中导出
服务
构造函数

--编辑--

在评论中回答您的问题

无论您使用
模块导出什么,导出
都是
需要的
将返回给您的。如果导出函数,则返回函数:

//greet.js
module.exports = function(){
  return "Hello World";
};
然后你可以做:

var greet = require('./greet');
console.log(greet()); //yields 'Hello World'
var greeter = require('./greeter');
console.log(greeter.greet()); //yields 'Hello World'
如果导出对象,则返回对象实例:

//greeter.js
module.exports = {
    greet: function(){
        return 'Hello World';
    }
};
然后你可以做:

var greet = require('./greet');
console.log(greet()); //yields 'Hello World'
var greeter = require('./greeter');
console.log(greeter.greet()); //yields 'Hello World'
逻辑上,如果你导出一个构造函数,那么你会得到一个构造函数,这是我最初的例子

所以,如果你使用你的方法,你会得到一个函数,而不是构造函数,当然,除非你导出的函数实际上是你的构造函数。例如:

//greeter.js
module.exports = function Greeter(){
    this.greet = function(){
        return 'Hello World';
    };
};
然后你可以做我最初做的事情:

var Greeter = require('./Greeter');
var greeter = new Greeter();
console.log(greeter.greet());

嗯,应该有用。这是您文件的唯一内容吗?正如Joachim所说,您的语法看起来是正确的。您是否会在myservice.js的后面覆盖它?或者用MyService做些别的事情?看看中的“square”示例,试着找出您的代码可能存在的任何差异。谢谢Edwin。无论如何,我可以将它全部包装在一个模块中。exports=function(){}就像我上面的例子一样?Edwin:当我需要模块时;分配给它的变量实例返回为未定义。模块确实运行并可以调试它,但返回的值未使用上述greeter.js语法定义。你能验证语法吗?没关系,所有函数都是构造函数。OP(返回对象的函数)提供的工厂不关心是否使用
new
调用它。@Chev我在分享之前测试了所有示例。