Laravel - GET-запрос Axios не выполняется, но POST работает - PullRequest
0 голосов
/ 22 января 2019

У меня что-то странное происходит с моим приложением Laravel / Vue, и я не могу понять это. В Laravels web.php у меня есть простой маршрут

Route::get('api/test', 'UploadController@test');

Если я делаю route:list, я вижу правильный маршрут

| GET|HEAD  | api/test | App\Http\Controllers\UploadController@test | web,auth  |

Я упростил контроллер на данный момент, поэтому он выглядит так

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;

class UploadController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }

    public function test() 
    {
        dd("IN");
    }
}

И запрос Axios просто

<script>
    export default {
        data() {
            return {
                files: {}
            }
        },
        methods: {
            loadFiles() {
                axios.get("api/test").then(({ data }) => (this.files = data));
            }
        },
        created() {
            this.loadFiles();
            Fire.$on('AfterCreate',() => {
                this.loadFiles();
            });
        }
    }
</script>

Здесь все становится странным. Проверяя консоль, я вижу, что URL-адрес запроса http://localhost:8000/api/test, что является правильным. Я получаю ответ 200, но он не показывает мой вывод, только весь HTML-код страницы.

Если я изменю запрос на POST, я увижу вывод этой функции.

Я что-то здесь упускаю? Почему бы POST работать, но НЕ ПОЛУЧИТЬ?

Спасибо

Update Удалось заставить это работать, но не уверен почему. У меня есть другая страница, которая отображает пользователей, и запрос GET для этого работал нормально. Затем я захотел проверить файл маршрута api.php, чтобы убедиться, что ничто здесь не останавливает тест. Я заметил, что у меня все еще был мой пользователь, поэтому я удалил его, а затем мой пользователь перестал работать.

Итак, в api.php я добавил

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

Route::middleware('auth:api')->get('/upload', function (Request $request) {
    return $request->user();
});

А теперь оба работают. Почему это?

Спасибо

1 Ответ

0 голосов
/ 22 января 2019

В вашем public function test() есть dd("IN"), который будет выводить HTML (и CSS / JS), необходимые для визуализации содержимого вашей функции dd() в причудливом, интерактивном элементе.Вызовы API должны фактически возвращать что-то пригодное для использования, например, ответ json:

public function test(){
  return response()->json(["status" => "OK"], 200);
}

Редактировать: Также следует учитывать конфликтующие маршруты.Все маршруты в routes/api.php автоматически начинаются с префикса /api, поэтому определение следующих двух маршрутов будет конфликтом:

routs / web.php:

Route::get("/api/test", ...);

routs / api.php:

Route::get("/test", ...);

Я не на 100%, на котором будет использоваться в этой ситуации, но это, вероятно, тот, что в routes/web.php, как это определено позже в коде.Кроме того, если вы используете Route::get("/api/test", ...); в routes/api.php, тогда фактический маршрут будет http://localhost/api/api/test (обратите внимание на двойной префикс), так что помните об этом тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...