gpt4 book ai didi

lambda - 如何从无服务器 lambda 内部抛出错误

转载 作者:行者123 更新时间:2023-12-04 17:17:44 25 4
gpt4 key购买 nike

有人可以帮助我了解如何在 graphQL lambda 应用程序中抛出身份验证错误吗?我正在将 graphQL-yoga 与无服务器一起使用,我可以验证请求并返回我从 jwt 获得的用户,一个 {}没有 token ,或者如果 token 是旧的,则抛出身份验证错误。当我抛出一个错误时,它会在我的身份验证块的 catch 语句中被捕获,但我不知道如何从 lambda 实际返回它。

const lambda = new GraphQLServerLambda({
typeDefs,
context: ({ event, context }) =>
authenticate(event.headers.Authorization)
.then(user => ({ db: mainDb, user}))
.catch(e => {
console.log('Caught the auth error here');
throw e;
}),
Query: { \\ some queries here.... },
Mutation: { \\ some mutations here...}
});

我怎样才能格式化错误或从正确的位置抛出它,以便我得到一个实际的格式化错误?相反,我得到了一个 Unexpected token I in JSON...客户端中的错误。显然,我需要在 throw 期间进行某种格式化但对我来说如何做到这一点并不完全显而易见。

如果有帮助,请在我的导出部分。我正在尝试从 try/catch 到 then/catch 的所有内容,此时我似乎已经错过了捕捉错误的机会。有没有更好的方法来做到这一点?我需要的主要功能是能够进行身份验证、拒绝错误 token ,否则只返回 {}对于未登录的用户。我最难找到允许未登录用户的自定义授权方,这就是我直接在我的 graphQL 端点中进行身份验证的原因
exports.server = (event, context, callback) => {
try {
return lambda
.graphqlHandler(event, context, callback)
.then(b => b)
.catch(e => console.log(`can't catch it here ${e}`));
} catch (e) {
console.log('or here');
callback(e);
}
};

最佳答案

自定义错误消息的一种选择是创建 Error 的新实例。类(class)。

一个例子是:

.catch(e => {
console.log('Caught the auth error here');
throw new Error('Authentication Failed');
}),

因为回调函数的第一个参数将是错误消息,您也可以将通用错误直接粘贴到处理函数中:
 callback("An error happened!");

您还可以使用 Middy 等中间件来帮助处理错误:

https://github.com/middyjs/middy/blob/master/docs/middlewares.md#httperrorhandler

关于 NodeJS 错误处理的有用链接:

https://www.joyent.com/node-js/production/design/errors

关于lambda - 如何从无服务器 lambda 内部抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50253877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com