AxiosError {сообщение: «Запрос не выполнен с кодом состояния 404», имя: «AxiosError», код: «ERR_BAD_REQUEST», конфигурация: {…}, запрос: XMLHttpRequest, …
В моем проекте используется специальное промежуточное программное обеспечение для подключения к базе данных. Ниже приведены подробные конфигурации и фрагменты кода:
web.php
Код: Выделить всё
use App\Http\Controllers\ClientDataController;
use App\Http\Controllers\QueryController;
use App\Http\Controllers\RecordingController;
use Illuminate\Support\Facades\Route;
Route::middleware(['auth', 'verified'])->group(function () {
Route::get('/dashboard', fn() => Inertia::render('Dashboard'))->name('dashboard');
// Routes that do not need the connection middleware
Route::get('/clients', [ClientDataController::class, 'index'])->name('client.index');
Route::get('/clients/create', [ClientDataController::class, 'create'])->name('client.create');
Route::post('/clients', [ClientDataController::class, 'store'])->name('client.store');
Route::delete('/clients/{client}', [ClientDataController::class, 'destroy'])->name('clients.destroy');
Route::post('/set-connection', [ClientDataController::class, 'setConnection'])->name('set-connection');
// Routes that need the connection middleware
Route::middleware(['connection'])->group(function () {
Route::get('/clients/{connection}/queries', [ClientDataController::class, 'show'])->name('clients.show');
// Queries
Route::get('/queries', [QueryController::class, 'index'])->name('query.index');
Route::get('/queries/create', [QueryController::class, 'create'])->name('query.create');
Route::post('/queries/store', [QueryController::class, 'store'])->name('query.store');
Route::get('/queries/{id}', [QueryController::class, 'show'])->name('query.show');
Route::get('/queries/{id}/edit', [QueryController::class, 'edit'])->name('query.edit');
Route::put('/queries/{id}', [QueryController::class, 'update'])->name('query.update');
Route::delete('/queries/{id}', [QueryController::class, 'destroy'])->name('query.destroy');
Route::post('/query/verify', [QueryController::class, 'verify'])->name('query.verify');
// Recordings
**Route::post('/recordings/execute/{query}', [RecordingController::class, 'recordQueryExecution'])->name('recording-execution');
});**
});
Я думаю, что функция 'recordQueryExecution ' в RecordingController это нормально, потому что когда я выполнил его с помощью query.store или quey.update. Это работает.
RecordingController.php
Код: Выделить всё
namespace App\Http\Controllers;
use App\Models\Query;
use App\Models\Recording;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
class RecordingController extends Controller
{
public function recordQueryExecution(Query $query)
{
try {
$result = DB::select($query->query_sql);
$csvFilePath = $this->generateCsvFile($query->id, $result);
$recording = new Recording();
$recording->query_id = $query->id;
$recording->query_sql = $query->query_sql;
$recording->csv_file_path = $csvFilePath;
$recording->updated_by = Auth::id();
$recording->updated_at = now();
$recording->status = 'success';
$recording->save();
return response()->json(['success' => true]);
} catch (\Exception $e) {
$recording = new Recording();
$recording->query_id = $query->id;
$recording->query_sql = $query->query_sql;
$recording->updated_by = Auth::id();
$recording->updated_at = now();
$recording->status = 'fail';
$recording->fail_reason = $e->getMessage();
$recording->save();
return response()->json(['success' => false, 'message' => $e->getMessage()], 500);
}
}
private function generateCsvFile($queryId, $result)
{
$csvDir = storage_path("app/public/csv");
if (!file_exists($csvDir)) {
mkdir($csvDir, 0777, true);
}
$csvFileName = "query_{$queryId}_" . now()->format('Ymd_His') . '.csv';
$csvFilePath = "{$csvDir}/{$csvFileName}";
$file = fopen($csvFilePath, 'w');
if (!empty($result)) {
fputcsv($file, array_keys((array)$result[0]));
}
foreach ($result as $row) {
fputcsv($file, (array)$row);
}
fclose($file);
return $csvFileName;
}
}
Код: Выделить всё
import axios from 'axios';
const runQuery = async (queryId) => {
try {
const response = await axios.post(`/recordings/execute/${queryId}`);
if (response.data.success) {
window.location.reload();
} else {
console.error("Error running query:", response.data.message);
}
} catch (error) {
console.error("Error running query:", error);
}
};
bootstrap/app.php
Код: Выделить всё
Подробнее здесь: [url]https://stackoverflow.com/questions/78661699/laravel-11-axios-post-request-to-controller-method-returns-404-error[/url]