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

Adonis.js删除注册用户报错Row not found,如何实现无错删除?

解决Adonis.js删除用户时的「Row not found」错误

报错原因分析

你遇到的「Row not found」错误,是因为ChatUser.findOrFail(ctx.params.id)在指定ID的用户不存在时会直接抛出异常,触发catch块。另外当前代码还有两个潜在问题:

  • ctx.auth.user!的非空断言可能导致运行时错误(比如用户未登录时)
  • 部门不匹配时抛出的错误会混入通用异常,无法区分具体错误类型

修正后的代码

@inject()
async deleteEquipe(ctx: HttpContext) {
  try {
    await ctx.bouncer.with('UserPolicy').allows('adminCobranca')
    
    // 先确认当前登录用户存在
    const authUser = ctx.auth.user
    if (!authUser) {
      handleError(ctx, 'Usuário não autenticado')
      return
    }

    // 用find替代findOrFail,避免用户不存在时直接抛异常
    const user = await ChatUser.find(ctx.params.id)
    if (!user) {
      handleError(ctx, 'Usuário não encontrado')
      return
    }

    // 检查用户是否属于当前部门
    if (authUser.departamentoId !== user.departamentoId) {
      handleError(ctx, 'Usuário não pertence ao seu departamento')
      return
    }

    // 执行删除并返回成功响应
    await user.delete()
    handleSuccess(ctx, 'Sucesso ao deletar usuário')
  } catch (error) {
    handleError(ctx, 'Erro ao processar solicitação', error)
  }
}

关键修改说明

  • 替换findOrFail为find:find找不到记录时返回null,我们可以主动判断并返回精准的「用户不存在」提示,而非进入通用异常处理。
  • 移除非空断言:先检查ctx.auth.user是否存在,避免未登录场景下的运行时错误。
  • 拆分逻辑分支:每个条件分支单独处理响应,让错误提示更清晰,同时避免逻辑嵌套过深。
  • 统一异常捕获:catch块仅处理认证失败、策略检查失败等意外错误,给出通用提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:09:57