Запрос базовой ставки - метод OPTIONS - программирование

Запрос базовой ставки - метод OPTIONS

У меня есть объект Backbone Collection со следующим URL-адресом: http://localhost: 8080/api/menu/1/featured. Я пытаюсь выполнить операцию выборки для извлечения коллекции из url и ее анализа. Однако на стороне сервера тип метода, который я вижу для этого запроса, является OPTIONS. Сервер допускает только поддержку метода GET. Я не уверен, как Backbone выясняет, какой тип метода использовать, и почему он иногда меняет тип метода OPTIONS. Я использую сервер Node.js для обработки запроса. Этот код ниже в значительной степени, что я сделал.

var FeaturedCollection = Backbone.Collection.extend({
    model:FeaturedContent,
    url:function () { return url_featured; },
    parse:function (response) {
        console.log(response);
        return response;
    }
});

var featuredCollection = new FeaturedCollection();
featuredCollection.fetch();

Пожалуйста, помогите, спасибо!

4b9b3361

Ответ 1

Прошло некоторое время, но я помню, как раньше это случалось. Там может быть две вещи: Backbone по умолчанию пытался использовать вызовы API RESTful на ваш сервер, это означает GET, POST, PUT и DELETE.

Многие серверы не были созданы с реальной поддержкой REST и поддерживают только GET и POST. Когда Backbone отправляет команду PUT или DELETE, ваш браузер (а не Магистраль) автоматически отправляет запрос OPTIONS сначала, чтобы увидеть, разрешено ли разрешать подобные запросы. Если ваш сервер отвечает неправильно, этот вызов завершится неудачно, и, возможно, Backbone ничего не сделает.

Чтобы обойти этот набор Backbone.emulateHTTP = true; Или ваш сервер правильно ответит на вызовы OPTIONS. Дополнительную информацию см. В документации: http://backbonejs.org/#Sync-emulateHTTP

Другая проблема заключается в том, что вы делаете ajax-запросы для междоменного/поддомена, и вам нужно правильно включить CORS. Это также включает в себя правильный ответ на запросы OPTIONS.

Ответ 2

У меня была та же самая проблема, что и у OP - использование Backbone и NodeJS для сохранения данных через запрос CORS POST постоянно посылает заголовок запроса OPTIONS http и вообще не запускает запрос POST.

По-видимому, CORS с запросами, которые будут "вызывать побочные эффекты для пользовательских данных", заставит ваш браузер "предварять" запрос с заголовком запроса OPTIONS, чтобы проверить утверждение, прежде чем фактически отправить ваш запрошенный метод HTTP-запроса. https://developer.mozilla.org/en-US/docs/HTTP_access_control#Overview

Эта тема была решена моя проблема - Как разрешить CORS?

Плакат использовал некоторое промежуточное ПО для утверждения запросов PUT/GET/POST/DELETE, например:

res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
...
next();

и next(); позволит проверить OPTIONS на запрос POST.

Работал как сон для меня, надеюсь, что он тоже поможет кому-то другому.

Ответ 3

Backbone.js сопоставляет методы CRUD с HTTP. Взято из базового исходного кода:

var methodMap = {
  'create': 'POST',
  'update': 'PUT',
  'delete': 'DELETE',
  'read':   'GET'
};
Backbone.sync = function(method, model, options) {
   var type = methodMap[method];

Вероятно, проблема находится на вашем сервере node.js.

Ответ 4

Какую версию основы вы используете? У меня была точно такая же проблема, но потом понял, что я использовал старую версию магистрали (0.3.3) в учебнике. Обновлена ​​ссылка на последние backbone.js(0.9.2) и underscore.js(1.3.3) и отправляется как GET.