首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何解决Vercel 500内部服务器错误?

如何解决Vercel 500内部服务器错误?
EN

Stack Overflow用户
提问于 2022-05-05 19:46:29
回答 1查看 886关注 0票数 0

我创建了一个项目,该项目使用MongoDB存储用户信息,使用Next对用户进行身份验证。在本地主机上,所有这些都是无缝工作的。以前,我的下一个配置有几个错误,但现在Vercel的实时站点似乎运行得很好。一旦用户登录,他们就被重定向到“我的项目/建议”。在这个页面上,我使用getServerSideProps来标识是否存在有效的会话令牌。如果是这样,则从本地json文件中提取数据。

在活动站点上,当用户登录时,页面被重定向到"/suggestions",但是我收到了一个500个内部服务器错误页面。在函数日志中,我得到了以下错误消息:

代码语言:javascript
运行
复制
[GET] /_next/data/KpsnuV9k44lUAhQ-0rK-B/suggestions.json
10:10:57:12
2022-05-05T14:10:59.270Z    5b7a7375-045f-4518-864b-7968c3c9385f    ERROR   [Error: ENOENT: no such file or directory, open '/var/task/public/data/data.json'] {
  errno: -2,
  syscall: 'open',
  path: '/var/task/public/data/data.json',
  page: '/suggestions'
}
RequestId: 5b7a7375-045f-4518-864b-7968c3c9385f Error: Runtime exited with error: exit status 1
Runtime.ExitError

这是我使用MongoDB和明年8月的第一个项目。不太清楚这件事到底是怎么回事。在我的.env.local文件中,我只有以下两个变量:

NEXTAUTH_SECRET="MUNKNATION“NEXTAUTH_URL=http://localhost:3000

如何在本地主机上提取数据:

代码语言:javascript
运行
复制
export const getServerSideProps = async (context) => {
  const session = await getSession({ req: context.req });

  if (!session) {
    return {
      redirect: {
        destination: "/",
        permanent: false,
      },
    };
  } else {
    let filePath = path.join(process.cwd(), "public", "data", "data.json");

    let jsonData = await fs.readFile(filePath);

    const data = JSON.parse(jsonData);

    const inProgressStatusData = data.productRequests.filter(
      (item) => item.status == "in-progress"
    );

    const liveStatusData = data.productRequests.filter(
      (item) => item.status == "live"
    );

    const plannedStatusData = data.productRequests.filter(
      (item) => item.status == "planned"
    );

    let filterData = filteredData(data, "suggestion");

    let feedbackData = {
      suggestions: filterData,
      progress: inProgressStatusData,
      planned: plannedStatusData,
      live: liveStatusData,
    };

    return {
      props: { session, feedbackData },
    };
  }
};

文件夹结构:

EN

回答 1

Stack Overflow用户

发布于 2022-05-09 11:53:32

解决此问题的一个简单解决方案是在getServerSideProps中调用readFile,而不是调用readFileSync,如下所示:

代码语言:javascript
运行
复制
export const getServerSideProps = async (context) => {
...
    const file = readFileSync(
      join(process.cwd(), "public", "data", "data.json"),
      "utf8"
    );
    const data = JSON.parse(fileData);
...

我已经用Vercel测试过这个解决方案,它在开发和生产模式中正确工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72132838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档