Laravel新增路由返回404 Not Found错误求助
问题描述
我编写了用于检查数据库表中名称是否存在的前端代码:
validateName() { var url = "{{ route('admin.port.check.name', ':name') }}"; url = url.replace(':name', this.name); console.log(url); fetch(url, { method: 'GET', headers: { "X-CSRF-TOKEN": "{{ csrf_token() }}" } }).then(response => response.json()).then(data => { console.log(data); }) }
已配置对应路由,控制器方法如下:
public function CheckName($name) { $port = Port::where('name', $name)->firstOrFail(); if ($port) { return response()->json([ 'status' => "found" ]); } return response()->json([ 'status' => "not found" ]); }
我已确认路由列表,但请求仍返回404错误,求解决办法。
解决方向
修复
firstOrFail()的异常问题firstOrFail()在未找到记录时会直接抛出ModelNotFoundException,Laravel默认将其转为404响应,导致代码无法执行后续判断。把它改成first():$port = Port::where('name', $name)->first();处理特殊字符的URL编码
如果名称包含空格、中文或特殊符号,直接替换到URL会导致路由匹配失败。前端替换时需编码:url = url.replace(':name', encodeURIComponent(this.name));核对路由定义细节
确保路由参数名称(如{name})和控制器方法参数$name完全一致,大小写也要匹配;同时确认路由的HTTP方法为GET,与前端fetch的method对应。调整URL生成方式
可直接拼接参数替代route函数替换,前提是路由格式为/admin/port/check/name/{name}:var url = "{{ route('admin.port.check.name') }}/" + encodeURIComponent(this.name);
内容的提问来源于stack exchange,提问作者Danendra
相关产品推荐
相关产品推荐

