在使用JSON.stringify的Node.js中导致“进程内存不足”错误

使用节点我试图从LDAP服务器收集用户数据,然后将这些数据写入JSON文件。 我正在使用下面的代码来执行此操作:

fs.writeFile('data.json', JSON.stringify(data, null, 4)); 

问题是JSON.stringify方法导致以下错误:

 FATAL ERROR: JS Allocation failed - process out of memory 

我知道问题是与JSON.stringify因为如果我使用console.log而不是fs.writeFile我得到相同的错误。

我正在尝试编写大量数据(在LDAP数据库中有超过500个条目)。 有谁知道我怎么能得到这个工作? 这是完整的代码:

 var ldap = require('ldapjs'); var util = require('util'); var fs = require('fs'); var client = ldap.createClient({ url: '************' }); client.bind('CN=**********,OU=Users,OU=LBi UK,OU=UK,DC=********,DC=local', '*********', function(err) { if (err) { console.log(err.name); } }); // taken from http://ldapjs.org/client.html client.search('OU=Users,OU=******,OU=UK,DC=******,DC=local', { scope: 'sub', filter: 'objectClass=organizationalPerson', attributes: ['givenName', 'dn', 'sn', 'title', 'department', 'thumbnailPhoto', 'manager'] // filter by organizational person }, function(err, res) { if (err) { console.log(err.name); } var limit = 1; var data = {"directory": []}; res.on('searchEntry', function(entry) { var obj = {}; entry.attributes.forEach(function (attribute) { var value; if (attribute.type === 'thumbnailPhoto') { value = attribute.buffers[0]; } else { value = attribute.vals[0]; } obj[attribute.type] = value; }); data.directory.push(obj); }); res.on('error', function(err) { console.log('error: ' + err.message); }); res.on('end', function(result) { fs.writeFile('data.json', JSON.stringify(data, null, 4)); }); }); 

正如@freakish提到的问题是我的数据太大了。

数据如此之大的原因是由于大量的图像被作为对象返回。 最后,我所需要做的就是使用缓冲区将对象编码为base64,然后数据的大小变得更易于pipe理。

有些事情正在recursion地发生。

确保你的对象data不包含任何循环引用,比如对于this或其他难以序列化的东西。