Ich habe eine REST-API für das Express-Framework für node.js geschrieben, die für Anforderungen von der js-Konsole in Chrome und der URL-Leiste usw. funktioniert. Ich versuche jetzt, sie für Anforderungen von einer anderen App auf einer anderen App zum Laufen zu bringen Domain (CORS).
Die erste Anforderung, die automatisch vom Javascript-Frontend gestellt wird, lautet / api / search? Uri = und scheint bei der OPTIONS-Anforderung "Preflight" fehlgeschlagen zu sein.
In meiner Express-App füge ich CORS-Header hinzu, indem ich:
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();
}
};
und:
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 }));
});
Von der Chrome-Konsole erhalte ich folgende Header:
URL anfordern: http: //furious-night-5419.herokuapp.com/api/search? Uri = http% 3A% 2F% 2Flocalhost% 3A5000% 2Fcollections% 2F1% 2Fdocuments% 2F1
Anforderungsmethode: OPTIONEN
Statuscode: 200 OK
Header anfordern
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
Parameter für Abfragezeichenfolgen
uri:http://localhost:5000/collections/1/documents/1
Antwortheader
Allow:GET
Connection:keep-alive
Content-Length:3
Content-Type:text/html; charset=utf-8
X-Powered-By:Express
Scheint dies ein Mangel an richtigen Headern zu sein, die von der API-Anwendung gesendet werden?
Vielen Dank.
PATCH
Sie auch angeben, ob Sie es verwenden, anstatt PUT
eine Ressource zu aktualisieren
OPTIONS
Methode nicht. Könnte mir bitte jemand helfen zu verstehen, warum ich nicht nur diePOST
Methode anstatt beidePOST
und dieOPTIONS
Methode handhabe ?