14 самых популярных Node.js-библиотек в 2020 году

от автора

Доброго времени суток, друзья!

Представляю Вашему вниманию перевод статьи «14 Most Useful NodeJS Libraries in 2020».

В данной статье автор делится своими находками среди многочисленных пакетов Nodejs.

Express

Быстрый, гибкий, минималистичный, легкий в изучении фреймворк для веб-разработки.

Отлично подходит для

  • разработки приложений с использованием стека MEAN (MongoDB, Express, Angular, Node) или MERN (React вместо Angular)
  • легкой обработки различных типов запросов, таких как GET, PUT, POST и DELETE
  • быстрого развертывания одностраничных, многостраничных и гибридных приложений

Количество скачиваний за неделю

11 млн

Альтернативы

Koa, Hapi, Meteor

Cheerio

Предназначен для обработки («парсинга») разметки, например, HTML, предоставляет интерфейс для манипулирования («траверса») конечной структурой данных.

	const cheerio = require('cheerio') 	const $ = cheerio.load('<ul id="fruits">...</ul>') 

Отлично подходит для

  • создания веб-сканеров («скребков»)
  • легкий, интуитивно понятный синтаксис и инструментарий

Еженедельные загрузки

4.2 млн

Альтернативы

jsdom, puppeteer

Nodemailer

Предназначен для отправки электронных сообщений.

	const nodemailer = require('nodemailer')  	const testAccount = await nodemailer.createTestAccount()  	const transporter = nodemailer.createTransport({ 		host: 'smtp.ethereal.email', 		port: 587, 		secure: false, 		auth: { 			user: testAccount.user, 			pass: testAccount.pass 		} 	})  	const info = await transporter.sendMail({ 		from: '"John Smith" <smith@example.com>', 		to: 'foo@example.com, bar@example.com', 		subject: 'hello', 		text: 'hello crazy world', 		html: '<strong>hello crazy world</strong>' 	}) 

Отлично подходит для

  • отправки сообщений по протоколу SMTP

Еженедельные загрузки

980 тыс.

Альтернативы

sendmail, emailjs

Socket.io

Предназначен для установки двустороннего основанного на событиях соединения в режиме реального времени.

	const server = require('http').createServer() 	const io = require('socket.io')(server) 	io.on('connection', client => { 		client.on('event', data => { ... }) 		client.on('disconnect', () => { ... }) 	}) 	server.listen(3000) 

Отлично подходит для

  • реализации «живой» аналитики, потока бинарных данных, обмена сообщениями, совместной работы с документами

Еженедельные загрузки

3 млн

Альтернативы

pusher, websockets

Faker

Предназначен для получения фейковой информации в браузере и «ноде».

	const faker = require('faker')  	const randomName = faker.name.findName() 	const randomEmail = faker.internet.email() 	const randomCard = faker.helpers.createCard() // произвольная карточка с контактными данными 

Отлично подходит для

  • тестирование фронтенда в части работы с данными до завершения разработки бэкенда
  • большое количество методов, включая получение произвольного адреса, названия компании, базы данных, изображения, имени, фамилии и т.д.

Еженедельные загрузки

1.4 млн

Альтернативы

casual

Morgan

Представляет собой промежуточное ПО для регистрации запросов.

	morgan 	(':method:url :status :res[content-length] - :response-time ms')  	---  	const express = require('express')  	const morgan = require('morgan')  	const app = express()  	app.use(morgan('combined'))  	app.get('/', (req, res) => res.send('hello crazy world')) 

Отлично подходит для

  • записи запросов в консоль, файл, базу данных
  • отладки и «логгирования»

Еженедельные загрузки

2 млн

Http-errors

Предназначен для создания конкретных ошибок в целях тестирования приложений на Express, Koa, Connect и др.

	app.use((req, res, next) => { 		if(!req.user) return next(createError('401', 'Пожалуйста, авторизуйтесь для получения доступа.')) 		next() 	}) 

Отлично подходит для

  • эмуляции ошибок
  • доступно большое количество свойств объекта Error

	expose 	headers 	message 	status 	statusCode 

Еженедельные загрузки

27 млн

Body-parser

Представляет собой промежуточное ПО для разбора (парсинга) данных.

