https://habr.com/ru/post/506692/- Разработка веб-сайтов
- JavaScript
- Программирование
- Node.JS
Доброго времени суток, друзья!
Представляю Вашему вниманию перевод статьи
«14 Most Useful NodeJS Libraries in 2020».
В данной статье автор делится своими находками среди многочисленных пакетов Nodejs.
Быстрый, гибкий, минималистичный, легкий в изучении фреймворк для веб-разработки.
Отлично подходит для
- разработки приложений с использованием стека MEAN (MongoDB, Express, Angular, Node) или MERN (React вместо Angular)
- легкой обработки различных типов запросов, таких как GET, PUT, POST и DELETE
- быстрого развертывания одностраничных, многостраничных и гибридных приложений
Количество скачиваний за неделю
11 млн
Альтернативы
Koa, Hapi, Meteor
Предназначен для обработки («парсинга») разметки, например, HTML, предоставляет интерфейс для манипулирования («траверса») конечной структурой данных.
const cheerio = require('cheerio')
const $ = cheerio.load('<ul id="fruits">...</ul>')
Отлично подходит для
- создания веб-сканеров («скребков»)
- легкий, интуитивно понятный синтаксис и инструментарий
Еженедельные загрузки
4.2 млн
Альтернативы
jsdom, puppeteer
Предназначен для отправки электронных сообщений.
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
Предназначен для установки двустороннего основанного на событиях соединения в режиме реального времени.
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
Предназначен для получения фейковой информации в браузере и «ноде».
const faker = require('faker')
const randomName = faker.name.findName()
const randomEmail = faker.internet.email()
const randomCard = faker.helpers.createCard() // произвольная карточка с контактными данными
Отлично подходит для
- тестирование фронтенда в части работы с данными до завершения разработки бэкенда
- большое количество методов, включая получение произвольного адреса, названия компании, базы данных, изображения, имени, фамилии и т.д.
Еженедельные загрузки
1.4 млн
Альтернативы
casual
Представляет собой промежуточное ПО для регистрации запросов.
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 млн
Предназначен для создания конкретных ошибок в целях тестирования приложений на Express, Koa, Connect и др.
app.use((req, res, next) => {
if(!req.user) return next(createError('401', 'Пожалуйста, авторизуйтесь для получения доступа.'))
next()
})
Отлично подходит для
- эмуляции ошибок
- доступно большое количество свойств объекта Error
expose
headers
message
status
statusCode
Еженедельные загрузки
27 млн
Представляет собой промежуточное ПО для разбора (парсинга) данных.
Парсит входящие запросы (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 млн
Представляет собой основанную на промисах технологию для объектно-реляционного отображения Postgres, MySQL, MariaDB, SQLite и Microsoft SQL Server.
Поддерживает безопасные (надежные) транзакции, обмен данными, энергичную и отложенную загрузку, репликацию данных и т.д.
const sequelize = new Sequelize(
'database', 'username', 'password', {
host: 'localhost',
dialect: /* один из 'mysql' | 'mariadb' | 'postgres' | 'mssql' */
}
)
Еженедельные загрузки
720 тыс.
Представляет собой совместимое с 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 млн
Промежуточное ПО для обработки 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 тыс.
Основанный на промисах 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 млн
Промежуточное ПО для 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, поэтому приношу извинения за возможные ошибки и опечатки.
Благодарю за потраченное время. Надеюсь, оно было потрачено не зря.