Nodeを使用して、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));
});
});