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

标签 javascript node.js

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

相关文章:

node.js - npm 安装时 Google polymer 入门套件发出警告

javascript - Node.JS 上的服务器发送事件

javascript - 从 Xul 应用程序打开扩展管理器时出错

javascript - Odoo 搜索多个名称使用 OR 运算符

javascript - AngularJS 评估函数中的字符串以调用 json 列表上的属性

javascript - 错误TS2339 : Property 'default' does not exist on type 'Special[]'

Javascript 文档粘贴事件 - 在 FireFox 中获取粘贴的文本

javascript - 我在日志文件中存储键值对象时遇到了一些麻烦

javascript - Socket.io 从 HTTP API Controller 触发事件

javascript - Firebase:TypeError:无法读取未定义的属性(读取 'getIdToken')