未捕获的应用程序错误:拒绝访问错误——在执行命令时被拒绝

后端开发 2026-07-09

我正在用Deno通过GET请求调用一个批处理程序。

但在程序执行完毕后,我在Deno的日志中看到这条信息 [未捕获的应用程序错误]: ForbiddenError - Forbidden

这只在我等待程序输出完成时才会发生。

try/catch捕捉不到这个问题,一切都正常,只是在所有操作完成后,日志里会打印出错误信息。

我也在使用 --allow-all标志来运行Deno,因此不明白为什么会有权限相关的报错。

基本上我的代码是这样的

try {
    const url = new URL(ctx.request.url);
    const param1 = url.searchParams.get("p1");
    const param2 = url.searchParams.get("p2");

    const runReportBat = [
        Deno.cwd(),
        "..",
        "folder1",
        "run_r.bat",
      ].join("\\");


    const command = new Deno.Command(runReportBat, {
      args: [param1, param2],
      stdout: "piped",
      stderr: "piped",
    });


    const { code, stdout, stderr } = await command.output();

    ctx.response.body = { 
      status: "success"
    };
  } catch (err) {
    ctx.response.status = 500;
    ctx.response.body = { error: err.message };
  }

解决方案

ForbiddenError 来自你的 HTTP框架,并非来自 Deno.Command 调用本身,而且它发生在处理程序返回之后,因此你的 try/catch 永远看不到它。

你的 try/catch 只包装路由处理程序,因此它会捕获 command.output() 中的错误,以及你自己代码中的错误。

但是日志行 [uncaught application error]: ForbiddenError - Forbidden 来自框架级别的错误处理器,它在你的 try/catch 之外运行(例如,当响应已发送、中间件中的其他部分抛出或拒绝时)。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章