Ошибка Laravel и VueJs (Vuetify): MethodNotAllowedHttpException

Все работало нормально, прежде чем я попытался использовать аутентификацию Laravel API. И теперь некоторые методы GET предоставляют MethodNotAllowedHttpException и говорят, что разрешенные методы - это POST, HEAD, а для методов публикации он говорит, что разрешенные методы - это GET, Head.

Вот мой запрос axios в моем компоненте Vue

axios.post('api/save_post?api_token='+api_token, this.post)
    .then(response => {
      console.log(this.user);
      this.success = response.data.message; 
      this.post.title=" ";
      this.post.content=" ";
    })
    .catch(err=>{
        this.error = err
        //this.error = 'Error in saving post, please try again'
    });   

вот мой маршрут в routes / api.php

 Route::middleware('auth:api')->post('save_post','Api\KnowledgeHubController@index')->name('savePost');

Включил это в мой файл welcome.blade.php

meta name="csrf-token" content="{{ csrf_token() }}">

перед мета есть ‹, так что это не ошибка.

и функция контроллера

public function index(Request $request)
{
    $response = KnowledgeHub::create([
        "title"     => $request['title'],
        "content"   => $request['content'],
        "author_id" => $request['author_id'],
    ]);
    if($response)
    {
        return response()->json(['message'=>'Post published Successfully','response'=>$response],200);
    }
    return response()->json(['message'=>'Error in publishing post','response'=>$response],400);
}

некоторые из решений, которые я пробовал

1-включенный токен csrf в заголовке означает в моем основном файле (welcome.blade.php)

2-попробуйте передать api_token разными способами в axios.post

3-запускаемый маршрут php artisan: кеш

Вот результат php artisan route: list

  POST     | api/save_post            | savePost        | App\Http\Controllers\Api\KnowledgeHubController@index            | api,auth:api 

person Muhammad Ahtisham    schedule 26.02.2020    source источник


Ответы (2)


Можете ли вы вызвать маршрут извне вашего vue-приложения?

Если вы на 100% то все правильно:

  1. Попробуйте добавить в свой axios-запрос следующий заголовок:
const headers = {
  'Content-Type': 'application/json'
}

axios.post('api/save_post?api_token='+api_token, this.post, headers)
    .then(response => {
      console.log(this.user);
      this.success = response.data.message; 
      this.post.title=" ";
      this.post.content=" ";
    })
    .catch(err=>{
        this.error = err
        //this.error = 'Error in saving post, please try again'
    });  

По-прежнему не работает?

  1. Попробуйте получить доступ к маршруту с помощью такой программы, как POSTMAN
  2. Очистить кеш Laravel
php artisan cache:clear
php artisan route:cache
person mleister    schedule 26.02.2020
comment
Спасибо за ответы. Я уже пробовал эти методы, но это не сработало. - person Muhammad Ahtisham; 26.02.2020
comment
Я также пробовал const headers = {'Content-Type': 'application / json', 'Authorization': 'Bearer' + api_token} - person Muhammad Ahtisham; 26.02.2020

Я решил эту проблему, но есть другая ошибка.

В exception / handler.php я заменяю функцию рендеринга для обработки ошибки.

public function render($request, Exception $exception)
{
    //return parent::render($request, $exception);
    if($request->expectsJson()) 
      {
        return parent::render($request, $exception);
      }else{

            return response()->json($exception->getMessage(), 400 );
        }
}

и в моем файле router.js, когда я удаляю mode: history

и в моем web.php, когда я комментирую приведенный ниже код, который был написан для решения проблемы обновления компонента vue (означает, что когда я обновлялся в браузере, он дал мне ошибку 404), чтобы решить эту проблему, я использовал этот код в конце файла web.php.

 Route::get('{any}', function () {
   return view('welcome');
 })->where('any','.*');

Но теперь проблема с ошибкой 404 существует.

person Muhammad Ahtisham    schedule 26.02.2020