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我在分享之前测试了所有示例。