Laravel 10升级后Nova 4子导航点击出现Inertia响应错误求助
升级Laravel 9到10后Nova子导航点击触发Inertia响应错误
# 当前环境(本地Docker) "php": "8.1" "laravel/nova": "4.35.6" "laravel/framework": "10.45.28"
按照官方升级指南将应用从Laravel 9升级到Laravel 10后,点击Nova子导航项时弹出错误提示:
"All Inertia requests must receive a valid Inertia response, however a plain JSON response was received."
配图:Laravel Nova打开子导航项时的错误界面
直接输入子页面URL(如/resources/products)可正常访问,但通过导航点击时,Nova返回的是常规JSON负载(包含配置和菜单数据),而非Inertia预期的合法响应。怀疑是中间件冲突或CORS配置问题,但排查后仍未解决。
已尝试的解决步骤
CORS配置调整
- 在
config/cors.php中添加'exposed_headers' => ['x-inertia'],但网络响应中未出现Access-Control-Expose-Headers: x-inertia头,怀疑被Nova覆盖
替换CORS中间件
- 将Laravel 10内置CORS替换为
fruitcake/laravel-cors包
依赖版本更新
php: "8.*" → "^8.1" doctrine/dbal: "^2.8" → "^3.0" laravel/framework: "9.*" → "10.*" laravel/nova: "4.25.1" → "^4.35" fruitcake/laravel-cors: "^2.0" → (已移除) spatie/laravel-permission: "5.*" → "^6.0" auth0/auth0-php: "8.3.1" → "^8.10" auth0/login: "7.1" → "^7.8" itsmejoshua/novaspatiepermissions: "^1.0" → (已移除) kiritokatklian/nova-permission: (原无)→ "*" # ...
执行清理与发布命令
删除/vendor和node_modules后运行:
composer update npm i && npm run dev php artisan route:clear && php artisan config:clear && php artisan cache:clear php artisan optimize:clear php artisan nova:publish
相关配置文件
/config/auth.php
// ... 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], ]
/config/cors.php
return [ 'paths' => ['*'], 'allowed_methods' => ['*'], 'allowed_origins' => ['*', 'http://localhost:3000', env('APP_URL')], 'allowed_origins_patterns' => [], 'allowed_headers' => ['*','content-type,x-inertia,x-inertia-version,x-requested-with'], 'exposed_headers' => ['x-inertia'], 'max_age' => 0, 'supports_credentials' => true, ];
/config/nova.php
// ... 'middleware' => [ 'web', HandleInertiaRequests::class, DispatchServingNovaEvent::class, BootTools::class, \Vyuldashev\NovaPermission\ForgetCachedPermissions::class, ],
app/Http/Kernel.php
// ... protected $middleware = [ \Laravel\Nova\Http\Middleware\HandleInertiaRequests::class, \Illuminate\Http\Middleware\HandleCors::class, \App\Http\Middleware\TrustProxies::class, \App\Http\Middleware\CheckForMaintenanceMode::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \App\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, ];
/package.json
// ... "devDependencies": { "axios": "^0.27.2", "cross-env": "^7.0.3", "laravel-mix": "^6.0.49", "lodash": "^4.17.13", "postcss": "^8.3.11", "resolve-url-loader": "^5.0.0", "sass": "^1.54.9", "sass-loader": "^12.6.0", "vue": "^3.2.39", "vue-loader": "^16.8.3", "vue-template-compiler": "^2.6.11", "vuex": "^4.0.2", .... },
目前完全没有头绪,是否遗漏了确保Nova JSON响应不被误判的配置步骤或中间件调整?还有哪些排查方向能解决这个问题?
内容的提问来源于stack exchange,提问作者murcoder
相关产品推荐
相关产品推荐

