Я давно хотел внести свой вклад в сообщество программистов, но на самом деле не нашел подходящего способа. Между работой на полную ставку, побочными проектами и просмотром 24 в первый раз я не участвовал в проекте с открытым исходным кодом, как я хотел, и решил вместо этого внести свой вклад в эту серию. Долгое время я использовал статьи с таких сайтов, как Medium, чтобы узнать обо всем и обо всем. Лучшие статьи, кажется, сосредоточены на одном или двух пунктах и дают глубокое погружение в полное понимание концепций. Пришло время поделиться своими знаниями, в частности, вытекающими из NodeJS (отсюда и название). Так…
Что, черт возьми, происходит с «Now You Node» и что это означает?
В основном я просто пытаюсь быть умным, но на самом деле я хочу предоставить читателям реальную ценность за 15 минут или меньше. Нет ничего хуже, чем пытаться учиться, пока писатель накапливает четыре или более концепции, а вы просто хотите выучить одну. Now You Node будет ориентироваться на одну концепцию для каждой статьи и следить за тем, чтобы вы могли перевести ее в разработку после прочтения.
Чтобы понять эту серию, вам потребуется базовое понимание javascript и NodeJS. Я расскажу о некоторых базовых в качестве напоминания, но эта серия не для людей, которые никогда не использовали эти инструменты!
А теперь перейдем к делу. Представляем первый модуль npm: Polka.
Полька
Как вы думаете, что он делает, когда вы слышите «польку» в качестве имени модуля npm? Конечно, мы слышали о танце, но как это соотносится с модулем npm? Если вы думаете, что это веб-сервер (а я не знаю, почему вы так думаете), то вы правы! Polka - это чрезвычайно минимальная, высокопроизводительная альтернатива Express.js *. Это дает вам минимум, необходимый для вашего http-сервера, и позволяет вам добавлять свои собственные начинки. Polka идеально подходит для небольших простых API-интерфейсов, но также может быть адаптирована для более сложных сценариев.
Для начала:
npm i polka
Совет: если вы используете npm ≥ 5, вам больше не нужно использовать параметр --save
, поскольку он установлен по умолчанию!
Если вы знакомы с Express.js, вы уже знаете, как использовать польку, но если вы создаете свой первый http-сервер с помощью NodeJS, вам не о чем беспокоиться. Начнем с очень простого случая.
const polka = require('polka'); const server = polka(); server.get('/', (req, res) => { res.end('Hello World'); }); server.listen(3000).then(() => { console.log('Server is running at https://localhost:3000'); });
Подожди, вот и все? Да! У нас есть простой сервер с одной конечной точкой, которая возвращает "Hello World". Что происходит, когда у нас есть такие параметры, как идентификатор пользователя?
server.get('/users/:id', (req, res) => { res.end('Your user id is: ' + req.params.id); });
Отлично, но что, если мне нужно аутентифицировать пользователей, прежде чем им будет разрешен доступ к информации… Войдите в промежуточное ПО! Промежуточное ПО позволяет нам выполнять задачи по запросу в гарантированном порядке. Вам необходимо зарегистрировать промежуточное ПО перед маршрутами. Итак, над вашим «/ users /: id» введите:
server.use((req, res, next) => { const token = req.headers['authorization']; const isValid = someFunctionToValidateToken(token); if(!isValid) { next(new Error('Invalid token!')); } next(); });
Функции промежуточного программного обеспечения имеют функцию next
, которая сообщает польке, следует ли продолжать, или вернуть ошибку в конечную точку. Но что, если у нас есть общедоступные конечные точки и безопасные конечные точки? Мы можем извлечь функцию промежуточного программного обеспечения для повторного использования:
authenticate = (req, res, next) => { const token = req.headers['authorization']; const isValid = someFunctionToValidateToken(token); if(!isValid) { next(new Error('Invalid token!')); } next(); }; server.use(authenicate); // every request will run the function
Большой! А теперь давайте поработаем и используем аутентификацию для определенных конечных точек. Есть два способа сделать это, давайте покажем оба. Во-первых, вы можете сопоставить с шаблоном или, во-вторых, вы можете поместить промежуточное ПО прямо в обработчик запросов.
// Pattern matching, match every POST request server.post('*', (req, res, next) => { const token = req.headers['authorization']; const isValid = someFunctionToValidateToken(token); if(!isValid) { next(new Error('Invalid token!')); } next(); }); // Request Handlers server.get('/users/:id', authenticate, (req, res) => { res.end('Your user id is: ' + req.params.id); });
Вы можете видеть, что во втором случае для обработчика запросов мы просто добавляем нашу authenticate
функцию прямо в последовательность выполняемых обработчиков. Если бы мы хотели, у нас могло бы выполняться 5 функций перед нашим обработчиком!
server.get('/users/:id', authenticate, doSomething, doSomethingElse, doOneMoreThing, (req, res) => { res.end('Your user id is: ' + req.params.id); });
Это позволяет нам повторно использовать функции там, где это необходимо. Довольно крутая штука!
В заключение, полька позволяет нам также внедрять другое промежуточное ПО, которое будет использоваться на нашем веб-сервере. Например, если вам нужно, чтобы запросы были кросс-происхождения, мы можем добавить cors
, который является еще одним популярным модулем для добавления соответствующих заголовков к запросам. Это очень просто:
const cors = require('cors'); server.use(cors());
На странице польки на github можно найти гораздо больше, включая тесты. Если вы ищете быстрый, минималистичный и простой в освоении способ создания API, я определенно рекомендую polka в качестве хорошей отправной точки. Надеюсь, это даст вам хороший обзор польки и позволит вам сразу перейти к разработке.
Если у вас есть предложения по модулям или концепциям, дайте мне знать! Моя цель - публиковать постоянный поток информации, чтобы вы все время учились. Даже если у вас сейчас нет варианта использования модуля, неплохо было бы узнать что-то новое.
Заявление об ограничении ответственности: никакие организации не платят мне за продвижение какой-либо темы, описанной в этой статье.