Парсит входящие запросы (req.body) перед их обработкой.

	const express = require('express') 	const bodyParser = require('body-parser')  	const app = express()  	// парсим application/x-www-form-urlencoded 	app.use(bodyParser.urlencoded({ extended: false }))  	// парсим application/json 	app.use(bodyParser.json()) 

Отлично подходит для

  • интерпретации тел запросов
  • содержит множество полезных функций (inflate, type, verify и проч.)

Еженедельные загрузки

13 млн

Sequelize

Представляет собой основанную на промисах технологию для объектно-реляционного отображения Postgres, MySQL, MariaDB, SQLite и Microsoft SQL Server.

Поддерживает безопасные (надежные) транзакции, обмен данными, энергичную и отложенную загрузку, репликацию данных и т.д.

	const sequelize = new Sequelize( 		'database', 'username', 'password', { 			host: 'localhost', 			dialect: /* один из 'mysql' | 'mariadb' | 'postgres' | 'mssql' */ 		} 	) 

Еженедельные загрузки

720 тыс.

Passport

Представляет собой совместимое с Express промежуточное ПО для аутентификации.

Основной задачей является аутентификация запросов с помощью набора плагинов — стратегий.

	passport.use(new LocalStrategy( 		(username, password, done) => { 			User.findOne({ username: username }, (err, user) => { 				if(err) { return done(err) }  				if(!user) { return done(null, false) }  				if(!user.verifyPassword(password)) { return done(null, false) }  				return done(null, user) 			}) 		} 	)) 

Отлично подходит для

  • аутентификации
  • интеграции с OAuth и OpenID (вход с помощью аккаунта Facebook, Twitter и т.д.)

Еженедельные загрузки

810 тыс.

Dotenv

Представляет собой модуль нулевой зависимости (точки) для загрузки переменных из файла .env в process.env.

Хранит переменные отдельно от кода.

	require('dotenv').config()  	const db = require('db')  	db.connect({ 		host: process.env.DB_HOST, 		username: process.env.DB_USER, 		password: process.env.DB_PASS 	})  	// файл .env 	DB_HOST = localhost 	DB_USER = root 	DB_PASS=12345 

Отлично подходит для

  • загрузки переменных среды, таких как AWS, sql имена пользователей, пароли, необходимые для развертывания приложений, соединения с другими инструментами
  • хранения настроек окружения отдельно от кода

Еженедельные загрузки

10 млн

Multer

Промежуточное ПО для обработки multipart/form-data — загрузки изображений.

	const express = require('express')  	const multer = require('multer')  	const upload = multer({ desc: 'uploads/' })  	const app = express()  	app.post('/profile', upload.single('avatar'), (req, res, next) => { 		// req.file - это файл 'avatar' 		// req.body содержит текстовые поля при наличии 	})  	app.post('/photos/upload', upload.array('photos', 12), (req, res, next) => { 		// req.files - это массив файлов 'photos' 		// req.body содержит текстовые поля при их наличии 	}) 

Отлично подходит для

  • быстрой загрузки файлов multipart/form-data

Еженедельные загрузки

92 тыс.

Axios

Основанный на промисах HTTP-клиент для браузера и node.

	const axios = require('axios')  	// делаем запрос пользователя по ID 	axios.get('/user?ID=12345') 		.then(response => { 			// код 			console.log(response) 		}).catch(error => { 			// обработка ошибок 			console.log(error) 		}).finally(() => { 			// всегда выполняется 		}) 

Отлично подходит для

  • отправки запросов из Node
  • отправки запросов из браузера
  • поддержка промисов

Еженедельные загрузки

9.6 млн

CORS

Промежуточное ПО для Connect/Express, предназначенное для определения правил политики общего происхождения.

	const express = require('express')  	const cors = require('cors')  	const app = express()  	app.use(cors())  	app.get('/products/:id', (req, res, next) => { 		res.json({ msg: 'Доступны запросы из любых источников!' }) 	})  	app.listen(80, () => { 		console.log('ok') 	}) 

Отлично подходит для

  • решения задач, связанных с CORS

Еженедельные загрузки

3.7 млн

Уважаемые читатели, а какими библиотеками пользуетесь вы?

Прим. пер.: я новичок в Node.js, поэтому приношу извинения за возможные ошибки и опечатки.

Благодарю за потраченное время. Надеюсь, оно было потрачено не зря.

ссылка на оригинал статьи https://habr.com/ru/post/506692/