使用discord.js OAuth2生成Access Token后推入数组失败求助
解决Discord OAuth2 Access Token推入数组失败的问题
问题根源分析
你的代码存在两个核心错误:
- 异步操作处理不当:
oauth.tokenRequest是异步Promise方法,你直接在它后面执行array.push(console.log)时,token还未获取完成,且这行代码实际推入的是console.log函数,而非token值。 - 未正确捕获异步返回的token数据:没有从
tokenRequest的返回结果中提取access_token并执行数组推入操作。
修正后的代码
以下两种写法都能解决问题,选一种即可:
写法1:使用Promise.then处理异步结果
const urlParams = new URLSearchParams(queryString); const code = urlParams.get("code"); const DiscordOauth2 = require("discord-oauth2"); const oauth = new DiscordOauth2(); const array = []; oauth.tokenRequest({ clientId: "---", // 替换为你的客户端ID clientSecret: "---", // 替换为你的客户端密钥 code: code, scope: "identify guilds", grantType: "authorization_code", redirectUri: "https://pro-moderation.theeuphoniumking.repl.co/servers.html", }).then((tokenData) => { console.log("获取到的token数据:", tokenData); array.push(tokenData.access_token); // 将实际的access_token推入数组 console.log("数组当前内容:", array); // 验证数组是否已存入token }).catch((error) => { console.error("请求token失败:", error); // 捕获并打印错误信息 });
写法2:使用async/await(更直观的异步处理)
const urlParams = new URLSearchParams(queryString); const code = urlParams.get("code"); const DiscordOauth2 = require("discord-oauth2"); const oauth = new DiscordOauth2(); const array = []; // await必须在async函数内使用 async function getAndStoreToken() { try { const tokenData = await oauth.tokenRequest({ clientId: "---", clientSecret: "---", code: code, scope: "identify guilds", grantType: "authorization_code", redirectUri: "https://pro-moderation.theeuphoniumking.repl.co/servers.html", }); console.log("获取到的token数据:", tokenData); array.push(tokenData.access_token); console.log("数组当前内容:", array); } catch (error) { console.error("请求token失败:", error); } } getAndStoreToken();
关键注意点
- 必须等待
tokenRequest异步操作完成后,才能操作数组存储token,否则会因数据未返回导致数组为空。 - 从返回的
tokenData对象中提取access_token字段,这才是你需要存入数组的目标值。 - 加入错误捕获逻辑,能快速排查请求失败(如code无效、客户端信息错误等)的问题。
内容的提问来源于stack exchange,提问作者shara
相关产品推荐
相关产品推荐

