You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 22:05:16