使用節點我試圖從LDAP服務器收集用戶數據,然後將該數據寫入JSON文件。我使用下面的代碼來做到這一點:在使用JSON.stringify的Node.js中導致'進程內存不足'錯誤
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));
});
});
你是否認爲......你內存不足? :) I.e.數據太大? – freakish
@freakish我不確定是否屬於這種情況,因爲我知道其他人能夠將數據寫入文件。然而,當我向他解釋我遇到這個錯誤時,他說他沒有遇到這個問題。有沒有辦法增加可用的內存量? –
是的,購買更多的內存。 :)或殺死其他應用程序。另一個人在同一臺機器上做過這個嗎?如果不是,那麼你無法比較它。我認爲這很簡單:你內存不足。爲了解決這個問題(實際上並沒有獲得更多的RAM),你需要將數據拆分成小塊,並一次處理一塊。 – freakish