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

部署至Vercel后调用GitHub API返回401错误的问题求助

部署至Vercel后调用GitHub API返回401错误的问题求助

大家好,我开发了一个作品集网站,功能是从GitHub API拉取我的仓库信息并展示在页面上。在本地用localhost运行的时候一切正常,但把代码部署到Vercel之后就一直返回401错误,卡在这里好久了,想请各位帮忙看看问题出在哪!

用于调用GitHub API获取仓库的代码(使用Bearer令牌认证)

这部分是我写的API路由,用来从GitHub拉取仓库信息,本地测试正常,部署到Vercel就报401:

const axios = require('axios');
const fetchrepositories = async (url,headers,retries = 3)=>{
try{
const response = await axios.get(url , {headers});
return response.data;
}catch(error){
if(retries > 3 && error.response?.status === 403){
console.warn(`Rate limit reached. Retrying in 60 seconds...`);
      await new Promise(resolve => setTimeout(resolve, 60000)); // Wait 60 seconds
      return fetchRepositories(url, headers, retries - 1);
}throw error;
  }
};
module.exports = async (req, res) => {
  const username = 'coderanik'; // Replace with the GitHub username
  const apiUrl = `https://api.github.com/users/${username}/repos?sort=created&direction=desc`;

  const GITHUB_TOKEN = process.env.GITHUB_TOKEN || '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'; 

  try {
    const response = await axios.get(apiUrl, {
      headers: {
        Authorization: `token ${GITHUB_TOKEN}` // Optional for higher rate limits
      }
    });

    // Return only the top 6 repositories
    const recentRepos = response.data.slice(0, 6);
    res.status(200).json(recentRepos);
  } catch (error) {
    console.error('Error fetching repositories:', error.message);
    res.status(error.response?.status || 500).json({ error: 'Failed to fetch repositories' });
  }
};

前端调用API并渲染仓库的代码

这部分是前端页面用来请求上述API并渲染仓库列表的代码:

async function fetchRepositories() {
  try {
    const response = await fetch('/api/repositories'); // Calls the serverless function
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    const repos = await response.json();
    renderRepositories(repos);
  } catch (error) {
    document.getElementById('repositories').innerHTML = `<p>Error fetching repositories: ${error.message}</p>`;
    console.error("Failed to fetch repositories:", error.message);
  }
}

function renderRepositories(repos) {
  const repoContainer = document.getElementById('repositories');
  repoContainer.innerHTML = ''; // Clear the loading message

  repos.forEach(repo => {
    const repoElement = document.createElement('div');
    repoElement.className = 'repo';
    repoElement.innerHTML = `
      <h3>${repo.name}</h3>
      <p>Created At: ${new Date(repo.created_at).toLocaleString()}</p>
      <p>Language: ${repo.language || 'Not specified'}</p>
      <button onclick="window.open('${repo.html_url}', '_blank')">View on GitHub</button>
    `;
    repoContainer.appendChild(repoElement);
  });
}

fetchRepositories();

本地服务器启动代码

这是我本地用来启动服务的Express代码:

const express = require('express');
const path = require('path');
const app = express();

// Serve static files
app.use(express.static(path.join(__dirname, 'public')));

// API routes
app.use('/api/repositories', require('./api/repositories'));

// Start server
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

备注:内容来源于stack exchange,提问作者Anik Das

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 12:17:58