From time-to-time, you will happen upon a problem between your frontend and API that you can't quite see. A dd()
in your controller or a console.log()
in your frontend just doesn't seem to cut it and the problem seems out of reach. Luckily, Laravel provides you with a way to see the request as it hits your API, and that is through middleware.
First Steps:
- In your terminal, go to where your project's API is located, and type
php artisan make:middleware LogRoute
. This will create a file in app/Http/Middleware. - If you haven't already, download Postman. It will help you to test your API without having to go through your frontend.
The Meat:
- In your LogRoute.php, import the Log Facade by typing
use Illuminate\Support\Facades\Log
at the top of your file. - Next, in our
handle()
function, we'll need to first ensure that our request can pass unimpeded between handlers.public function handle(Request $request, Closure $next){ $response = $next($request) ... }
- Next, we'll need to tell our Middleware to stop running if our app environment isn't local. We'll do that with an if statement:
if (app()->environment('local'))
. Now we can finish up our middleware by making an array of our request and response and logging that data. Our response is what's most important, as it will have a stack trace to help us debug.
public function handle(Request $request, Closure $next){ $response = $next($request); if (app()->environment('local')){ $data = [ 'request' => $request->all(), 'response' => $response->getContent() ]; Log::info(json_encode($data)); } return $response; }
Finishing Up:
- To use our middleware, we first have to register it. Go to Kernel.php in your app/Http folder and scroll all the way down to
$routeMiddleware
. When you're there, add this line:'log.route' => \App\Http\Middleware\LogRoute::class,
. - Now go to your API routes and place
->middleware('log.route')
at the end of the route that you want to test.
The End:
- Test your API by making a request with Postman.
- Go to storage/logs/laravel.log to see what's happening.
One More Thing:
- You can add more methods in your middleware to test requests, such as
$request->getMethod()
which will tell you the type of request method that hit the API (POST, GET, etc.) and$request->getUri()
which will tell you the source of the request.
ย