我的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();
});
现在两者都可以工作。为什么会这样?
谢谢
答案 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
(请注意双前缀),因此也请注意。