本文翻译自 Node.js Power Tools: 13 Libraries Every Developer Should Know,作者:Pinjari Rehan, 略有删改。
Node.js被视为许多Web开发人员的理想运行时环境。它是世界上最流行的编程语言之一,Node.js提供了通过JavaScript库重用代码的能力,但是在项目中选择合适的库可能很困难。
有用的库可以缩短开发时间,并为您的Web应用程序提供几个优点,例如更快的加载时间和减少应用程序包的大小。在选择库时,要考虑应用程序的复杂性、支持库的社区、更新的频率以及文档的质量。
Node.js库通过Node.js包管理器npm进行维护,npm可以帮助安装各种开源库。下文选择了13个不错的Node.js库,它们使Web开发变得更简单,希望对你有帮助。
什么是Node.js?
Node.js是一个开源的服务器端运行时环境,用于JavaScript编程。它的异步特性和跨平台互操作性使其成为流行的Web开发基础。Node.js使用事件驱动和非阻塞I/O,使其在处理大量数据的实时分布式系统中非常高效。
什么是Node.js库?
库,有时称为模块,是预先编写的代码,封装了经常使用的操作。
你可以利用库来加速编码过程,并鼓励代码重用,这将有助于你保持你的工作“DRY”(不要重复自己)。
框架通常作为整个程序的骨架,与框架相反,库是完成的功能,可以在项目的任何开发阶段轻松使用。
推荐的13个Node.js库
让我们来看看这13个Node.js库,看看它们能提供什么功能让我们的Web开发更简单。
1. Sequelize
Sequelize是一个基于promise的Node.js对象关系映射器(ORM),它使开发人员更容易使用关系数据库。支持PostgreSQL,MySQL,MariaDB,SQLite和更多数据库。
Sequelize使用JavaScript对象对数据库表的结构进行建模,并连接到常用的关系数据库以查询和更改数据。它解析检索到的数据并将其作为JavaScript对象返回。
功能和优点
- 连接到数据库并执行操作,而无需编写原始SQL查询
- 减少SQL注入漏洞和SQL注入攻击
- 与GraphQL兼容
2. CORS
CORS是一个Node.js包,它使用Connect/Express作为中间件提供跨域资源共享(CORS)。
CORS包装了Node.js路由中间件,允许程序从其自身域以外的域访问资源。
它接受多个参数来指定跨域选项,如origin、header等。
功能和优点
- 减少了在Web应用程序中启用CORS所需的代码量。
- 允许您指定允许列出的域,并允许用户为某些来源启用CORS,同时禁止其他来源。
- 提供流畅的错误处理,帮助开发人员分析可疑来源的安全风险。
3. Nodemailer
Nodemailer简化了从Node.js服务器发送的电子邮件。
它使用一个传输对象,该对象基于简单邮件传输协议(SMTP)以及其他支持传输。创建消息时,此传输对象接受from、to、subject、body和其他参数作为输入。
功能和优点
- SMTP、Amazon Simple Email Service(SES)、Sendmail和Stream都由单个模块支持。
- 支持电子邮件正文中的文本和HTML
- 设置传递状态通知并允许批量电子邮件传递。
4. passport
Passport是一个模块化的Node.js身份验证中间件。
Passport支持超过500种身份验证方案,包括Google、Facebook、Twitter和其他自定义和单点登录(SSO)提供商。
普通用户名和密码登录、通过OAuth进行的社交网站委托身份验证以及用于联合身份验证的OpenID都是可选的。
功能和优点
- 使用最少的编码,为社交网站提供内置SSO身份验证
- 为多个会话设置永久登录信息。
- 通过使用Express和Connect中间件的无障碍配置,可以避免在应用程序中安装额外的路由。
5. Async
Async 是一个强大的 Node.js 实用工具模块,可帮助开发人员使用 JavaScript "async"或接受回调的方法来处理异步 JavaScript。
当您为Async模块提供一个回调数组时,它会运行并包装它们传递promise。
功能和优点
- 提供超过70种实用方法,可轻松开发异步控制流。
- 提供一种“并行”方法来处理对主机的大量请求(否则需要大量代码才能实现)。
- 帮助结束JavaScript中嵌套的“回调地狱”。
6. Winston
Winston是Node.js的日志包,允许在许多传输上进行通用日志记录。
这些传输器根据您的应用程序的要求存储和自定义日志。除了默认值外,
功能和优点
- 从单个配置文件控制日志记录。
- 允许您自定义日志格式,例如以JSON或文本格式保存日志。
- 提供可调整的日志记录级别,您可以根据应用程序的要求进行自定义。
7. Mongoose
Mongoose 是一款基于 Node.js 的 MongoDB 对象建模工具,通常被称为对象数据建模(ODM)库,它提供了诸如钩子、模型验证、连接和查询等功能。
Mongoose为应用程序数据提供了一个基于模式的解决方案,它在应用程序层强加了一个单一的模式,从而产生了一个MongoDB集合。
每个模式都与Mongoose模型耦合,该模型使您能够对MongoDB集合执行查询,例如获取,更新和删除数据。
功能和优点
- 提供简单的查询抽象,允许开发人员为MongoDB事务编写更少的代码。
- 内置的数据验证允许您定义可以在数据库中添加或更改的数据类型。
- 为MongoDB集合实现指定的结构,为开发人员提供MongoDB实例。
- 允许您通过将某些查询链接在一起来处理。
8. Socket.IO
Socket.IO是一个Node.js通信包,它允许客户端浏览器和服务器进行真实的实时、双向和基于事件的通信。
它通过HTTP长轮询使用数字握手在服务器和客户端之间建立低级连接。一旦连接建立,客户端和服务器之间的通信将通过TCP实时进行。
功能和优点
- 使用WebSocket提供低开销的通信通道,并将HTTP长轮询作为备用方案。
- 可扩展,允许服务器简单地将事件广播到众多客户端。
- 支持命名空间多路复用,这可以减少服务器上的TCP连接和套接字端口的数量。
9. Lodash
Lodash是一个JavaScript实用程序包,可帮助开发人员编写简单和可维护的代码。
它包括200多个实用函数,以帮助完成常见的编程任务,如类型检查,简单的数学运算等。
功能和优点
- Polyfill用于实现跨浏览器兼容性。
- 当处理对象数组时,它提供了内置的解决方案,如filter、search和flatMap。
- 帮助开发人员避免冗余并维护干净的代码。
10. Axios
Axios是一个基于Node.js和浏览器的基于Promise的HTTP客户端。
它还根据需要管理浏览器或Node.js请求和响应数据的转换。Axios是同构的,这意味着它可以使用相同的代码库在服务器和客户端上运行。
Axios在服务器端使用本机HTTP模块,在客户端使用XMLHttpRequest进行HTTP通信。
功能和优点
- 为典型的HTTP数据类型(如GET、PUT、POST和POST)提供API方法。
- 通过在Internet上执行HTTP查询时防止跨站点请求伪造(CSRF)来提高安全性。
- 自动JSON数据转换可以轻松地将响应数据转换为JSON。
11. puppeteer
Puppeteer是一个Node.js框架,它允许您通过DevTools协议提供用于控制Chrome/Chromium的高级API来自动化Chrome。
自动化前端测试,例如请求处理测试,识别和比较UI组件,以及性能测试等。开发人员可以通过将Puppeteer包导入他们的代码来构建Chromium实例。实例然后可以与浏览器引擎通信以完成自动化测试。
功能和优点
- 无需设置,配置简单,并且不需要任何额外的驱动程序。
- 抓取网站以生成预呈现的内容。
- 与Jest和Mocha等知名测试框架兼容
12. Multer
Multer 是一个 Node.js 中间件库。它基于 HTML 表单解析器 Busboy 构建,支持多部分和多形式数据。
初始化Multer实例后,它的一个参数是一个测试对象,它指定上传的文件将保存在服务器上的位置。Multer将文件对象与上载请求一起发送,Multer API将解析该文件对象并将其传输到目标站点。
功能和优点
- 通过内置的解析,它使原始HTTP请求数据更可用于存储。
- 允许您定义文件的编码类型,这为上传的文件提供了额外的保护。
- 过滤器,可以限制文件类型和大小上传的选择
13. Dotenv
Dotenv是一个Node.js实用程序模块,用于维护应用程序环境变量并保护关键配置数据。
Dotenv还帮助应用程序按照十二因素应用程序方法保存环境变量。在早期配置dotenv库时,
功能和优点
- 允许您将机密与源代码(如API密钥和登录凭据)隔离,并允许每个开发人员建立自己的.env文件。
- 由于它的零依赖模块,它不会增加程序的大小。
最后
Node.js 中有许多有用的库,但为您的项目选择一个理想的库可能很难。本文中讨论的一些Node.js库可能会成为您未来应用程序的“必备”。例如,如果你使用MongoDB做了很多工作,Mongoose可以成为你的救星。希望本文对你有帮助~
看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~
专注前端开发,分享前端相关技术干货,公众号:南城大前端(ID: nanchengfe)