I have setup CORS on my node.js server on port 5000 as follows:
var app = express();
app.use(cors()); //normal CORS
app.options('*', cors()); //preflight
app.post('/connect', function(req, res) {
console.log("Connection request received !")
});
var port = 5000;
app.listen(port, function () {
console.log('Listening on port '+port);
});
I am now trying to send AJAX POST requests using JQuery like so, in a static web page open from my hard disk :
var xhr = $.post({
url: 'http://localhost:5000/connect',
complete: function() {
console.log("done !")
},
crossDomain: true
});
xhr.fail(function(xhr, status, error){
alert(error)
})
The complete
function is never called, and the only alert I get is an alert from the XHR fail
handler, containing the following error :
NS_ERROR_DOM_BAD_URI: Access to restricted URI denied
I think CORS is well-configured, what am I missing ?
EDIT : for those in my case, the best solution I could find was to send the page from the server :
app.use(express.static('web'))
app.get("/", function(req, res) {
res.sendFile(__dirname + '/web/HTML/index.html');
});
This is the code I am using. It is located in my app.js file
I've never used cors() so I can't speak to that piece. But you could manually allow cross origin resource sharing by setting up the node.js headers.
Add This Pre-Route on All Requests
This should work.
CORS doesn't work using the
file
protocol because there is no server there to send back the requisite headers. Your solution of using a server is the only way to get CORS to work.I have a project that use cors.
The node code used is just:
The jquery code look a litte different: