Inertia JS consume laravel api



我知道惯性不需要vue路由器,但我有一个Laravel API,我将从vue应用程序中消费,并对本地应用程序(移动(、web端(vue应用(进行反应,我将其安装在Laravel项目中,带有惯性。现在我想使用带有json响应的Laravel路由。我不想渲染Inertia对象,但Link组件在backEnd:
return Inertia::render('...')
中收到这样的惯性响应。当我返回apiResponse时:我得到了这个错误:All Inertia requests must receive a valid Inertia response, however a plain JSON response was received.

我知道这不是一个错误,但有一种方法可以在前端使用Inertia,在后端使用API资源?或者我可以用vue路由器代替惯性路由器吗?

我的目标是让后端通用于所有类型的前端应用程序。所以我必须返回json响应。

您可以使用Inertia共享数据概念来实现您想要做的事情类似于:

function customResponse($response)
{
if (request()->inertia()){
return redirect()->back()->with('response_data', $response);
} else {
return response()->json($response);
}
}

更改AppHttpMiddlewareHandleInertiaRequests中间件以在共享数据中具有数据密钥

public function share(Request $request): array
{
return array_merge(parent::share($request), [
...
'response_data' => fn () => $request->session()->get('response_data')
],
]);
}

现在,只需使用有效负载调用customResponse函数,您将获得API的JSON响应和Inertia调用的Inertia响应。你可以在Inertia中访问这些数据,如下所示:

form.post(route('some-route'), {
onSuccess: (response) => {
console.log(response.props.response_data);
}
})

如果需要返回JSON资源,请使用Axios。

InertiaJS用于构建单页应用程序,而无需构建API。

也就是说,Inertia不用于构建API。当你向Inertia发出请求时,它的响应是Inertia响应,不能是其他类型的响应。单击此处了解其工作原理。

最新更新