Если вы разрабатываете приложение Node.js, которому необходимо взаимодействовать с другими серверами или API, вам может потребоваться включить совместное использование ресурсов между источниками (CORS), чтобы разрешить запросы из разных доменов.

CORS — это функция безопасности, которая запрещает веб-страницам или веб-приложениям отправлять запросы к домену, отличному от того, который обслуживал исходную веб-страницу. Без CORS вредоносные скрипты или приложения могут отправлять запросы к серверам или API, которые для них не предназначены.

В этой статье мы обсудим три метода включения CORS в ваш код Node.js, включая использование пакета cors, установку необходимых заголовков вручную и использование пакета http-proxy-middleware. Мы также предоставим примеры и рекомендации, которые помогут вам выбрать лучший метод для вашего конкретного случая использования.

1. Использование пакета CORS npm:

Установите пакет cors, выполнив в терминале следующую команду:

npm install cors

Требуйте пакет cors в коде Node.js:

const cors = require('cors');

Используйте промежуточное ПО cors в своем коде Node.js, прежде чем ваши маршруты будут определены:

app.use(cors());

Это позволит отправлять запросы из разных источников на ваш сервер Node.js. Вы также можете передать параметры промежуточному программному обеспечению cors для его дальнейшей настройки. Например, чтобы разрешить доступ к вашему серверу только определенным источникам, вы можете использовать следующий код:

const corsOptions = {
  origin: 'http://example.com'
};

app.use(cors(corsOptions));

2. Включение необходимых заголовков в CORS:

Создайте функцию промежуточного программного обеспечения, которая устанавливает необходимые заголовки CORS:

function setCorsHeaders(req, res, next) {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  next();
}

Вышеупомянутая промежуточная функция устанавливает заголовок Access-Control-Allow-Origin для разрешения запросов из любого источника, заголовок Access-Control-Allow-Methods для разрешения указанных методов HTTP и заголовок Access-Control-Allow-Headers для разрешения указанных заголовков запроса.

Используйте промежуточное ПО setCorsHeaders в своем коде Node.js до определения ваших маршрутов:

app.use(setCorsHeaders);

Это установит необходимые заголовки CORS для всех входящих запросов.

Примечание. Важно понимать последствия предоставления всем источникам (*) доступа к вашему серверу. Из соображений безопасности рекомендуется ограничивать источники определенными доменами или IP-адресами.

3. С помощью пакета http-proxy-middleware:

Этот метод полезен, когда вы хотите проксировать запросы от вашего клиентского приложения на сервер Node.js, одновременно обрабатывая CORS.

Установите пакет http-proxy-middleware, выполнив в терминале следующую команду:

npm install http-proxy-middleware

Требуйте пакет http-proxy-middleware в коде Node.js:

const { createProxyMiddleware } = require('http-proxy-middleware');

Используйте функцию createProxyMiddleware для создания промежуточного программного обеспечения, которое передает запросы от вашего клиентского приложения на ваш сервер Node.js:

const apiProxy = createProxyMiddleware({
  target: 'http://localhost:3000',
  changeOrigin: true,
  pathRewrite: {
    '^/api': '/api/v1'
  },
  onProxyReq: function(proxyReq, req, res) {
    proxyReq.setHeader('Authorization', `Bearer ${req.headers.authorization}`);
  },
  onProxyRes: function(proxyRes, req, res) {
    proxyRes.headers['Access-Control-Allow-Origin'] = '*';
  }
});

app.use('/api', apiProxy);

В приведенном выше примере функция createProxyMiddleware используется для создания промежуточного программного обеспечения, которое проксирует запросы от /api на стороне клиента к /api/v1 на сервере Node.js. Для параметра changeOrigin установлено значение true, чтобы перезаписать источник запроса в соответствии с целевым URL-адресом, а параметр pathRewrite используется для изменения пути запроса.

Функция onProxyReq используется для добавления заголовка Authorization к запросу прокси-сервера, а функция onProxyRes используется для установки заголовка Access-Control-Allow-Origin в ответе прокси-сервера, чтобы разрешить запросы из разных источников.

Этот метод может быть полезен, когда вы хотите проксировать запросы от клиентского приложения, которое размещено в домене, отличном от вашего сервера Node.js, а также обрабатывать CORS.