J'ai écrit une API REST sur le framework express pour node.js qui fonctionne pour les demandes de la console js dans Chrome, et la barre d'URL, etc. J'essaie maintenant de la faire fonctionner pour les demandes d'une autre application, sur un autre domaine (CORS).
La première requête, faite automatiquement par le frontal javascript, est vers / api / search? Uri =, et semble échouer sur la requête OPTIONS "Preflight".
Dans mon application express, j'ajoute des en-têtes CORS, en utilisant:
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();
}
};
et:
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 }));
});
Depuis la console Chrome, j'obtiens ces en-têtes:
URL de la requête: http: //furious-night-5419.herokuapp.com/api/search? Uri = http% 3A% 2F% 2Flocalhost% 3A5000% 2Fcollections% 2F1% 2Fdocuments% 2F1
Méthode de demande: OPTIONS
Code d'état: 200 OK
Demander des en-têtes
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
Paramètres de chaîne de requête
uri:http://localhost:5000/collections/1/documents/1
En-têtes de réponse
Allow:GET
Connection:keep-alive
Content-Length:3
Content-Type:text/html; charset=utf-8
X-Powered-By:Express
Cela ressemble-t-il à un manque d'en-têtes appropriés envoyés par l'application API?
Merci.
PATCH
si vous l'utiliserez au lieu de PUT
mettre à jour une ressource
OPTIONS
méthode. Quelqu'un pourrait-il m'aider à comprendre pourquoi ne pas gérer uniquement laPOST
méthode au lieu de gérer les deuxPOST
et laOPTIONS
méthode?