Как использовать Node.js REPL?
#nodejs_api
REPL расшифровывается как read–eval–print loop. Для запуска #nodejs в таком режиме достаточно выполнить
Работа с REPL очень похожа на работу с Console Panel в Google Chrome:
- пишешь JS код, его результат выводиться в консоль
- Cmd + K on MacOS / Ctrl + L on Windows – очистят консоль
Но есть и различия:
- Переменная _ хранит значение последней команды
- Есть команды начинающиеся с точки. Полный перечень .help
- Чтобы выйти из REPL используйте горячую клавишу Ctrl+D или Ctrl+C дважды
При желание можно написать свой REPL. Например для работы с API или базой данных, как это сделано для MongoDB. Подробней в документации.
#nodejs_api
REPL расшифровывается как read–eval–print loop. Для запуска #nodejs в таком режиме достаточно выполнить
node без указания файла.Работа с REPL очень похожа на работу с Console Panel в Google Chrome:
- пишешь JS код, его результат выводиться в консоль
- Cmd + K on MacOS / Ctrl + L on Windows – очистят консоль
Но есть и различия:
- Переменная _ хранит значение последней команды
- Есть команды начинающиеся с точки. Полный перечень .help
- Чтобы выйти из REPL используйте горячую клавишу Ctrl+D или Ctrl+C дважды
При желание можно написать свой REPL. Например для работы с API или базой данных, как это сделано для MongoDB. Подробней в документации.
Что нового в TypeScript 4.4?
#typescript
24 августа выйдет новая версии TypeScript. Вот краткий пересказ release notes:
– В catch блоках можно включить, что тип ошибки будет unknown, вместо any. Для этого добавлен флаг
– Добавлен флаг
– Добавлена поддержка Class static initialization blocks. Напомню, что при переходе на 16-й версию #nodejs будет поддержка уровне V8, т.е. можно будет использовать и в JS-base проектах.
– Улучшение работы с Index Signatures. До этого это могли быть только number и string. В новой версии добавлены Symbol и template string, а так же разрешены union.
– традиционные изменения в lib.d.ts, который используется по умолчанию, если не указаны lib. Эти изменения являются breaking change. Полный перечень. Если вы используете lib.d.ts в своем проекте, то самое время прочитать Как правильно настроить TypeScript в Node.js проекте?
– улучшена скорость сборки и интеграция с Visual Studio
#typescript
24 августа выйдет новая версии TypeScript. Вот краткий пересказ release notes:
– В catch блоках можно включить, что тип ошибки будет unknown, вместо any. Для этого добавлен флаг
useUnknownInCatchVariables, который по умолчанию включен с strict флагом. При переходе потребует изменить часть кодовой базы.– Добавлен флаг
--exactOptionalPropertyTypes, который запрещает для опциональных полей ставить undefined.– Добавлена поддержка Class static initialization blocks. Напомню, что при переходе на 16-й версию #nodejs будет поддержка уровне V8, т.е. можно будет использовать и в JS-base проектах.
– Улучшение работы с Index Signatures. До этого это могли быть только number и string. В новой версии добавлены Symbol и template string, а так же разрешены union.
– традиционные изменения в lib.d.ts, который используется по умолчанию, если не указаны lib. Эти изменения являются breaking change. Полный перечень. Если вы используете lib.d.ts в своем проекте, то самое время прочитать Как правильно настроить TypeScript в Node.js проекте?
– улучшена скорость сборки и интеграция с Visual Studio
Microsoft News
Announcing TypeScript 4.4 RC
Today we’re excited to announce our Release Candidate (RC) of TypeScript 4.4! Between now and the stable release of TypeScript 4.4, we expect no further changes apart from critical bug fixes. To get started using the RC, you can get it through NuGet,
30 seconds of code – сборник код-снипетов
#list #code_pattern
В начале лета я делился ссылкой на 1loc.dev. В комментариях была ссылка на аналогичный ресурс – 30 seconds of code. Примеры кода чуть длинней, но суть та же самая. Есть раздел отдельно по #nodejs сниппетам.
#list #code_pattern
В начале лета я делился ссылкой на 1loc.dev. В комментариях была ссылка на аналогичный ресурс – 30 seconds of code. Примеры кода чуть длинней, но суть та же самая. Есть раздел отдельно по #nodejs сниппетам.
www.30secondsofcode.org
30 seconds of code
Browse 692 coding articles to level up your coding skills on 30 seconds of code.
Почему нужно избегать магии?
#code_pattern
Там где исчезает понимание техника превращается в магию. Программистам следует этого избегать.
Avoid magic strings
Выглядит данная магия так:
Поддерживать и читать этот код сложно. Вынесение таких строк как Alice в отдельный файл или объект с константами обычная практика в JS. В TypeScript для этих целей используется string base enum.
Avoid magic numbers
Аналогичная проблема может быть с числами.
Решение аналогично. Перенос в константы. Улучшение читабельности и поддержки. 16 лет как пороговое значение будет разным в разных доменах.
Для автоматизации используйте eslint, там есть правило no-magic-numbers.
#code_pattern
Там где исчезает понимание техника превращается в магию. Программистам следует этого избегать.
Avoid magic strings
Выглядит данная магия так:
function isFriend(name) { if (name === 'Alice') return true; ... }Поддерживать и читать этот код сложно. Вынесение таких строк как Alice в отдельный файл или объект с константами обычная практика в JS. В TypeScript для этих целей используется string base enum.
Avoid magic numbers
Аналогичная проблема может быть с числами.
function isAdult(user) { return user.age >= 16; }Решение аналогично. Перенос в константы. Улучшение читабельности и поддержки. 16 лет как пороговое значение будет разным в разных доменах.
Для автоматизации используйте eslint, там есть правило no-magic-numbers.
Как правильно проектировать обновление в REST?
#rest #architecture
Вот, что следует учесть при проектирование endpoint-ов, которые будут обновлять состояние ресурсов:
❓Необходимо полное (PUT) или частичное обновление (PATCH)? Возможно, необходимы оба способа. В блоге Postman на этой неделе была статья What We Learned from 200,000 OpenAPI Files. Из нее можно увидеть, что в среднем PUT используется в 10 раз чаще чем PATCH.
❓Должен ли сервер проверять, что клиент использует последнюю версию ресурса? Если это необходимо, то необходимы заголовки Etag и If-Match. Если версия ресурса описанная Etag-м на клиенте и сервере отличается, то сервер выдаст ошибку с 412 кодом (Precondition Failed).
❓Что мы редактируем, сущность или коллекцию сущностей? Для редактирования отдельной сущности (
#rest #architecture
Вот, что следует учесть при проектирование endpoint-ов, которые будут обновлять состояние ресурсов:
❓Необходимо полное (PUT) или частичное обновление (PATCH)? Возможно, необходимы оба способа. В блоге Postman на этой неделе была статья What We Learned from 200,000 OpenAPI Files. Из нее можно увидеть, что в среднем PUT используется в 10 раз чаще чем PATCH.
❓Должен ли сервер проверять, что клиент использует последнюю версию ресурса? Если это необходимо, то необходимы заголовки Etag и If-Match. Если версия ресурса описанная Etag-м на клиенте и сервере отличается, то сервер выдаст ошибку с 412 кодом (Precondition Failed).
❓Что мы редактируем, сущность или коллекцию сущностей? Для редактирования отдельной сущности (
/todos/:id) подойдут и PUT, и PATCH. Но при редактирование коллекции (/todos/) стоит использовать PATCH с body в формате JSON Patch.Делюсь крутой ссылкой с CTO meetup. https://www.progression.fyi
В ней собраны критерии кто есть синьор/мидл/whatever в разных компаниях.
В ней собраны критерии кто есть синьор/мидл/whatever в разных компаниях.
progression.fyi
A collection of open source frameworks for helping designers and engineers to grow at work
Context Aware Content Discovery: The Natural Evolution
#rest #worth_seeing
Идея сегодняшнего видео проанализировать как скрапинг контента меняется при работе с API по сравнению с файловыми серверами. Чтобы это сделать, команда из Assetnote собрала из открытых источников Open API Specs, проанализировала тысячи апи и их реализации. Компания занимаются безопасностью, поэтому они выкладывают свои инструменты в OpenSource.
Видео это фундаментальное отчет-исследование. Рекомендую посмотреть целиком особенно если вы занимаетесь парсингом.
Слайды
#rest #worth_seeing
Идея сегодняшнего видео проанализировать как скрапинг контента меняется при работе с API по сравнению с файловыми серверами. Чтобы это сделать, команда из Assetnote собрала из открытых источников Open API Specs, проанализировала тысячи апи и их реализации. Компания занимаются безопасностью, поэтому они выкладывают свои инструменты в OpenSource.
Видео это фундаментальное отчет-исследование. Рекомендую посмотреть целиком особенно если вы занимаетесь парсингом.
Слайды
YouTube
"Context Aware Content Discovery: The Natural Evolution"
Presented by Sean Yeoh, Patrick Mortensen, Michael Gianarakis, Shubham Shah
BSides Canberra 2021, 9-10 April
BSides Canberra 2021, 9-10 April
На август по voice chat был отпуск. В сентябре буду возвращать этот формат. Мне важно ваше мнение когда их проводить, чтобы вы могли послушать эфир, поучаствовать и задавать вопросы.
Как было – Четверг, вечер в 21:00 - 62
👍👍👍👍👍👍👍👍 45%
Morning coffee – Утро буднего дня с 8 до 10 - 11
👍👍 8%
Выходной день с 9 до 11 - 5
👍👍 4%
Все равно, если и слушаю то в записи - 57
👍👍👍👍👍👍👍 42%
Напишу в комментариях - 2
👍 1%
👥 137 человек уже проголосовало.
Как было – Четверг, вечер в 21:00 - 62
👍👍👍👍👍👍👍👍 45%
Morning coffee – Утро буднего дня с 8 до 10 - 11
👍👍 8%
Выходной день с 9 до 11 - 5
👍👍 4%
Все равно, если и слушаю то в записи - 57
👍👍👍👍👍👍👍 42%
Напишу в комментариях - 2
👍 1%
👥 137 человек уже проголосовало.
Complexity vs Incomprehensibility
#principles
Я рекомендую различать сложность, т.е. метрику количества элементов системы/кода/задачи и понятность, т.е. необходимые когнитивные усилия, чтобы понять систему/код/задачу. На английском это Complexity vs Incomprehensibility. Оба этих параметры определяют стоимость создания и поддержки кода. Но именно непонятность вносит большую часть.
Вещи, которые позволяют делать ваш код понятным:
- хороший нейминг
- абстракции и паттерны
- консистеная организация кода
- код ревью
- качественно поставленные задачи
Закончу своей же цитатой: "Все сложное — это состыкованное с друг другом простое. Поэтому делай просто и одинаково. А сложным оно станет само"
#principles
Я рекомендую различать сложность, т.е. метрику количества элементов системы/кода/задачи и понятность, т.е. необходимые когнитивные усилия, чтобы понять систему/код/задачу. На английском это Complexity vs Incomprehensibility. Оба этих параметры определяют стоимость создания и поддержки кода. Но именно непонятность вносит большую часть.
Вещи, которые позволяют делать ваш код понятным:
- хороший нейминг
- абстракции и паттерны
- консистеная организация кода
- код ревью
- качественно поставленные задачи
Закончу своей же цитатой: "Все сложное — это состыкованное с друг другом простое. Поэтому делай просто и одинаково. А сложным оно станет само"
#announcement #voice_chat
2 сентября в 21:00 поговорим о том, что такое Culture Fit.
Гость: Алексей Мигутский, Senior Software Development Engineer в Microsoft. Алексей поработал в аутсорсе в Беларуси и Украине, а затем переехал в Берлин и начал свой путь в продуктовых стартапах. Последние пять лет он работает в Microsoft (Microsoft To-Do и GitHub Projects & Issues). Алексей так же занимается коачингом разработчиков (официальный Early Career Advisor в Microsoft и свой проект mtdv.io)
Вопросы:
❓ Как проходит Culture Fit Interview?
❓ Как различается в культура в ентерпрайз и стартапах?
❓ Различие в Европе, СНГ и США
❓ Как и где происходит разделение на BE/FE/FullStack? Как происходит кооперация?
Ссылка для подключения: https://xn--r1a.website/node_recipes?voicechat
До встречи в эфире!
2 сентября в 21:00 поговорим о том, что такое Culture Fit.
Гость: Алексей Мигутский, Senior Software Development Engineer в Microsoft. Алексей поработал в аутсорсе в Беларуси и Украине, а затем переехал в Берлин и начал свой путь в продуктовых стартапах. Последние пять лет он работает в Microsoft (Microsoft To-Do и GitHub Projects & Issues). Алексей так же занимается коачингом разработчиков (официальный Early Career Advisor в Microsoft и свой проект mtdv.io)
Вопросы:
❓ Как проходит Culture Fit Interview?
❓ Как различается в культура в ентерпрайз и стартапах?
❓ Различие в Европе, СНГ и США
❓ Как и где происходит разделение на BE/FE/FullStack? Как происходит кооперация?
Ссылка для подключения: https://xn--r1a.website/node_recipes?voicechat
До встречи в эфире!
Где посмотреть лучшие практики по безопасности?
#security #list
Лучшие практики безопасности веб-проектов описаны в OWASP cheat sheets. OWASP расшифровывается как Open Web Application Security Project. Вот топ-5 для #nodejs разработчиков:
🔗 NodeJS security cheat sheet
🔗 REST Security Cheat Sheet
🔗 npm Security best practices
🔗 Node.js Docker Cheatsheet
🔗 Microservices Security Cheat Sheet
#security #list
Лучшие практики безопасности веб-проектов описаны в OWASP cheat sheets. OWASP расшифровывается как Open Web Application Security Project. Вот топ-5 для #nodejs разработчиков:
🔗 NodeJS security cheat sheet
🔗 REST Security Cheat Sheet
🔗 npm Security best practices
🔗 Node.js Docker Cheatsheet
🔗 Microservices Security Cheat Sheet
cheatsheetseries.owasp.org
Introduction - OWASP Cheat Sheet Series
Website with the collection of all the cheat sheets of the project.
Подборка node.recipes за август 2021
#monthly_list
Рецепты для #nodejs разработчиков:
➡️ Что такое Breaking Change в Web API?
➡️ Почем нынче Node.js разработчики?
➡️ Обзор Node.js v16: Префикс для Core modules
➡️ JavaScript Algorithms and Data Structures
➡️ Обзор сервиса RunKit
➡️ Обзор Node.js v16: Новые JavaScript конструкции
➡️ Где изучать Kubernetes
➡️ Обзор Node.js v16: Упрощение доступа к util.types
➡️ Как и зачем использовать AsyncLocalStorage?
➡️ Как автоматизировать 2FA?
➡️ Как подтянуть TypeScript?
➡️ Зачем нужен Symbol в JavaScript?
➡️ Как использовать Node.js REPL?
➡️ 30 seconds of code – сборник код-снипетов
➡️ Почему нужно избегать магии?
➡️ Как правильно проектировать обновление в REST?
➡️ Complexity vs Incomprehensibility
➡️ Что нового в TypeScript 4.4?
➡️ Где посмотреть лучшие практики по безопасности?
Доклады, которые стоит посмотреть:
👀 Real-time communication with WebRTC: Google I/O 2013
👀 Что такое Code With Me от JetBrains?
👀 Yoni Goldberg on Integration Tests with JavaScript
👀 Знай свой JIT: ближе к машине
👀 Build Better Workloads with the AWS Well-Architected Framework and Tool
👀 Context Aware Content Discovery: The Natural Evolution
Voice Chats:
На август был отпуск. В сентябре формат возвращается в то же время. Спасибо всем, кто принял участие в голосование.
#monthly_list
Рецепты для #nodejs разработчиков:
➡️ Что такое Breaking Change в Web API?
➡️ Почем нынче Node.js разработчики?
➡️ Обзор Node.js v16: Префикс для Core modules
➡️ JavaScript Algorithms and Data Structures
➡️ Обзор сервиса RunKit
➡️ Обзор Node.js v16: Новые JavaScript конструкции
➡️ Где изучать Kubernetes
➡️ Обзор Node.js v16: Упрощение доступа к util.types
➡️ Как и зачем использовать AsyncLocalStorage?
➡️ Как автоматизировать 2FA?
➡️ Как подтянуть TypeScript?
➡️ Зачем нужен Symbol в JavaScript?
➡️ Как использовать Node.js REPL?
➡️ 30 seconds of code – сборник код-снипетов
➡️ Почему нужно избегать магии?
➡️ Как правильно проектировать обновление в REST?
➡️ Complexity vs Incomprehensibility
➡️ Что нового в TypeScript 4.4?
➡️ Где посмотреть лучшие практики по безопасности?
Доклады, которые стоит посмотреть:
👀 Real-time communication with WebRTC: Google I/O 2013
👀 Что такое Code With Me от JetBrains?
👀 Yoni Goldberg on Integration Tests with JavaScript
👀 Знай свой JIT: ближе к машине
👀 Build Better Workloads with the AWS Well-Architected Framework and Tool
👀 Context Aware Content Discovery: The Natural Evolution
Voice Chats:
На август был отпуск. В сентябре формат возвращается в то же время. Спасибо всем, кто принял участие в голосование.
Forwarded from DOU #tech
Tech voice chat на тему «Cloud Development» проведемо цієї п'ятниці!
📌 3 вересня, о 18:00, за цим посиланням.
Про що поговоримо:
☁️ як хмарні технології вплинули на підходи розробки ПЗ;
☁️ порівняємо AWS vs MS Azure vs Google Cloud (наскільки це можливо 😉);
☁️ тренди і таке інше.
Також не соромтеся пропонувати власні теми для обговорення 👉 @dzzzvinka
Спікери (список може оновлюватися):
🗣 Нікіта Галкін, Cloud Architect at Formelife, автор @node_recipes, організатор GDG Cloud Kyiv
🗣 Антон Бойко, Senior Solution Architect в BoykoAnt.PRO, засновник Ukrainian Microsoft Azure Community, Microsoft Azure Technical Expert, Microsoft Azure MVP з 2014
🗣 Руслан Кусов, AWS Cloud COE Lead at SoftServe, APN Ambassador (AWS)
❗️Формат: 30-45 хвилин говорять лише спікери, потім — підключаємо до слова слухачів.
Статті та топіки на теми: cloud, AWS, Azure
Приєднаєтеся?
📌 3 вересня, о 18:00, за цим посиланням.
Про що поговоримо:
☁️ як хмарні технології вплинули на підходи розробки ПЗ;
☁️ порівняємо AWS vs MS Azure vs Google Cloud (наскільки це можливо 😉);
☁️ тренди і таке інше.
Також не соромтеся пропонувати власні теми для обговорення 👉 @dzzzvinka
Спікери (список може оновлюватися):
🗣 Нікіта Галкін, Cloud Architect at Formelife, автор @node_recipes, організатор GDG Cloud Kyiv
🗣 Антон Бойко, Senior Solution Architect в BoykoAnt.PRO, засновник Ukrainian Microsoft Azure Community, Microsoft Azure Technical Expert, Microsoft Azure MVP з 2014
🗣 Руслан Кусов, AWS Cloud COE Lead at SoftServe, APN Ambassador (AWS)
❗️Формат: 30-45 хвилин говорять лише спікери, потім — підключаємо до слова слухачів.
Статті та топіки на теми: cloud, AWS, Azure
Приєднаєтеся?
Audio
#voice_chat About Culture Fit.
Гость: Алексей Мигутский, Senior Software Development Engineer в Microsoft. Алексей поработал в аутсорсе в Беларуси и Украине, а затем переехал в Берлин и начал свой путь в продуктовых стартапах. Последние пять лет он работает в Microsoft (Microsoft To-Do и GitHub Projects & Issues). Алексей так же занимается коачингом разработчиков (официальный Early Career Advisor в Microsoft и свой проект mtdv.io)
Вопросы:
❓ Как проходит Culture Fit Interview?
❓ Как различается в культура в ентерпрайз и стартапах?
❓ Различие в Европе, СНГ и США
❓ Как и где происходит разделение на BE/FE/FullStack? Как происходит кооперация?
Подключайтесь послушать, задавайте свои вопросы в комментариях и в эфире.
Гость: Алексей Мигутский, Senior Software Development Engineer в Microsoft. Алексей поработал в аутсорсе в Беларуси и Украине, а затем переехал в Берлин и начал свой путь в продуктовых стартапах. Последние пять лет он работает в Microsoft (Microsoft To-Do и GitHub Projects & Issues). Алексей так же занимается коачингом разработчиков (официальный Early Career Advisor в Microsoft и свой проект mtdv.io)
Вопросы:
❓ Как проходит Culture Fit Interview?
❓ Как различается в культура в ентерпрайз и стартапах?
❓ Различие в Европе, СНГ и США
❓ Как и где происходит разделение на BE/FE/FullStack? Как происходит кооперация?
Подключайтесь послушать, задавайте свои вопросы в комментариях и в эфире.
my-talks.net – портфолио спикеров
Виктор Турский был не удовлетворен github-ом для ведения списка докладов и сделал my-talks.net Идея Виктора собрать информация по докладчикам в одном месте. Поддерживаю идею.
Виктор Турский был не удовлетворен github-ом для ведения списка докладов и сделал my-talks.net Идея Виктора собрать информация по докладчикам в одном месте. Поддерживаю идею.
my-talks.net
My talks
All your talks in one place
Forwarded from GDG Cloud Kyiv (Nikita)
Новости одной строкой:
1. Прямо сейчас стартует Voice Chat пo Cloud Development
2. 11 сентября Cloud Study Jam по k8s. Регистрация
3. Проходит #GCPSuperChallenge. Суть: проходишь qwikilabs и выигрываешь GCP/Pluralsight кредиты.
1. Прямо сейчас стартует Voice Chat пo Cloud Development
2. 11 сентября Cloud Study Jam по k8s. Регистрация
3. Проходит #GCPSuperChallenge. Суть: проходишь qwikilabs и выигрываешь GCP/Pluralsight кредиты.
Telegram
DOU #tech
Статті від українських айтівців про технології. З будь-яких питань — пишіть Редакції на editors@dou.ua
Forwarded from 🇺🇦 Math.random(): javascript community
@JStify_Community - молодое JS сообщество, с интересным контентом и регулярными подкастами на YouTube (https://www.youtube.com/c/jstifycommunity), по моему мнению сообщество имеет все шансы стать самым большим во Львове или даже в Украине.
@vinjs - канал очень атмосферной конференции VinnytsiaJS (https://vinnytsiajs.org/) в канале найдете доклады, анонсы событий, интересных спикеров.
@beerJSZhytomyr - канал сообщества BeerJS в Житомире, харизма и вовлеченность организаторов делают сообщество одним из самых привлекательных в Украине, о их offline встречах ходят легенды.
#channels #friends #tofollow
@vinjs - канал очень атмосферной конференции VinnytsiaJS (https://vinnytsiajs.org/) в канале найдете доклады, анонсы событий, интересных спикеров.
@beerJSZhytomyr - канал сообщества BeerJS в Житомире, харизма и вовлеченность организаторов делают сообщество одним из самых привлекательных в Украине, о их offline встречах ходят легенды.
#channels #friends #tofollow
Чем отличаются операционные ошибки от ошибок программиста?
#code_pattern
Ошибки в ходе выполнения можно разделить на операционные ошибки (база данных не доступна, внешний API не вернул ответ и т.д.) и на ошибки программиста, т.е. баги в коде. Типичная ошибка #nodejs программиста
С точки зрения REST API отмечу, что необходимо использовать валидацию входящих данных и использовать 400 код, если она не прошла. А вот 500-ый http код создан именно для ошибок программиста.
Ошибки обоих типов должны быть залогированы, но уровень для операционных ошибок info/error, а ошибок программиста – error/fatal.
Операционные ошибки могут и должны быть обработаны. Ошибки же программиста не могут быть обработаны, так как приводят программу в неизвестное состояние. По хорошему приложение необходимо перезапустить.
Подробней по теме:
🔗Distinguish operational vs programmer errors
🔗Error Handling in Node.js
#code_pattern
Ошибки в ходе выполнения можно разделить на операционные ошибки (база данных не доступна, внешний API не вернул ответ и т.д.) и на ошибки программиста, т.е. баги в коде. Типичная ошибка #nodejs программиста
TypeError: Cannot read property '...' of undefined. TypeScript снижает количество таких ошибок, но не убирает их полностью. С точки зрения REST API отмечу, что необходимо использовать валидацию входящих данных и использовать 400 код, если она не прошла. А вот 500-ый http код создан именно для ошибок программиста.
Ошибки обоих типов должны быть залогированы, но уровень для операционных ошибок info/error, а ошибок программиста – error/fatal.
Операционные ошибки могут и должны быть обработаны. Ошибки же программиста не могут быть обработаны, так как приводят программу в неизвестное состояние. По хорошему приложение необходимо перезапустить.
Подробней по теме:
🔗Distinguish operational vs programmer errors
🔗Error Handling in Node.js