J'ai écrit une API REST sur le framework express pour node.js qui fonctionne pour les requêtes provenant de la console js dans Chrome, de la barre d'URL, etc. J'essaie maintenant de la faire fonctionner pour les demandes provenant d'une autre application, sur un domaine différent (CORS).
La première demande, effectuée automatiquement par le frontal javascript, est destinée à /api/search?uri=, et semble échouer sur la demande 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 demande : 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
En-têtes de demande
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 la 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.
0 votes
J'obtiens cette erreur dans un code que je n'ai pas écrit, mais je ne comprends pas l'utilité d'un gestionnaire pour la fonction
OPTIONS
méthode. Quelqu'un pourrait-il m'aider à comprendre pourquoi ne pas traiter uniquement la méthodePOST
au lieu de traiter les deuxPOST
yOPTIONS
méthode ?0 votes
Vous pouvez également inclure
PATCH
si vous l'utilisez à la place dePUT
pour mettre à jour une ressource