You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用discord.js OAuth2生成Access Token后推入数组失败求助

解决Discord OAuth2 Access Token推入数组失败的问题

问题根源分析

你的代码存在两个核心错误:

  1. 异步操作处理不当:oauth.tokenRequest是异步Promise方法,你直接在它后面执行array.push(console.log)时,token还未获取完成,且这行代码实际推入的是console.log函数,而非token值。
  2. 未正确捕获异步返回的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 13:23:23