我正在构建一个具有多页动态路由的 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;
答案 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
}
}
}