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

使用axios.get()校验用户存在性时遭遇404错误求助

问题解决建议

核心问题:请求方法不匹配

你前端用axios.get()发起GET请求,但后端配置的是router.post("/allusers/:username", getRival)——POST类型的路由。服务器找不到对应GET方法的/allusers/:username路由,因此返回404错误。

修复方案二选一:

  • 修改前端请求方法为POST
    把前端的axios.get改成axios.post:
    const response = await axios.post(`${allUsersRoute}/${rivalUsername}`);
    
  • 修改后端路由为GET
    把后端的router.post改成router.get:
    router.get("/allusers/:username", getRival)
    
    注:从语义上来说,校验用户是否存在属于查询操作,更适合用GET方法。

其他潜在问题修正

  1. 数据库查询字段不匹配
    你的查询语句是User.findOne({ user }),这里的user是参数名,但通常用户模型的用户名字段是username,如果你的模型字段是username,应该改成:

    const isExist = await User.findOne({ username: user })
    

    否则会查询user字段等于用户名的数据,大概率查不到结果。

  2. 前端添加错误捕获
    当前代码未处理请求失败的情况,建议用try/catch包裹,避免控制台抛出未捕获的Promise错误:

    const handlecreateChannel = async (e) => {
      e.preventDefault()
      try {
        console.log("rival: ", rivalUsername);
        console.log(`${allUsersRoute}/${rivalUsername}`)
        const response = await axios.get(`${allUsersRoute}/${rivalUsername}`);
        console.log("does rival exist ", !!response.data); // 直接判断返回数据是否存在
      } catch (err) {
        console.error("请求失败:", err);
        // 可在此处添加用户提示,比如"用户不存在或请求出错"
      }
    };
    
  3. 后端响应格式统一
    当前后端在用户不存在时返回{status: false},存在时返回用户对象,建议统一格式,方便前端处理:

    module.exports.getRival = async (req, res, next) => {
        try{
            const username = req.params.username
            const user = await User.findOne({ username })
            if (!user){
                return res.json({status: false, isExist: false})
            }
            return res.json({status: true, isExist: true, user})
        }catch(e){
            next(e)
        }
    }
    

内容的提问来源于stack exchange,提问作者user14436230

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:07:13