gpt4 book ai didi

javascript - node.js模块导出函数结构

转载 作者:搜寻专家 更新时间:2023-10-31 23:13:12 25 4
gpt4 key购买 nike

我想在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com