Với nút Tôi đang cố gắng thu thập dữ liệu người dùng từ máy chủ LDAP và sau đó ghi dữ liệu đó vào tệp JSON. Tôi đang sử dụng đoạn mã sau để làm điều này:Trong Node.js sử dụng JSON.stringify dẫn đến lỗi 'process out of memory'
fs.writeFile('data.json', JSON.stringify(data, null, 4));
Vấn đề là phương pháp JSON.stringify
đang gây ra các lỗi sau:
FATAL ERROR: JS Allocation failed - process out of memory
tôi biết vấn đề là với JSON.stringify
vì nếu tôi sử dụng console.log
hơn fs.writeFile
Tôi gặp lỗi tương tự.
Tôi đang cố ghi nhiều dữ liệu (hơn 500 mục nhập trong cơ sở dữ liệu LDAP). Có ai biết làm thế nào tôi có thể nhận được điều này để làm việc? Đây là mã đầy đủ:
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));
});
});
Bạn có nghĩ rằng ... bạn đã hết bộ nhớ? :) I E. dữ liệu quá lớn? – freakish
@freakish Tôi không chắc chắn nếu đó là trường hợp bởi vì tôi biết ai đó khác đã có thể ghi dữ liệu vào một tập tin. Tuy nhiên, khi tôi giải thích cho anh ấy tôi đã nhận được lỗi này, anh ấy nói anh ấy đã không gặp vấn đề này. Có cách nào tôi có thể tăng số lượng bộ nhớ có sẵn không? –
Vâng, mua thêm RAM. :) Hoặc giết các ứng dụng khác. Người khác đã làm điều này trên cùng một máy? Nếu không, thì bạn không thể so sánh nó. Tôi nghĩ rằng điều này đơn giản như thế: bạn đã hết trí nhớ. Để xử lý vấn đề này (không thực sự nhận được nhiều RAM hơn), bạn cần chia nhỏ dữ liệu thành các phần nhỏ hơn và xử lý từng phần một. – freakish