ctx.req 获取不到数据

来源:7-11 Github接口代理完善

Tirsky1683388

2021-07-15

老师请问我在重新部署github接口的时候遇到这个问题,首次渲染时可以正常显示页面,但是一旦我刷新页面, 就会报错提示我index页面的 Index.getInitialProps 初始化时ctx是 undefined, 给我感觉是我无法接收服务器的api数据,但具体不清楚是哪里出了问题?
这是Index.js的代码:

const api = require("../lib/api");

function Index({ data }) {
  console.log(data);
  return <span>Index</span>;
}

Index.getInitialProps = async ({ ctx }) => {

  const result = await api.request(
    {
      url: "/search/repositories?q=react",
    },
    ctx.req,
    ctx.res
  );

  return {
    data: result.data,
  };
};

export default Index;

这是lib文件夹下的api.js文件代码:

const axios = require("axios");

const GITHUB_BASE_URL = "https://api.github.com";

const isServer = typeof window === "undefined";

async function requestGithub(method, url, data, headers) {
  return await axios({
    method,
    url: `${GITHUB_BASE_URL}${url}`,
    data,
    headers,
  });
}

async function request({ method = "GET", url, data = {} }, req, res) {
  if (!url) {
    throw Error("url must be provide");
  }
  if (isServer) {
    const { session } = req;
    const { githubAuth } = session || {};
    const { access_token, token_type } = githubAuth || {};
    const headers = {};
    if (githubAuth && access_token) {
      headers["Authorization"] = `${token_type} ${access_token}`;
    }
    return await requestGithub(method, url, data, headers);
  } else {
    return await axios({
      method,
      url: `/github${url}`,
      data,
    });
  }
}

module.exports = {
  request,
  requestGithub,
};
写回答

1回答

Tirsky1683388

提问者

2021-07-16

已解决。。在index.js文件里面getInitialProps的时候解构直接拿req和res就可以,解构出的ctx反而是拿不到任何数据的,从而导致下面ctx.req报错

0
1
Jokcy
好的,赞!
2021-07-17
共1条回复

全栈进阶课程 React16.8+Next.js+Koa2一步到位开发Github

学习React/Next.js服务端渲染SSR同构设计方案,理解OAuth登录体系的实现原理

651 学习 · 311 问题

查看课程