2019 年,19 种方法让自己成为更好的 Node.js 工程师

大发888扑克

阿里云开发者社区(更多内容请点击最下方“了解更多”查看原文!)

1. 使用类型(type)和模式(schema)。 TypeScript 是 2019 年的极佳选择

事实证明,以无类型方式编码可能会适得其反并且容易出错(参见研究)。这并不意味着您必须始终使用严格类型的语法,而是使用JSON模式(或Joi)来验证您的实体/模型以选择所需的原理图代码级别,并使用静态类型注释本机JS (请参阅Facebook流程)或继续使用强类型语法,如TypeScript。后者在2018年取得了显着的发展势头,似乎已成为Node领域的共识。如果您打算使用TypeScript,首先要问问自己,您的用法是否不仅仅是一种类型(打字)功能,否则使用接口和抽象类将带您进入一个您从未尝试过的示例。

2. 丰富你的 Linters

Linters是一个免费的午餐,通过5分钟的设置,您可以免费获得一个自动驱动程序来保护您的代码,并在您键入时监控重大问题的发现。与linting和化妆品相关的日子已经一去不复返了(没有分号!)。今天,Linters可以捕获严重的问题,例如错误抛出错误,丢失信息,Promise永不解决,以及您从未希望在代码中看到的其他痛点。

例如:

eslint-plugin-chai-expect可以在没有断言的情况下找到测试

eslint-plugin-promise可以找到未解决的Promise(你的代码永远不会继续)

eslint-plugin-security可以发现可能用于DOS攻击的正则表达式

3. 多一点 Java,少一点 Ruby - 加深你的架构知识

对Node.js生态系统的体系结构和设计知之甚少。每个人都在谈论微服务,但只讨论一些内部结构。大多数应用程序和示例都是MVC概念和Ruby的其他可疑模式。这有什么问题?例如,MVC是为服务内容构建的,并且是构建健壮后端的令人印象深刻的技术(Uncle Bob:“MVC是一种交付机制,而不是应用程序架构”)。您能真正描述模型中的整个业务逻辑,规则,数据访问,与控制器和其他微服务的通信吗?有关其他设计问题和可能的补救措施,请参阅以下示例。

我绝对不建议使用沉重的Java/Spring模式(我们有理由来到Node世界,不是吗?)),只需选择一些提供价值而不牺牲应用程序简单性的想法。

例如:

你读过我的《Node.js 最佳实践》第1部分 - 架构吗?

避免使用Express对象破坏您的业务逻辑,阅读有关域驱动设计的内容(请参阅本书的缩短版本)和六角形架构

将逻辑和数据访问代码混合在一个类中(Active Record模式 - 在使用Mongoose和Sequelize的开发人员中非常流行)很容易导致更难以测试的虚增对象。考虑使用数据映射器模式。

看看这个优秀的Node.js样板代码,它实现了域驱动设计和清洁架构

4. 规划如何利用异步 Hook 来获得更好的跟踪和上下文

单线程模型有一个主要缺点 - 请求丢失上下文:当它们流经多个文件并执行异步操作时,变量在其生命周期内不会被保留。为什么这很痛苦?例如,开发人员通常希望在每个日志中包含唯一标识符,以便稍后可以关联同一请求的所有日志 - 这在2018年不是很容易.2011带来了新亮点,异步挂钩就是其中之一(不是新的)但很快就会退出实验模式)。简而言之,这是一种在异步操作的开始和结束时随时注入自定义代码的机制。因此,您可以关联同一请求的所有代码并保留上下文。这为许多自定义程序包奠定了基础,这些程序包将Node的跟踪和上下文功能提升到了一个新的水平。

例如:

Cls-hooked允许在整个请求生命周期中共享变量和上下文

Jaeger客户端将可视化整个系统的请求流,甚至是微服务和服务器(开放式跟踪标准的一部分,需要专用服务器来记录所有活动)

了解异步挂钩机会以及如何对其进行编码。由