我想在 Node 中将服务公开为一个模块。一旦需要,例如:
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: object is not a function
最佳答案
假设这是我的 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"
这对我有用。您所要做的就是在服务模块中导出您的 Service
构造函数。
--编辑--
在评论中解决您的问题。
无论您使用 module.exports
导出什么,require
都会返回给您。如果你导出一个函数,那么你会得到一个函数:
//greet.js
module.exports = function(){
return "Hello World";
};
然后你可以这样做:
var greet = require('./greet');
console.log(greet()); //yields 'Hello World'
如果你导出一个对象,你会得到一个对象实例:
//greeter.js
module.exports = {
greet: function(){
return '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());
关于javascript - node.js模块导出函数结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23980535/