Как включить CORS в MEAN STACK web app?


Я работаю над приложением среднего стека.Имею в виду-интерфейс командной строки, используя packgae узла. в которой я использую darksky weather API, в информации об имени пакета. У меня есть 4 других пакета в пользовательской папке mean app. как я включил CORS, чтобы все запросы API не завершались ошибкой и возвращали ответ.

Я погуглил и обнаружил, что мне нужно добавить это промежуточное ПО.

 //CORS middleware
var allowCrossDomain = function(req, res, next) {
    res.header('Access-Control-Allow-Origin', 'example.com');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'Content-Type');
    next();
}

Где я должен добавить это. в каждом пакете, где мы используем запрос кросс-происхождения или в некоторых глобальных файл.

Я попытался добавить это промежуточное ПО в файл маршрута сервера ? Информационный пакет и в экспресс.js файл конфайла, но это не сработало.

2 5

2 ответа:

Таким образом, фактическим решением вашей проблемы оказалось использование jsonp обратного вызова с forecast.io api, поскольку они не включили заголовки CORS для клиентского доступа. Используйте $http.jsonp Вот так

$http.jsonp(url + lat + ',' + lng + '?callback=JSON_CALLBACK');

В общем случае для включения CORS на вашем сервере expressjs выполните следующие действия.

  1. установитьcors модуль для express with npm install cors
  2. требуйте его var cors = require('cors');
  3. установите его на свой экземпляр express app с помощью app.use(cors());

cors модуль автоматически добавит все соответствующие заголовки aors в ответе. Кроме того, вы можете настроить множество параметров. Проверьте официальные документы

Или

Если вы хотите сделать это сами, вы можете сделать следующее

var permitCrossDomainRequests = function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type');
// some browsers send a pre-flight OPTIONS request to check if CORS is enabled so you have to also respond to that
if ('OPTIONS' === req.method) {
  res.send(200);
}
else {
  next();
}
};

Затем включите промежуточное ПО CORS

app.use(permitCrossDomainRequests);

Включить маршруты в конце

app.use(app.router);

Если у вас есть только один экспресс-сервер, вам нужно добавить промежуточное ПО только один раз. Другие ваши модули, вероятно, предоставляются в качестве промежуточного программного обеспечения для сервера.

Если вы зарегистрируете функцию промежуточного программного обеспечения без какого-либо определяющего пути, например app.use(function(){ ... }), промежуточное программное обеспечение будет выполняться для каждого запроса, обработанного сервером. Не имеет значения, какое другое промежуточное программное обеспечение вызывается любым заданным запросом.

Если у вас есть несколько экспресс-серверов, работающих одновременно (это довольно маловероятно), то вы будете нужно добавить промежуточное ПО на каждый сервер.