AWS AppSync函数失败时错误存储位置及日志判断条件咨询
AWS AppSync函数执行失败时的错误位置与日志记录问题
我想了解在AWS AppSync中,当函数执行失败时,错误会存储在stash的哪个位置。同时,当函数中的PutItem操作失败时,当前代码里的if (error)条件能否实现日志记录,还是需要改成if (ctx.outError)?
我的resolver模板代码如下:
export function request(ctx) { // performs some operation return {} } export function response(ctx) { const { error, result } = ctx; if (error) { return util.appendError(error.message, error.type, result); } return ctx.prev.result; }
函数代码如下:
export function request(ctx) { const { input, keys } = ctx.stash; return { operation: 'PutItem', key: util.dynamodb.toMapValues(keys), attributeValues: util.dynamodb.toMapValues(input) }; } export function response(ctx) { const { error, result } = ctx; if (error) { // (ctx.outError) ? console.log("I want to log this error"); } return util.appendError(error.message, error.type, result); } return { ...result }; }
回答
日志记录的条件判断
当前代码中的if (error)条件完全可以实现日志记录,不需要改成ctx.outError。在AppSync函数的响应模板中,当数据源操作(比如这里的DynamoDB PutItem)执行失败时,错误会被自动注入到ctx.error对象中。你通过解构const { error, result } = ctx;拿到的error就是这个错误对象,所以当PutItem失败时,error会存在,console.log会被触发执行。错误在stash中的位置
函数执行失败的错误不会自动存储在stash里。stash是用于在resolver和函数、函数和函数之间传递自定义数据的容器,默认不会自动写入错误信息。如果需要后续的resolver或其他函数访问这个错误,你需要手动在函数的响应模板中将错误写入stash,比如:
if (error) { console.log("I want to log this error"); ctx.stash.functionError = error; // 手动将错误存入stash return util.appendError(error.message, error.type, result); }
另外注意你的函数响应模板存在语法错误:return util.appendError(...)后面的闭合大括号位置错误,需要调整以保证代码逻辑正确。
内容的提问来源于stack exchange,提问作者AYa
相关产品推荐
相关产品推荐

