我有一个Next.js 13 API路由,它应该能够将用户列表写入文件。我也有一个从用户json文件读取的路由。
const USERS_FILE_PATH = join(process.cwd(), '/tmp', 'data.json');
fs.writeFileSync(POSTS_FILE_PATH, JSON.stringify(users));
在我的本地机器上,我能够读取和写入文件,但是当我使用Vercel部署时,我可以读取,但写入会引发此错误:
EROFS: read-only file system, open '/var/task/tmp/data.json'
我看到here使用'/tmp'文件夹是一个我可以使用的变通方法,但它仍然不起作用。如果你能帮忙的话,我将不胜感激。
1条答案
按热度按时间ergxz8rk1#
您不是在写入
/tmp
,而是在写入./tmp
(如错误所示:/var/task/tmp
在你的情况下)。整个问题是,你的应用程序目录是不可写的(这是一件好事-你不希望有东西能够修改你的应用程序,除了通过一个新的部署),所以只要你使你的路径相对于,写在那里仍然不会工作。从
path.join
中删除process.cwd()
:然而,这听起来仍然像是一个可扩展的解决方案,因为一旦AWS破坏了您的执行环境(例如,当它没有使用时),您的数据就会消失。此外,当你有更多的流量,AWS将通过创建多个并行执行环境来扩展你的功能时,突然之间,哪个请求“看到”哪个数据将是随机的,因为每个示例都有自己的版本!相反,您需要使用数据库来实现持久性,而不是本地文件。