未捕获的应用程序错误:拒绝访问错误——在执行命令时被拒绝
我正在用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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。