-
Notifications
You must be signed in to change notification settings - Fork 76
Open
Labels
Description
My Node.js application reports insufficient memory. The timing seems to coincide with the TTL (Time to Live) of node-persist, and when I inspect the source code, I observe that node-persist appears to be reading all files into the RAM...
readDirectory: function (dir) {
return new Promise((resolve, reject) => {
//check to see if dir is present
fs.access(dir, (accessErr) => {
if (!accessErr) {
//load data
fs.readdir(dir, async (err, arr) => {
if (err) {
return reject(err);
}
let data = [];
try {
for (let currentFile of arr) {
if (currentFile[0] !== '.') {
data.push(await this.readFile(path.join(this.options.dir, currentFile))); //PUSH all file content(text)
}
}
} catch (err) {
reject(err)
}
resolve(data);
});
} else {
reject(new Error(`[node-persist][readDirectory] ${dir} does not exists!`));
}
});
});
},
readFile: function (file, options = {}) {
return new Promise((resolve, reject) => {
fs.readFile(file, this.options.encoding, (err, text) => {
if (err) {
/* Only throw the error if the error is something else other than the file doesn't exist */
if (err.code === 'ENOENT') {
this.log(`${file} does not exist, returning undefined value`);
resolve(options.raw ? '{}' : {});
} else {
return reject(err);
}
}
let input = options.raw ? text : this.parse(text);
if (!options.raw && !isValidStorageFileContent(input)) {
return this.options.forgiveParseErrors ? resolve(options.raw ? '{}' : {}) : reject(new Error(`[node-persist][readFile] ${file} does not look like a valid storage file!`));
}
resolve(input); //Resolve Text
});
});
},