deploy - Permitir la solicitud CORT REST a una aplicación Express/Node.js en Heroku
procfile heroku node js (3)
He marcado tu código en una aplicación ExpressJS limpia y funciona muy bien.
Intenta mover tu app.use(allowCrossDomain)
a la parte superior de la función de configuración.
Escribí una API REST en el marco express para node.js que funciona para las solicitudes de la consola js en Chrome, y la barra de URL, etc. Ahora estoy tratando de hacer que funcione para las solicitudes de otra aplicación, en una diferente dominio (CORS).
La primera solicitud, hecha automáticamente por el front-end de javascript, es / api / search? Uri =, y parece estar fallando en la solicitud de OPCIONES "preflight".
En mi aplicación expresa, estoy agregando encabezados CORS, usando:
var allowCrossDomain = function(req, res, next) {
res.header(''Access-Control-Allow-Origin'', ''*'');
res.header(''Access-Control-Allow-Methods'', ''GET,PUT,POST,DELETE,OPTIONS'');
res.header(''Access-Control-Allow-Headers'', ''Content-Type, Authorization, Content-Length, X-Requested-With'');
// intercept OPTIONS method
if (''OPTIONS'' == req.method) {
res.send(200);
}
else {
next();
}
};
y:
app.configure(function () {
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(allowCrossDomain);
app.use(express.static(path.join(application_root, "public")));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
Desde la consola de Chrome obtengo estos encabezados:
URL de solicitud: http: //furious-night-5419.herokuapp.com/api/search? Uri = http% 3A% 2F% 2Flocalhost% 3A5000% 2Fcollections% 2F1% 2Fdocuments% 2F1
Método de solicitud: OPCIONES
Código de estado: 200 OK
Encabezados de solicitud
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:origin, x-annotator-auth-token, accept
Access-Control-Request-Method:GET
Connection:keep-alive
Host:furious-night-5419.herokuapp.com
Origin:http://localhost:5000
Referer:http://localhost:5000/collections/1/documents/1
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5
Parámetros de cadena de consulta
uri:http://localhost:5000/collections/1/documents/1
Encabezados de respuesta
Allow:GET
Connection:keep-alive
Content-Length:3
Content-Type:text/html; charset=utf-8
X-Powered-By:Express
¿Esto parece una falta de encabezados adecuados enviados por la aplicación API?
Gracias.
No podría ser el caso para la mayoría de las personas que buscan esta pregunta, pero tuve exactamente este mismo problema y la solución no estaba relacionada con CORS
.
Resulta que la string
secreta JSON Web Token no se definió en las variables de entorno, por lo que no se pudo firmar el token. Esto provoca que cualquier solicitud POST
que dependa de verificar o firmar un token obtenga un tiempo de espera y devuelva un error 503
, indicando al navegador que hay algo mal en CORS
, que no es así. Agregar la variable de entorno en Heroku resolvió el problema.
Espero que esto ayude a alguien.
para admitir cookies conCredentials necesita esta línea xhr.withCredentials = true;
En el servidor Express, agregue este bloque antes que el resto
`app.all(''*'', function(req, res, next) {
var origin = req.get(''origin'');
res.header(''Access-Control-Allow-Origin'', origin);
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header(''Access-Control-Allow-Headers'', ''Content-Type'');
next();
});`