Tengo este código en mi aplicación express
var app = require('express')() var bodyParser = require('body-parser') var cors = require('cors') app.use(bodyParser.urlencoded({ extended: true })) app.post('/user', cors(), function (req, res) { res.send(req.body.username); }) app.listen(3000, function () { console.log('Example app listening on port 3000!') })Y esta es mi función angular 2 que envía la solicitud.
getData() { let headers = new Headers(); headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); let params = 'username=test'; this.http.post('http://localhost:3000/user', params, {headers: headers}) .map(res => res.json()) .subscribe(data => {}); }Me sale este error en la consola:
XMLHttpRequest no puede cargar http://localhost:3000/user . La respuesta a la solicitud de verificación previa no pasa la verificación de control de acceso: no hay un encabezado 'Access-Control-Allow-Origin' en el recurso solicitado. Por lo tanto, no se permite el acceso al origen ' http://localhost:4200 '.
Pero cuando envío una solicitud usando jquery ajax, funciona sin errores.
Puede habilitar CORS en nodejs/express con un código como este:
app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", '*'); //<-- you can change this with a specific url like http://localhost:4200 res.header("Access-Control-Allow-Credentials", true); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); res.header("Access-Control-Allow-Headers", 'Origin,X-Requested-With,Content-Type,Accept,content-type,application/json'); next(); });Así que tu código debería verse así:
var app = require('express')() var bodyParser = require('body-parser') app.use(bodyParser.urlencoded({ extended: true })) app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", '*'); //<-- you can change this with a specific url like http://localhost:4200 res.header("Access-Control-Allow-Credentials", true); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); res.header("Access-Control-Allow-Headers", 'Origin,X-Requested-With,Content-Type,Accept,content-type,application/json'); next(); }); app.post('/user', function (req, res) { res.send(req.body.username); }) app.listen(3000, function () { console.log('Example app listening on port 3000!') })