Laravel 11 Axios POST-запрос к методу контроллера возвращает ошибку 404Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Laravel 11 Axios POST-запрос к методу контроллера возвращает ошибку 404

Сообщение Anonymous »

Я столкнулся с проблемой при попытке выполнить запрос POST из внешнего интерфейса с помощью Axios в метод контроллера Laravel. URL-адрес запроса возвращает ошибку 404, как показано ниже.
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');
});**
});

Я так не понимаю, почему ошибка возникает только в '/recordings/execute/{query}'.
Я думаю, что функция '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;
}
}

Запрос Axios в Show.jsx:

Код: Выделить всё

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]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»