Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to enable CORS in MEAN STACK web app?

I am working on a MEAN-STACK application.Using Mean-cli packgae of node. in which i am using darksky weather API, in package name Information. I have 4 other packages in custom folder of mean app. how did i enable the CORS so that all API request did not fail and return the response.

i googled and find out that i have to add this middleware.

 //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();
}

where should i add this. in each package where we are using cross-origin request or in some global file.

I have tried to add this middleware in server -route file of ? Information package and in express.js file of confile but it didn't work.

like image 208
ashishkumar148 Avatar asked Oct 20 '22 11:10

ashishkumar148


1 Answers

So the actual solution to your issue turned out to be using jsonp callback with forecast.io api as they haven't enabled CORS headers for client access. Use $http.jsonp like this

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

In general to enable CORS on your expressjs server do the following.

  1. Install cors module for express with npm install cors
  2. require it var cors = require('cors');
  3. Set it on your express app instance with app.use(cors());

cors module will automatically add all aors related headers on the response. Alternately you could also configure a lot of options. Check the official docs

OR

If you want to do it yourself you could do the following

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();
}
};

then Enable your CORS middleware

app.use(permitCrossDomainRequests);

Enable routes at the end

app.use(app.router);
like image 113
kachhalimbu Avatar answered Oct 27 '22 00:10

kachhalimbu