例如,假设您使用温斯顿进行日志记录,而不是让每个中间件都要求记录器,您可能有一个(上游)中间件将其添加到request对象中,这样其他中间件就可以这样做:
request.logger.log(...)这是好的还是坏的做法?
发布于 2014-05-14 11:13:58
在我看来,这样做并不是很好的做法。
首先,您将req对象与您希望还不存在并在将来不存在的东西混在一起。如果他们这样做了,你就会破坏一些东西,甚至可能没有注意到。更糟糕的是,当您现在使用的属性名称在您使用的任何中间件的未来版本中使用时,您就会遇到问题。当然,您不会每次都检查这一点,因为每一个小的更新。
然后介绍了中间件模块之间的依赖关系。但是这些依赖项不是显式的,它们是隐式的:只有在中间件B在中间件A之后运行时,它才能工作,但这在代码中是没有表达的。如果您更改了订单,您可能只会得到一个小的有帮助的undefined is not a function错误。
这是我认为这是一个糟糕做法的两个主要问题。当然,没有例外的规则,但如果你要求一个经验法则,我会尽量避免这一点。
顺便说一下,当您查看将Express 3.x迁移到4.x指南时,您可以阅读以下段落:
全局连接修补节点的原型。这被认为是不好的行为,并已删除在连接3。
由于这显式地引用了res对象,这也很好地回答了您不应该这样做,这样做应该被认为是错误的做法。
这基本上和我在这里写的一样。
希望这能有所帮助。
https://stackoverflow.com/questions/22594561
复制相似问题