getServerSideProps 返回布尔值时序列化错误

时间:2021-02-26 16:24:21

标签: reactjs next.js

我收到以下错误,当我使用 getServerSideProps 函数在道具时间线内返回时,只是一个布尔值。

我不知道我做错了什么。

export async function getServerSideProps({ params }) {
  const id = params.id;
  const timeline = await verifyTimelineID(id);

  return {
    props: {
      timeline,
    },
  };
}

我的函数仅在存在带有已发送 ID 的事件时返回,并且返回 true 或 false。

export async function verifyTimelineID(id) {
  axios
    .get(`${process.env.NEXT_PUBLIC_API_URL}/events/${id}`)
    .then(() => {
      return { exists: true };
    })
    .catch(() => {
      return { exists: false };
    });
}

错误输出:

Error: Error serializing `.timeline` returned from `getServerSideProps` in "/timeline/[id]".
Reason: `undefined` cannot be serialized as JSON. Please use `null` or omit this value.

1 个答案:

答案 0 :(得分:1)

只需尝试从 verifyTimelineID 返回值并像这样编辑它。


export async function verifyTimelineID(id) {
  return axios
    .get(`${process.env.NEXT_PUBLIC_API_URL}/events/${id}`)
    .then(() => {
      return { exists: true };
    })
    .catch(() => {
      return { exists: false };
    });
}

另外我认为在这里使用 async await 更好一些,如下所示。


export async function verifyTimelineID(id) {
    try {
        await axios.get(`${process.env.NEXT_PUBLIC_API_URL}/events/${id}`)
        return { exists: true };
    } catch(e) {
        return { exists: false };
    }
}

我认为这是一种更简洁、更好的语法