NodeJS GraphQL登出Mutation返回上下文问题:如何仅返回布尔值?
问题解决:GraphQL Logout Mutation 返回布尔值而非上下文内容
问题原因
context.session.destroy() 是异步方法,它的返回值并非回调函数里的 true/false,而是当前的 session 对象。这就导致 GraphQL 收到了非布尔类型的返回值,触发类型不匹配错误。
修复方案
将异步的 destroy 操作包装成 Promise,让 resolver 返回一个 Promise,在回调中根据结果 resolve 对应的布尔值:
export default { Mutation: { logout: { resolve(parent, args, context) { return new Promise((resolve, reject) => { context.session.destroy(error => { if (error) { log.info('Logging out: could not destroy the session'); log.error(error); resolve(false); // 出错时返回false } else { console.log('HELLO LOGOUT'); log.info('Logged out: session destroyed.'); resolve(true); // 成功销毁返回true } }); }); }, }, }, };
解释
- 通过 Promise 封装异步操作,确保 resolver 返回的是符合 GraphQL 类型定义的布尔值。
- 在
destroy的回调中,使用resolve()来传递最终的布尔结果,而不是直接 return(因为回调的 return 值不会被 resolver 捕获)。
内容的提问来源于stack exchange,提问作者Jakub
相关产品推荐
相关产品推荐

