Простой CORS‑прокси на Node.js (Express + http-proxy-middleware) для обхода ограничений CORS.
Подходит как для локальной разработки, так и для использования в виде глобальной npm‑утилиты или скомпилированного бинарника.
- Обход CORS – добавляет заголовок
Access-Control-Allow-Origin: *ко всем ответам. - Поддержка preflight‑запросов – корректно отвечает на OPTIONS‑запросы
- Гибкая конфигурация цели – целевой URL задаётся через:
- флаг
--target/-t, - либо переменную окружения
TARGET_URL,
- флаг
- Гибкая конфигурация порта – порт задаётся через:
- флаг
--port/-p, - либо переменную окружения
PORT, - либо значение по умолчанию (
3000).
- флаг
- CLI‑утилита – можно устанавливать как глобальный npm‑пакет и вызывать командой
simple-cors-proxy. - Бинарники через
pkg– сборка в standalone‑исполняемые файлы для Windows, Linux и macOS. - Красивое логирование – все запросы логируются с помощью
signale.
git clone <URL_РЕПОЗИТОРИЯ>
cd Simple-CORS-proxy
npm installnpm install -g @edheldor/simple-cors-proxyПосле этого команда simple-cors-proxy будет доступна глобально.
Поддерживаемые флаги:
-p,--port– порт локального прокси‑сервера.-t,--target– целевой URL, на который проксируются запросы (обязательно сhttp://илиhttps://).-h,--help– показать справку и выйти.
Переменные окружения:
PORT– порт локального прокси (по умолчанию3000).TARGET_URL– целевой URL (по умолчаниюhttps://example.com).
Приоритет значений:
- CLI‑флаг (
--port,--target) - Переменная окружения (
PORT,TARGET_URL) - Вшитое значение по умолчанию
node server.jsЧто произойдёт:
- Порт:
3000 - Цель:
https://example.com
TARGET_URL=https://api.example.com node server.jsPORT=4000 node server.jsPORT=4000 TARGET_URL=https://api.example.com node server.jsnode server.js --port 4000 --target https://api.example.comTARGET_URL=https://api.example.com node server.js --port 5000node server.js --help
# или
node server.js -hВ package.json определены скрипты:
-
run– обычный запуск:npm run run # под капотом: node server.js -
run:example– пример запуска с заданными флагами:npm run run:example # под капотом: node server.js --port 4000 --target https://api.example.com -
dev– запуск в режиме разработки (с авто‑перезапуском черезnodemon):npm run dev # под капотом: nodemon server.js -
dev:example– пример dev‑запуска с заданными флагами:npm run dev:example # под капотом: nodemon server.js --port 4000 --target https://api.example.com
Всё, что идёт после --, передаётся в server.js как аргументы командной строки:
# Задать свой порт и целевой URL при запуске обычного скрипта
npm run run -- --port 5000 --target https://my.api.com
# То же самое в dev-режиме с nodemon
npm run dev -- --port 8080 --target https://backend.localМожно комбинировать с env‑переменными:
PORT=5000 TARGET_URL=https://api.example.com npm run runПосле установки:
npm install -g @edheldor/simple-cors-proxyКоманда simple-cors-proxy будет доступна из любого места.
simple-cors-proxysimple-cors-proxy --port 4000 --target https://api.example.comPORT=5000 TARGET_URL=https://api.example.com simple-cors-proxyTARGET_URL=https://api.example.com simple-cors-proxy --port 8080simple-cors-proxy --helpПроект настроен для сборки в standalone‑исполняемые файлы с помощью pkg.
Конфигурация хранится в package.json (секция pkg).
npm run buildСоберутся бинарники для:
node18-linux-x64node18-win-x64node18-macos-x64
Файлы появятся в папке dist/.
-
Windows:
npm run build:win
-
Linux:
npm run build:linux
-
macOS:
npm run build:mac
pkg сохраняет и process.argv, и переменные окружения, так что параметры работают так же, как и у node server.js.
# только бинарник, всё по умолчанию
./dist/simple-cors-proxy-linux
# задать порт и целевой URL через флаги
./dist/simple-cors-proxy-linux --port 4000 --target https://api.example.com
# задать через env
PORT=5000 TARGET_URL=https://api.example.com ./dist/simple-cors-proxy-linux.\dist\simple-cors-proxy-win.exe
.\dist\simple-cors-proxy-win.exe --port 4000 --target https://api.example.com
$env:PORT = 5000
$env:TARGET_URL = "https://api.example.com"
.\dist\simple-cors-proxy-win.exedist\simple-cors-proxy-win.exe
dist\simple-cors-proxy-win.exe --port 4000 --target https://api.example.com
set PORT=5000
set TARGET_URL=https://api.example.com
dist\simple-cors-proxy-win.exeОсновная логика находится в server.js:
- Настройка порта и целевого URL.
- Обработка preflight‑запросов.
- Логирование запросов.
- Настройка прокси (
createProxyMiddleware).
Что можно поменять/расширить:
- Добавить авторизацию (например, по токену или API‑ключу) перед проксированием.
- Фильтровать/переписывать заголовки запросов и ответов.
- Ограничивать список допустимых методов / путей.
- Добавить более строгую CORS‑конфигурацию (не
*, а конкретные origin).
В проекте используется Prettier:
npm run formatПроверка без автозамен:
npm run format:checkEdheldor