2015-06-07 4 views
1

Я использую Угловое Dart V1 для переднего конца рамки я использую Полк & & полки маршрутизатор для бэкэнда APIПочему метод Angular посылает метод запроса Http: опции перед POST?

Я пытаюсь перенести некоторые старые запросы GET принимать сообщения данных

Старый запрос:

Future fetchRoutes(FlightPostParamsVO params) async { 
    return _http.get(BASE + 'routes').then(handleRoutes); 
} 

Новый запрос

Future fetchRoutes(FlightPostParamsVO params) async { 
    Map post = params.toPostable(); 
    return _http.post(BASE + 'routes', post).then(handleRoutes); 
    } 

Я устанавливаю заголовки CORS в родовом ответ на все вызовы, как его строго в формате JSON API:

Future<Response> makeResponse(json) async { 
    var response = new Response.ok(json, headers: {'content-type': 'text/json', 
                'Access-Control-Allow-Origin': '*', 
                'Access-Control-Allow-Headers': "Origin, X-Requested-With, Content-Type, Accept", 
                'Access-Control-Allow-Methods': "POST, GET, OPTIONS"}); 
    return response; 
} 

Я получаю 404 следующий вывод:

OPTIONS http://localhost:1234/tickets/routes 404 (Not Found) 
(index):1 XMLHttpRequest cannot load http://localhost:1234/tickets/routes. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access. The response had HTTP status code 404. 

Когда я проверяю сетевой трафик - весь мой запрос GET. УДАЛИТЬ правильные заголовки

Когда я проверяю сетевой трафик - мой запрос POST выполняется по запросу с помощью метода, установленного как ОПЦИИ - этот вызов не содержит заголовков.

Мой обработчик POST маршрут никогда не вызывается

маршрутизатор

Router airRouter = router(); 

    Router tickets = airRouter.child('/tickets'); 
    tickets.add('/cities', ['GET'], controller.handleCitites); 
    tickets.add('/times', ['GET'], controller.handleTimes); 
    tickets.add('/routes', ['POST'], controller.handleRoutes); 
    tickets.add('/{id}/tickets/', ['GET'], controller.handleTickets); 

    io.serve(airRouter.handler, 'localhost', 1234); 

Fix Симптом:

tickets.add ('/ маршруты', [ 'OPTIONS'], контроллер .handleRoutes);

Вопрос: Почему HTTP запрос отправки Метод с Запрос: OPTIONS перед каждым POST, и Что такое правильный способ вызвать только POST?

ответ

2

Это не угловой. Это браузер. Первый запрос метода OPTION - проверить заголовок CORS, чтобы убедиться, что браузеру разрешено публиковать сообщения.

Решение:

http://thomaslockerambling.blogspot.com/2014/10/shelf-middleware-adding-cors-headers.html

  • Создание объекта CORS и добавлять в заголовок
  • перехватывать вызов к ВАРИАНТОВ
  • Ответ с кодом состояния 200 OK
+0

Link сломана! знак равно –

Смежные вопросы