EROFS: read-only file system
PATCH
, DELETE
등의 요청을 할 때
EROFS: read-only file system, open ...
라는 오류가 발생했다.
아니 뭔 read-only
인가 싶어서 구글링을 좀 해보고 힌트를 얻어 해결했던 것 같다.
This error is most often caused by attempts to write data from a serverless function to a read-only file at runtime. You can work around this by using /tmp if you only need temporary storage, as mentioned in an another comment thread. If you need persistent storage, then a more permanent data storage service is needed. There are some database integration options that can make it pretty easy to set up!
/tmp
라는 임시 폴더에 위치한 파일들 빼고는 read-only
이기 때문에 수정을 못하는 것이라고 이해했다.
json-server
라는 상황에 맞을만한 마땅한 해결법은 잘 찾기 힘들어서
그냥 직접 tmp폴더에 db.json을 이동시켜 사용할 수 있도록 구성해보았다.
const fs = require("fs");
const os = require("os");
fs.copyFile("db.json", os.tmpdir() + "/db.json", function (err) {
if (err) console.log(err);
else console.log("copy file succeed to" + os.tmpdir());
});
os
라는 모듈에 tmpDir()
이라는 os에 맞는 tmp
폴더 경로를 찾아주는 메소드가 있길래 사용했고
그곳으로 프로젝트 내 루트에 있는 db.json
을 복사하도록 하였고
const server = jsonServer.create();
const router = jsonServer.router(path.resolve(os.tmpdir() + "/db.json"));
/tmp
에 있는 db.json
을 DB처럼 router
가 사용할 수 있게 설정해주었다.
밑에 넣어둔 레퍼런스를 보고 했으면 파일 복사가 아니라
파일 sync
를 해서 쓰기만 /tmp
로 줄 수 있었을 것 같아 아쉽긴 하지만
어쨌든 생각한 대로 진행하니 해결이 되었서 좋았다!