Laravel-Axios GET请求失败,但POST有效

时间:2019-01-22 15:04:28

标签: laravel vuejs2 axios

我的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可以工作但GET不能工作?

谢谢

更新 设法使其工作,但不确定为什么。我还有另一个显示用户的页面,对此的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 :(得分:1)

您的dd("IN")中有public function test(),它将输出在精美的交互式元素中呈现dd()函数内容所必需的HTML(和CSS / JS)。 API调用实际上需要返回可用的内容,例如json响应:

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

编辑:另外,请注意路由冲突。 routes/api.php中的所有路由都自动以/api为前缀,因此定义以下两个路由将是冲突的:

routes / web.php:

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

routes / api.php:

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

在这种情况下,我使用的不是100%,但是很可能是routes/web.php中的那个,正如稍后在代码中定义的那样。另外,如果您在Route::get("/api/test", ...);中使用routes/api.php,则实际路由为http://localhost/api/api/test(请注意双前缀),因此也请注意。