Я написал API REST в экспресс-инфраструктуре для node.js, который работает для запросов из консоли js в Chrome, а также в строке URL и т. Д. I Теперь я пытаюсь заставить его работать для запросов из другого приложения в другом домене (CORS).Разрешить запрос CORS REST в приложение Express/Node.js на Heroku
Первый запрос, сделанный автоматически передним концом javascript, относится к/api/search? Uri = и, как представляется, не работает в запросе OPTIONS «предполетный».
В моей экспресс-приложение, я добавляю заголовки CORS, используя:
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();
}
};
и:
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 }));
});
В консоли Chrome я получаю эти заголовки:
URL запроса: HTTP : //furious-night-5419.herokuapp.com/api/search? uri = http% 3A% 2F% 2Flocalhost% 3A5000% 2Fcollections% 2F1% 2Fdocuments% 2F1
Запрос Метод: ВАРИАНТЫ
Код Статус: 200 OK
Заголовки запросов
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
строку запроса Параметры
uri:http://localhost:5000/collections/1/documents/1
Response Headers
Allow:GET
Connection:keep-alive
Content-Length:3
Content-Type:text/html; charset=utf-8
X-Powered-By:Express
Это похоже на отсутствие правильных заголовков, отправляемых приложением API?
Спасибо.
Я получаю эту ошибку в коде, который я не писал, но я не понимаю необходимость обработчика метода 'OPTIONS'. Может ли кто-то помочь мне понять, почему не обрабатывать только метод «POST», а не обрабатывать метод «POST» ** и «OPTIONS»? –