Erlaube CORS REST Anfrage an eine Express / Node.js Anwendung auf Heroku

Ich habe eine REST-API für das Express-Framework für node.js geschrieben, die für Anfragen über die js-Konsole in Chrome und die URL-Leiste usw. funktioniert. Ich versuche jetzt, sie für Anfragen von einer anderen App auf einer anderen zu verwenden Domäne (CORS).

Die erste Anforderung, die vom Javascript-Frontend automatisch gestellt wird, lautet / api / search? Uri = und scheint in der Anforderung "Preflight" OPTIONS fehlzuschlagen.

In meiner Express-App füge ich CORS-Header hinzu, indem ich Folgendes verwende:

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 }));
});

Über die Chrome-Konsole erhalte ich folgende Header:

Anforderungs-URL: 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

Abfragezeichenfolgenparameter

uri:http://localhost:5000/collections/1/documents/1

Antwort-Header

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.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage