导出对象与函数NodeJs

导出对象{}与导出function

我正在开发一个练习应用程序,我遇到了这个问题什么时候需要导出一个对象而不是一个函数类?

场景示例:

我正在使用对象样式构build一个简单的authenticationmodule

 // file auth.js module.exports = { login: function() { // code login }, logout: function() { // code logout }, register: function() { // code register } } 

在这里我使用匿名函数样式

 module.exports = function() { return { login: function() { // code login }, logout: function() { // code logout }, register: function() { // code register } } } 

要求

当我想要这个模块,我只是做:

 var auth = require('auth'); auth.login(); // trigger login function via object auth().login() // trigger login function via function 

这将与两种方法一起工作,但我很困惑,select哪个更合适,为什么。

问题

  • 你如何理解你的devise中的一个模块,什么时候适用于导出,一个对象匿名函数命名函数到Instantiate

  • 当需要这些函数对象时,哪些是不同的以及require方法的行为?

你如何理解你的devise中的一个模块,什么时候适用于导出,一个对象,匿名函数,命名函数到Instantiate?

  • 真正的极简主义者的目的是出口一个单一的function,如果这样就够了。 这是基于你的模块的范围,并假设一个小而重点的目的。
  • 当需要一组函数来获得一组有意义的function时,导出相关函数的对象。 例如,一个tempConversion模块可能同时具有cToFfToC函数。
  • 如果你在做OO,导出构造函数就没问题。
  • 返回实际有效负载(可以是对象或函数)的闭包函数对configuration选项很有用。 例如var tip = require('computeTip')(18); 可以存储18封闭,并返回一个函数,计算18%时提示与一个号码。

这里有一条经验法则 :如果只输出一个命名函数require('average').average(listOfNumbers) ,它是多余的,所以直接导出average函数使其更加简洁。 如果您想要公开多个函数,请使用属性为函数的对象。

当需要这些函数或对象时,哪些是不同的以及require方法的行为?

  • 没有区别。 require有一个适应这些技术的单一行为。

在你的例子中你实际上返回一个对象而不是一个函数类。 在第二种情况下,通过执行该函数来获取对象。 为了使用这个函数作为一个类,你应该返回一个作为构造函数的函数,然后用new运算符实例化。

这就是说,如果我认为我的模块是一个单例,那么我会更喜欢一个类的对象,对于包含它的每个文件都是通用的。 一个例子是一个模块,实现了我的数据库的公共访问层。

如果你想多次实例化一个类,那么这个类更有意义。 一个例子就是你的数据库模式的一个特定的模型类,就像一个User类。