Как включить 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 ответа:
Таким образом, фактическим решением вашей проблемы оказалось использование
jsonp
обратного вызова с forecast.io api, поскольку они не включили заголовки CORS для клиентского доступа. Используйте$http.jsonp
Вот так$http.jsonp(url + lat + ',' + lng + '?callback=JSON_CALLBACK');
В общем случае для включения CORS на вашем сервере expressjs выполните следующие действия.
- установитьcors модуль для express with
npm install cors
- требуйте его
var cors = require('cors');
- установите его на свой экземпляр 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(){ ... })
, промежуточное программное обеспечение будет выполняться для каждого запроса, обработанного сервером. Не имеет значения, какое другое промежуточное программное обеспечение вызывается любым заданным запросом.Если у вас есть несколько экспресс-серверов, работающих одновременно (это довольно маловероятно), то вы будете нужно добавить промежуточное ПО на каждый сервер.