$ http.delete () через AngularJS в API бэкэнда Laravel приводит к 405 (метод не разрешен)

Я создаю приложение Recipe с внешним интерфейсом AngularJS и внутренним интерфейсом Laravel (настройка как API). Когда я просматриваю подробный вид рецепта, я хочу, чтобы у пользователя была возможность удалить рецепт. Поэтому я добавил эту кнопку:

<button class="btn btn-danger" ng-show="recipeData.id" ng-click="deleteRecipe(recipeData.id)">
Delete
</button>

..который вызывает эту функцию:

$scope.deleteRecipe = function(id) {
Recipes.destroy(id)
.success(function() {
$location.path('/');
})
}

..который использует этот сервис / фабрику:

destroy : function(id) {
return $http.delete('/api/recipes/' + id);
}

..который должен быть маршрутизирован в соответствии с этими правилами Laravel:

Route::group(array('prefix' => 'api'), function() {
Route::resource('recipes', 'RecipeController');
Route::resource('ingredients', 'IngredientController');
Route::resource('nutrients', 'NutrientController');
Route::resource('IngredientsByRecipe', 'IngredientsByRecipeController');
});

..и в нашем RecipeController мы находим эту функцию, которая должна заботиться о завершающей работе:

  public function destroy($id)
{
Recipe::destroy($id);
return Response::json(array('success' => true));
}

..но почему-то я не могу заставить это работать, потому что я получаю это сообщение об ошибке в моей консоли браузера:

DELETE http://localhost:8000/api/recipes/4 405 (Method Not Allowed)

..однако когда я запускаю эту команду ниже, через терминал я не получаю ошибок, и конкретный рецепт удаляется без проблем.

curl -v -X DELETE http://localhost:8000/api/recipes/4

Эта проблема возникает только тогда, когда я запускаю CodeKits browser-auto-refresh-tool. Не могу понять, почему. Размещение двух заголовков ниже, чтобы увидеть, замечаете ли вы что-нибудь странное. С CodeKit:

DELETE /api/recipes/8 HTTP/1.1
Host: marcuss-macbook-air.local:5757
Connection: keep-alive
Accept: application/json, text/plain, */*
Origin: http://marcuss-macbook-air.local:5757
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36
Referer: http://marcuss-macbook-air.local:5757/edit/8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,sv;q=0.6
Cookie: __ngDebug=true; ckrp_ypos=0_0; laravel_session=eyJpdiI6IjFiVWRNSkZhK3hualwvS1FCd29SMk1vaVhJN0Q4Q1RJS1k2TDFnUHBQTWFzPSIsInZhbHVlIjoiOUtRUUFRbUJlaDcyZHJIZE1oQnphUm1wTlZiYmZoQ1VKZXdTWngwM1hLV2s3VjlrSzZ1b3E2Q0dsK1wvRk1mZlNHaG1wcWxBcjc5V2QzOVpSOXpHRElRPT0iLCJtYWMiOiJkNjliMDZjMThjYmVjZDZhZjU2N2ZmMzkwYTUzMjBmYmVlZDc4ZWVlZmFlOWY1YzE5NWYwZDIxNDkwNGU5YmRiIn0%3D

Без CodeKit:

DELETE /api/recipes/7 HTTP/1.1
Host: localhost:8000
Connection: keep-alive
Accept: application/json, text/plain, */*
Origin: http://localhost:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36
Referer: http://localhost:8000/edit/7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,sv;q=0.6
Cookie: __ngDebug=true; laravel_session=eyJpdiI6Ik5iVWpESEYyRk45Yys5REV1OUdOcHlyTXd6YkNsSFlETTFlUkVhNjdseE09IiwidmFsdWUiOiJVRlFka1hERTBmMGJQb3dBQ2YyQmIzZnNGb2hab1VldmFhUUhHeE00czdqUytmVUdXQXRDbXJPc0lTRUpGZDY2K0V3alNHejRIY0JsdkNxQ1ExdlJoZz09IiwibWFjIjoiNzQ2YzIyODRkZjQ0ZTdjODI0YzYxMTVjMzc0ZTJhM2UzZmQyM2Y4OGIwYmJkMzU2ZWNiNzU1NzgzYzBkZDY0ZSJ9

В чем причина того, что мои DELETE-запросы получают 405 через Angular (используя CodeKit), а не через мой curl-запрос в терминале или при обычном использовании Angular?

Заранее спасибо!

0

Решение

CodeKit не поддерживает метод DELETE. Вот почему это работает с другими клиентами.

Для этого существует открытая проблема на GitHub: # 398

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector