2014-01-10 4 views
0

JSON 데이터를 저장하기 위해 파일을 사용하고 있습니다. 내 모듈은 파일에 CRUD 작업을 수행하고 fs.readFile() 대신 json을로드하기 위해 require()을 사용하고 있습니다. 문제는 파일이 삭제 된 경우 fs.unlink()을 사용하여 require을 사용하여 파일을 다시 호출해도 방금 삭제 된 파일을로드하는 것입니다. 나는이 문제를 해결하는 방법을 조금 잃어 버렸다. 아마도 가비지 콜렉션 일까?nodejs 파일 가비지 수집에서 json이 필요합니다.

예 : require에 대한 후속 호출을 다시 드라이브에 액세스 할 필요가 없습니다 있도록

fs.writeFile('foo.json', JSON.stringify({foo:"bar"}), function(){ 

    var j = require('./foo.json') 

    fs.unlink('./foo.json', function(){ 
     console.log('File deleted') 
     var j = require('./foo.json') 
     console.log(j) 
    }) 
}) 
+1

'require'는 안정적인 파일을위한 것이며 브라우저 캐시에 있기 때문에 여전히 나타납니다. 그래서 당신의 선택은 다음과 같다 : 1. 캐시를 버스트한다. 2. 대신에'fs.readFile()'를 사용하라. 나의 표는 후자를위한 것이다. –

+0

여기에 동의 할 예정입니다. 내가 무엇보다 콜백 지옥을 줄이기 위해 찾고 있다고 생각해보십시오. @RobertHarvey이 대답을 답으로 쓰고 싶습니다. –

답변

2

require를 사용하여 모듈을로드, Node.js를 내부적으로로드 모듈을 캐시합니다. require을 사용하여로드 한 경우 .json 개의 파일에 대해서도 마찬가지입니다.

그래서 파일을 삭제했지만 그 파일이 여전히 "로드"된 것입니다.

이 문제에 대한 해결책은 앞서 언급 한 파일을로드하는 데 함수를 사용하는 것입니다 (fs.readFile()). 일단 이것을 사용하면 모든 것이 예상대로 작동합니다.

+0

이렇게 require cache를 삭제하면 - require.cache [require.resolve ('file.json')]를 삭제하면됩니다. 같은 문제 –

관련 문제