跳到主要内容
版本:2.0.0

默认错误行为

错误值处理

为了保证安全性,Midway 针对 Serverless 场景下返回的错误做了一些特殊处理。

在函数业务抛出错误的情况下,框架侧会捕获所有的错误,并返回 “Internal Server Error” 的错误。

比如我们的函数返回一个错误:

@ServerlessTrigger(//...)
async invoke() {
throw new Error('abc');
}

不管是 HTTP 还是非 HTTP 触发器,框架部分都有相应的处理。

非线上环境,比如 NODE_ENV=local 环境,框架会将整个错误通过网关透出。

比如(完整的错误堆栈):

2021-07-02T05:57:08.553Z 19be4d99-c9cb-4c4c-aac2-9330d31b4408 [error] Error: abc
at hello (/code/dist/function/index.js:17:15)
at invokeHandler (/code/node_modules/_@midwayjs_faas@2.11.2-beta.1@@midwayjs/faas/dist/framework.js:174:56)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
at (/code/node_modules/_@midwayjs_faas@2.11.2-beta.1@@midwayjs/faas/dist/framework.js:117:40)
at cors (/code/node_modules/_@koa_cors@3.1.0@@koa/cors/index.js:98:16)
at invokeHandlerWrapper (/code/node_modules/_@midwayjs_runtime-engine@2.11.1@@midwayjs/runtime-engine/dist/lightRuntime.js:18:28) {
}

在 线上环境,框架将直接返回 “Internal Server Error” ,但是日志中是完整的堆栈。

如图所示。

调整错误返回

以上为默认行为,在特殊环境下,如果需要显示出错误,可以使用环境变量开启强制输出。

process.env.SERVERLESS_OUTPUT_ERROR_STACK = 'true';