Javascript / Express-导出所有方法与导出包含方法的类

时间:2018-12-18 20:21:15

标签: javascript node.js express

我在遇到这个被忽视的问题(例如它们之间有何不同?)时感到困惑?

Module.exports = {
  search_companies(req, res) {
    //some ops
  },

  get_details(req, res) {
    //some ops
  }
};

vs

class MainContrller {

  search_companies(req, res) {
      //some ops
    },

    get_details(req, res) {
      //some ops
    }
}

module.exports.MainController = MainController;

2 个答案:

答案 0 :(得分:0)

第一个导出具有功能search_companiesget_details的对象。因此,您可以调用这些函数对导出的对象起作用。

第二个导出具有功能MainControllersearch_companies的类get_details。在这里,您必须创建一个MainController实例才能在该实例上调用这两个函数。

如果整个项目中只需要该对象的一个​​实例,则使用第一种语法。它就像单例或静态,但无需为其定义实际的类。

如果需要MainController的多个不同实例,则使用第二个。

答案 1 :(得分:0)

应该按以下方式使用模块:

const { search_companies } = require('...');

应该像这样使用类:

const { MainController } = require('...');
const { search_companies } = new MainController();

MainController在这种情况下是一种不好的做法,因为它模仿了其他语言中类的用法,而没有考虑到JavaScript的细节。

如果忽略MainController实例,

this不会从类中受益,并且在将类重构为单独的功能时不会失去功能。

在JavaScript中类不是美化的名称空间;已经有一些模块用于此目的。如果需要名称空间而无需类实例,则可以将模块用作经验法则​​。