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, поэтому приношу извинения за возможные ошибки и опечатки.

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

    Подробнее
    Реклама

    Комментарии 8

      +3

      Все из года в год кочует. Гораздо интересней было бы написать о топ библиотеках набирающих популярность или о топ новых библиотеках.

        +2

        К тому же кочует уже устаревшая, неактуальная информация.
        Я про пример Body-parser.
        У Express уже давно, с версии 4.16.0, вышедшей 5 октября 2017 года, есть встроенные .urlencoded() и .json(), основанные на body-parser. Нет никакого смысла его устанавливать вместе с express.


        Однако из года в год, из статьи в статью этот пример гуляет )

        0
        Я бы добавил:
        • Mongoose ODM (https://mongoosejs.com/)
        • nodemon (https://nodemon.io/)
        • webpack (https://webpack.js.org/)


          +2
          axios уже не модный, хипстеры давно используют got www.npmjs.com/package/got основная килер фича — ретраи, да и axios изначально был сделан для фронтендеров
            0
            Представляю какие бездумные ретраи к бекенд субд может устроить «разраб за еду»…
              +1

              Axios вообще глючная либа, прокси не работают, обмен переменных в интерсепторах сломали.

              0

              С распространением Докер, CI/CD и т. П. цифры загрузок всё меньше говорят о популярности и всё больше о количестве билдов.


              А React-scripts с 1,5 млн загрузок? И он точно не для браузера, он для ноды именно

                +1
                Прочитал название думал очередная статья от ru_vds
                А нет, не угадал )))

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое