Если вы видите эту ошибку — вы не одиноки:Access to fetch at 'https://api.site.com' from origin 'http://localhost:3000' has been blocked by CORS policy.Разберем, почему это происходит, и как это починить. Что такое CORS, и для чего он нужен.1. Зачем нужен CORS? Безопасность! Пример атаки:Вы вошли на bank.com. Данные для авторизации сохранились в куках.Заходите на evil.com.Сайт evil.com тайно отправляет запрос Get /api/account на bank.com.Браузер автоматически отправляет кук…
Привет, Хаброжители!Ошибки происходят в любом приложении. Говоря об ошибках, первым делом отметим, что все они делятся на два типа: ожидаемые ошибки, обусловленные бизнес-логикой, и неожиданные ошибки. Это различие очень важное, поскольку стратегии обработки ошибок первого и второго типа значительно отличаются.Ожидаемые ошибки, связанные с бизнес-логикой — это «нормальная» часть эксплуатации системы. О таких ошибках в системе должно быть заранее известно пользователям, а вы должны быть способны…
*Статья отражает личный опыт, и не является рекламой. Иногда я читаю Хабр. Совсем недавно под очередной статьей о нейросетях я встретил комментарий, который выражал общий скепсис в отношении лингвистических моделей и чат ботов, в частности. Мол, они не могут сгенерировать ни единой строчки рабочего кода и годны, только чтобы переставлять слова в предложениях. В общем, технологию прямо называли шарлатанской.Я улыбнулся, вернулся на свой сайт, сделанный при помощи DeepSeek, и проверил, всё ли ра…
В современной веб-разработке качественная документация так же важна, как и качественный код. Когда ваше приложение разрастается до десятков или сотен компонентов, функций и модулей, становится практически невозможно удерживать в памяти все детали их работы. Хорошая документация не только облегчает поддержку проекта в долгосрочной перспективе, но и значительно ускоряет вхождение новых разработчиков в команду.В этой статье мы рассмотрим два популярных подхода к документированию фронтенд-кода: JSD…
💡 Идея Всё началось с простой, но насущной проблемы: я хотел быстро передать файлы между своими устройствами — без интернета, без Bluetooth и без облаков. Существующие способы были либо медленными, либо ограниченными: Bluetooth — устаревший и слишком медленный для видео и больших папокОблачные сервисы — требуют авторизации, интернета, да ещё и часто сжимают файлыAirdrop — работает только между устройствами AppleФлешка — не всегда под рукой, да и не подходит для телефонов🧠 Тогда я задал себе …
Привет, Хабр! Это моя первая статься, хоть и перевод, но все же, готов выслушать конструктивную критику)Я часто вижу, как веб-разработчики используют CustomEvent в коде своих компонентов. Настолько часто, что у многих складывается впечатление, будто CustomEvent — единственный способ создавать custom события (с маленькой "c"), а то и вообще единственный способ генерировать собственные события. Это понятно. Это прямо указано в названии: "Пользовательское" событие. Создается впеча…
В этой серии статей мы отправимся в путешествие по миру пользовательских хуков React, открывая для себя их огромный потенциал для улучшения ваших проектов разработки. Сегодня мы сосредоточимся на хуке «useMediaQuery», одном из многих тщательно разработанных хуков, доступных в коллекции пользовательских хуков React. Github: https://github.com/sergeyleschev/react-custom-hooks import { useState, useEffect } from "react" import useEventListener from "../useEventListener/useEventListen…
Вы когда-нибудь оказывались по уши в JavaScript‑приложении, следуя за цепочкой вызовов require() как по хлебным крошкам, чтобы понять, как всё связано? Один модуль импортирует другой, тот тянет глобальную переменную, и вот вы уже гоняетесь за ссылками по всему коду, просто чтобы протестировать один компонент. Это как готовить блюдо, где каждый ингредиент спрятан в отдельном шкафу — вы тратите половину времени на поиски, а не на готовку. Именно эту проблему и решает dependency injection (внедрен…
Всем привет! Меня зовут Дмитрий, и я руководитель фронтенд-разработки в компании Интелси.Сегодня хочу рассказать о принципе единственной ответственности (Single Responsibility Principle) — первом из пяти принципов SOLID, сформулированных Робертом Мартином в его книге "Agile Software Development: Principles, Patterns, and Practices". Суть этого принципа звучит так: «Класс должен иметь только одну причину для изменения» (A class should have only one reason to change).Если вы скажете, что …