Node.js已经成为许多从事网络应用的开发者的首选运行环境。Node.js是为运行用世界上最流行的编程语言之一的JavaScript编写的代码而构建的,它使大量的开发者社区能够构建服务器端应用程序。
Node.js通过JavaScript库支持代码重用性,但选择最好的库可能是令人生畏的。有用的库可以加速开发时间,并对你的网络应用有广泛的好处,包括更快的加载时间和减少应用包的大小。
在选择一个库时,你要考虑应用程序的复杂性、库背后的社区、更新的频率,以及它的文档质量。
Node.js中的库是使用Node.js包管理器npm管理的,它可以帮助安装许多开源库。我们已经确定了13个Node.js的基本库,这些库使网络开发者的生活更加轻松。
什么是Node.js?
Node.js是一个开源的、用于JavaScript代码的服务器端运行环境。它有一个异步架构和跨平台兼容性,使其成为网络开发的流行基础。
Node.js使用事件驱动和非阻塞式I/O,这使得它在处理大量数据的实时分布式应用中非常高效。
什么是Node.js库?
库,或模块,是预先写好的代码,抽象出常用的任务。你可以使用库来加快编码过程,促进代码的可重用性,帮助保持你的工作 “DRY”(不要重复自己)。
与框架相比,库包含完整的功能,你可以在任何开发阶段将其纳入一个项目。另一方面,框架通常为整个应用程序提供一个骨架,通常对其构建方式有重大影响。
主流Node.js库
让我们看看这些Node.js库中的13个,并探讨它们的优势。
- Sequelize
- CORS
- Nodemailer
- Passport
- Async
- Winston
- Mongoose
- Socket.IO
- Lodash
- Axios
- Puppeteer
- Multer
- Dotenv
1. Sequelize
Sequelize是一个基于承诺的Node.js对象关系映射器(ORM)工具,帮助开发者更容易地与关系型数据库合作。它支持诸如PostgreSQL、MySQL、MariaDB、SQLite等数据库。
使用JavaScript对象,Sequelize对数据库表的结构进行建模,并连接到所需的关系数据库以查询和转换数据。然后它解析并将检索到的数据作为一个JavaScript对象返回。
Sequelize logo
Sequelize库的特点和优势
- 连接到数据库并执行操作,无需编写原始SQL查询
- 减少SQL注入漏洞和SQL注入攻击
- 与GraphQL兼容
2. CORS
CORS是一个Node.js包,用于提供跨源资源共享(CORS),作为借鉴Connect/Express的中间件。
CORS包在Node.js路由中间件周围形成一个封装,使应用程序能够访问来自其自身以外的域的资源。它吸收了多个参数来配置跨源选项,包括原点、头文件等。
CORS代码(配置)的一个例子
CORS库的特点和优势
- 减少了在网络应用中启用CORS所需的代码量
- 允许你配置允许列出的域,让用户为选定的来源启用 CORS,同时阻止其他来源
- 提供无缝的错误处理,帮助开发人员分析来自可疑来源的安全威胁。
3. Nodemailer
Nodemailer使从Node.js服务器发送电子邮件更加容易。它使用一个依赖于简单邮件传输协议(SMTP)的传输对象,以及其他支持的传输方式。这个传输对象将 from
, to
, subject
, body
和其他参数作为输入来构建一个消息。
Nodemailer的标志
Nodemailer库的特点和优点
- 一个支持多种传输方式的单一模块,包括SMTP、亚马逊简单邮件服务(SES)、Sendmail和流。
- 支持文本和HTML内容作为电子邮件的主体
- 配置递送状态通知,并支持批量邮件递送
4. Passport
Passport是一个用于Node.js的模块化认证中间件。Passport具有500多种认证策略,包括谷歌、Facebook、Twitter以及其他定制和单点登录(SSO)供应商。策略包括正常的用户名和密码认证,使用OAuth的社交媒体网站的委托认证,以及用于联合认证的OpenID。
Passport logo
Passport库的特点和优点
- 用最少的代码为社交媒体网站内置SSO认证
- 在多个会话中配置持久的登录信息
- 通过使用Express和Connect中间件的无障碍配置,避免了在应用程序中安装新的路由
5. Async
Async是一个强大的Node.js工具模块,它通过与JavaScript “async” 或回调接受函数合作,帮助开发者处理异步JavaScript。如果你向Async模块传递一个回调数组,它就会执行并包装这些回调以返回一个承诺。
Async的标志
Async库的特点和优点
- 提供了大约70个实用函数,可以轻松地开发异步控制流
- 提供 “parallel” 函数,用于处理对主机的多个请求(否则需要大量的代码来实现)。
- 有助于消除JavaScript中嵌套的 “callback Hell”。
6. Winston
Winston是一个Node.js日志库,支持多种传输的通用日志。这些运输工具根据你的应用程序的需求来存储和配置日志。
除了默认的, createLogger
函数可以帮助你创建自定义的日志器,使用可用的传输选项,如控制台、文件和数据库。自定义日志器也可以与自定义传输器一起使用。
一个Winston代码示例
Winston库的特点和优点
- 通过单一的配置文件集中控制日志记录
- 允许可定制的日志格式,如以JSON格式或文本形式存储日志时
- 提供可定制的日志级别,你可以根据你的应用需求进行配置
7. Mongoose
Mongoose是一个基于Node.js的MongoDB对象建模工具,也被称为对象数据建模(ODM)库,它提供了各种功能,如挂钩、模型验证、连接和查询。
Mongoose为应用数据提供了一个基于模式的解决方案,在应用层强制执行一个单一的模式,在MongoDB中形成一个集合。每个模式都与Mongoose模型相关联,它允许你对MongoDB集合运行查询,比如获取、更新和删除数据。
Mongoose的标志
Mongoose库的特点和优点
- 提供轻松的查询抽象,允许开发人员为MongoDB事务编写更少的代码
- 内置数据验证,用于定义什么样的数据可以在数据库中被添加或更新的规则
- 为MongoDB集合实施预定义结构,为开发者提供一个模板式的MongoDB实例
- 允许查询链,以处理多个查询
8. Socket.IO
Socket.IO是一个Node.js通信库,在客户端浏览器和服务器之间建立实时、双向、基于事件的通信。
它使用Engine.IO在服务器和客户端之间建立一个底层连接,通过HTTP长轮询使用数字握手。一旦它建立了连接,客户端和服务器的通信就通过TCP实时进行。
Sockets.IO的标志
Sockets.IO库的特点和优点
- 使用WebSocket提供了一个低开销的通信渠道,并允许将HTTP长轮询作为一个后备选项
- 可扩展,允许服务器轻松向多个客户端广播事件
- 支持通过命名空间进行复用,从而最大限度地减少使用的TCP连接数,并减少服务器上的套接字端口
9. Lodash
Lodash是一个实用程序库,可以帮助开发者编写简明和可维护的JavaScript代码。它有200多个实用功能来简化日常编程任务,包括类型检查、简单的数学运算等等。
Lodash的标志
Lodash库的特点和优点
- 在polyfills的帮助下,保持了跨浏览器的兼容性
- 在处理对象的数组时提供内置的解决方案,实现
filter
,find
, 和flatMap
等操作 - 帮助开发者避免重复,并帮助他们保持干净的代码
10. Axios
Axios是一个基于承诺的HTTP客户端,用于浏览器和Node.js。它还根据需要处理来自浏览器或Node.js的请求和响应数据的转换。
Axios是同构的,这意味着它可以用相同的代码库在服务器和客户端运行。对于HTTP通信,Axios在服务器端使用本地HTTP模块,在客户端使用XMLHttpRequest。
Axios的标志
Axios库的特点和优势
- 为
GET
,PUT
,POST
, 和DELETE
等常见的HTTP数据类型提供内置的API函数 - 在互联网上进行HTTP请求时,通过跨站请求伪造(CSRF)保护提供更多的安全性
- 通过自动JSON数据转换,轻松地将响应数据转换为JSON。
11. Puppeteer
Puppeteer是一个Node.js库,通过DevTools协议提供一个高级API来控制Chrome/Chromium,从而实现Chrome的自动化。它可以自动进行前端测试,包括请求处理测试、定位和比较UI元素、性能测试等。
开发人员可以将Puppeteer包导入他们的代码中,创建一个Chromium实例。然后,该实例可以通过与浏览器引擎进行通信来实现自动化测试。
Puppeteer的标志
Puppeteer库的特点和优点
- 零设置,易于配置,不需要额外的驱动程序
- 抓取网站以生成预渲染的内容
- 与Jest和Mocha等流行的测试框架兼容
12. Multer
Multer是一个用于Node.js的中间件库。它写在HTML表单解析器busboy之上,处理多部分和多形式数据。
在初始化Multer实例后,它接收了一个 dest
对象作为其选项之一,以指定上传的文件将被存储在服务器上。Multer与上传请求一起发送一个 file
对象,然后由Multer API解析并发送至目标位置。
一个带有HTML表单标记的Multer代码的例子
Multer库的特点和优点
- 通过内置解析,使原始的HTTP请求数据更容易被存储。
- 让你指定文件的编码类型,这为上传的文件增加了一层安全性
- 过滤并可以限制文件类型和大小的上传选项
13. Dotenv
Dotenv是一个Node.js实用程序库,用于管理应用程序中的环境变量,并保护敏感的配置变量。Dotenv还帮助应用程序在存储环境变量时遵循twelve-factor应用方法。早期配置Dotenv库会自动将环境变量从.env注入到provess.env。
Dotenv的标志
Dotenv库的特点和优点
- 帮助你将秘密–如API密钥和登录凭证–从源代码中分离出来,并让每个开发人员创建一个.env文件供他们自己使用
- 由于其零依赖模块,不会对应用程序的大小产生影响
小结
Node.js有大量有用的库,但为你的项目选择一个最好的库可能很困难。我们在这里介绍的一些Node.js库可能是你下一个应用程序的 “必备品”。
例如,如果你主要与MongoDB一起工作,使用Mongoose可以是一个救星。CORS可以帮助你从多个域传递内容,如果你需要在团队中分享代码–但不是秘密–Dotenv就会非常方便。
评论留言