我创建了一个项目,该项目使用MongoDB存储用户信息,使用Next对用户进行身份验证。在本地主机上,所有这些都是无缝工作的。以前,我的下一个配置有几个错误,但现在Vercel的实时站点似乎运行得很好。一旦用户登录,他们就被重定向到“我的项目/建议”。在这个页面上,我使用getServerSideProps来标识是否存在有效的会话令牌。如果是这样,则从本地json文件中提取数据。
在活动站点上,当用户登录时,页面被重定向到"/suggestions",但是我收到了一个500个内部服务器错误页面。在函数日志中,我得到了以下错误消息:
[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
如何在本地主机上提取数据:
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 },
};
}
};
文件夹结构:
发布于 2022-05-09 11:53:32
解决此问题的一个简单解决方案是在getServerSideProps
中调用readFile
,而不是调用readFileSync
,如下所示:
export const getServerSideProps = async (context) => {
...
const file = readFileSync(
join(process.cwd(), "public", "data", "data.json"),
"utf8"
);
const data = JSON.parse(fileData);
...
我已经用Vercel测试过这个解决方案,它在开发和生产模式中正确工作。
https://stackoverflow.com/questions/72132838
复制相似问题