Включение CORS на отдельных конечных точках

#javascript #node.js #api #cors #rest

#JavaScript #node.js #API #cors #остальное

Вопрос:

У меня есть rest API, который имеет много конечных точек для получения и отправки данных. Мне было интересно, можно ли изменить, с какого источника будет взаимодействовать конкретная конечная точка. Ниже вы можете видеть, что у меня включен стандартный CORS во всем приложении:

 app.use((req, res, next) => {
  res.header('Access-Control-Allow-Headers', '*');
  res.header('Access-Control-Allow-Origin', '*');
  next();
});
 

Но я хочу иметь возможность изменять свойства CORS отдельных конечных точек:

 app.get('/api/blocks/length', (req, res) => {
  res.json(blockchain.chain.length);
});
 

Как это можно сделать? Некоторое понимание будет означать для меня мир.

Комментарии:

1. const cors = require('cors'); app.get('/api/blocks/length', cors(), (req, res) => {});

Ответ №1:

Функция, которую вы передаете app.use , является функцией промежуточного программного обеспечения. Давайте разберем это, чтобы сохранить компоненты размером с кусочек.

 const cors_middleware = (req, res, next) => {
  res.header('Access-Control-Allow-Headers', '*');
  res.header('Access-Control-Allow-Origin', '*');
  next();
};
 

(Хотя это переосмысление колеса, вы могли бы просто использовать cors модуль из NPM)

Тогда вы получите свой оригинальный эффект следующим образом:

 app.use(cors_middleware);
 

Теперь посмотрим на определение get :

 app.get(path, callback [, callback ...])
 

Требуется список из одного или нескольких обратных вызовов.

Таким образом, вы можете поместить туда свое промежуточное программное обеспечение:

 app.get('/api/blocks/length', cors_middleware, (req, res) => {
  res.json(blockchain.chain.length);
});
 

Комментарии:

1. Я понимаю. Итак, я могу определить более одного промежуточного программного обеспечения и использовать его в конечных точках, если это необходимо?