Escribí una API REST en el marco expreso para node.js que funciona para solicitudes de la consola js en Chrome y la barra de URL, etc. Ahora estoy tratando de que funcione para solicitudes de otra aplicación, en una diferente dominio (CORS).
La primera solicitud, realizada automáticamente por el front-end de JavaScript, es / api / search? Uri =, y parece fallar en la solicitud OPTIONS de "verificación previa".
En mi aplicación express, 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
Solicitar encabezados
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
¿Parece esto una falta de encabezados adecuados enviados por la aplicación API?
Gracias.
PATCH
si lo usará en lugar de PUT
actualizar un recurso
OPTIONS
método. Podría alguien por favor me ayude a entender por qué no manejar sólo elPOST
método en lugar de manejar tantoPOST
yOPTIONS
método?