getServerSideProps 函数响应无法在 Next.js

时间:2021-04-21 22:17:35

标签: javascript node.js next.js

我正在构建一个具有多页动态路由的 Next.js 应用程序。每个页面都有多个使用 useEffect 调用的后端 axios 调用。我的目标是使用 getServerSideProps 函数调用这些函数以提高速度,因为应用程序已扩展到可容纳更大的用户数据库。

我的问题是当我尝试从数据库接收电子邮件时,出现错误:

错误:序列化从“/emails”中的 getServerSideProps 返回的 .allEmails.config.transformRequest[0] 时出错。 原因:函数无法序列化为 JSON。请仅返回 JSON 可序列化数据类型。

我想接收电子邮件并将其传递到 props 中,然后我可以访问页面上的数据。

import React, { useState, useEffect, useContext } from 'react';
import axios from 'axios';
import jsHttpCookie from 'cookie';
import jsCookie from 'js-cookie';

const Emails = ({allEmails}) => {

const [emails, setEmails] = useState(allEmails);

return (
    <></>
  )
}

export async function getServerSideProps({req, res}) {
    const {token} = jsHttpCookie.parse(req.headers.cookie);
    const allEmails = await axios.get("http://localhost:8000/api/allCompanyEmails");
    console.log(allEmails, "all data")
  
    return {
        props: {
          allEmails
        }
    }
  }

export default Emails;

1 个答案:

答案 0 :(得分:3)

allEmails其实就是AxiosResponse type,不是你从api获取的数据。并且它包含不可序列化的东西,比如函数等等。

要获取您需要访问此响应的 data 属性的数据:

export async function getServerSideProps({req, res}) {
    const {token} = jsHttpCookie.parse(req.headers.cookie);
    const response = await axios.get("http://localhost:8000/api/allCompanyEmails");
    console.log(response, "all data")
  
    return {
        props: {
          allEmails: response.data
        }
    }
  }