Saturday, 17 September 2016

node.js - No 'Access-Control-Allow-Origin' - Node / Apache Port Issue



i've created a small API using Node/Express and trying to pull data using Angularjs but as my html page is running under apache on localhost:8888 and node API is listen on port 3000, i am getting the No 'Access-Control-Allow-Origin'. I tried using node-http-proxy and Vhosts Apache but not having much succes, please see full error and code below.




XMLHttpRequest cannot load localhost:3000. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'localhost:8888' is therefore not allowed access."





// Api Using Node/Express    
var express = require('express');
var app = express();
var contractors = [
{
"id": "1",
"name": "Joe Blogg",
"Weeks": 3,

"Photo": "1.png"
}
];

app.use(express.bodyParser());

app.get('/', function(req, res) {
res.json(contractors);
});
app.listen(process.env.PORT || 3000);

console.log('Server is running on Port 3000')


Angular code



angular.module('contractorsApp', [])
.controller('ContractorsCtrl', function($scope, $http,$routeParams) {

$http.get('localhost:3000').then(function(response) {
var data = response.data;

$scope.contractors = data;
})


HTML






  • {{person.name}}






Answer



Try adding the following middleware to your NodeJS/Express app (I have added some comments for your convenience):



// Add headers
app.use(function (req, res, next) {


// Website you wish to allow to connect
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8888');

// Request methods you wish to allow
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');

// Request headers you wish to allow
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');

// Set to true if you need the website to include cookies in the requests sent

// to the API (e.g. in case you use sessions)
res.setHeader('Access-Control-Allow-Credentials', true);

// Pass to next layer of middleware
next();
});


Hope that helps!


No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...