在Express + NodeJS应用程序的控制器中使用ES6类或对象文字
有两件事我很困惑。
-
什么是使用任何ES6类或对象文字的优势。
-
我应该在哪里使用它们中的任何一个?
下面提到了一些我正在尝试的示例。 请让我知道什么时候使用特定的执行方式,什么时候不执行。
类例1:
// auth.js class Auth { login(req, res) {...} signup(req, res) {...} } module.exports = new Auth(); // index.js const auth = require('auth');
类例2:
// auth.js class Auth { login(req, res) {...} signup(req, res) {...} } module.exports = Auth; // index.js const Auth = require('auth'); const auth = new Auth();
对象文字示例:
// auth.js module.exports = { login: (req, res) => {...}, signup: (req, res) => {...} }; // index.js const auth = require('auth');
我从阅读他们的想法是:
类例1:
-
您不能创build超过1个对象。 因为一个模块只执行一次。 所以,在每一个导入,你会得到相同的对象。 一些类似于单身人士。 (如果我误解了,请在这里纠正)
-
您将无法访问类的静态方法,因为您只导出类的对象。
类例2:
- 如果你有一个只包含helper方法的类,而且这个对象没有任何状态,那么这个类的对象始终是没有意义的。 所以,在助手类的情况下,这不应该被使用。
对象文字示例:
-
你不能做inheritance。
-
同样的对象将被传递到每一个需求。 (纠正我,如果我在这里也是错误的)
请帮我理解这些概念,我错过了什么,我误解了什么,什么时候什么地方应该使用。 我会很感激你的帮助。
如果你认为我在某个地方犯了一个错误,请随意编辑这个问题。
类示例1:您不能创build多个对象。 因为一个模块只执行一次。 所以,在每一个导入,你会得到相同的对象。 一些类似于单身人士。
正确。 因此这是一个反模式。 不要使用它。 class
语法不能替代对象文字。
您将无法访问类的静态方法,因为您只导出类的对象。
理论上你可以做auth.constructor.…
但是这不好。
例子2:如果你有一个只包含helper方法的类,并且这个对象没有任何状态,那么这个类的对象始终是没有意义的。 所以,在助手类的情况下,这不应该被使用。
正确。 使用一个简单的对象文字,或者甚至更好:多个命名导出,而不是“实用对象”。
对象文字示例:您不能进行inheritance。
你仍然可以使用Object.create
来进行inheritance,或者寄生inheritance,或者其他任何东西。
同样的对象将被传递到每一个需求。
正确,但这不是一个缺点。 如果你的对象包含状态,你应该使用一个class
来代替。
如果你的类有一个构造函数,你可以从这个类中构build几个对象:
var Panier= require('./panier'); var panier1 = new Panier(13, 12, 25); var panier2 = new Panier(1, 32, 569);
当然,您的Panier将在位于同一目录中的Panier.js文件中定义:
module.exports = class Panier { constructor(code, qte, prix) { this.codeArticle = code; this.qteArticle = qte; this.prixArticle = prix; } getCode() { return this.codeArticle; } getQte() { return this.qteArticle; } getPrix() { return this.prixArticle; } }
- nodeJS路由所有请求
- 在NodeJS / Express中使用POST方法从URL中获取参数
- 我如何monkeypatch快速查看查找?
- 节点,expression,在URL中处理“..”符号
- NodeJS:使用connect-flash的Express 3.0(根据护照本地策略中的build议),仍然发现req.flash的exception
- 从spawned命令pipe道输出时,如何返回一个错误?
- 无法使用gzippo设置Cache-Control标题
- 如何在NodeJS / Express的页面刷新之间保持node-dbox令牌
- 在发送响应之后,如何在Node / Express中结束当前的请求处理?