我有一個運行在Express(v3.4.8)上的Node應用程序(v0.8.26)。在那個應用程序中,我有一個在響應主體中發送對象數組的路由。我發現,立即開始啓動節點內存使用,不久之後所有內容都會關閉。我有點絕望,所以我希望有人能夠幫助(快速)。節點JS內存泄漏?
這裏是我的路線:
get_products: function(req, res) {
var san = req.params.san;
// Authenticate and then retrieve
client.login(datasources.api.auth.sourceId, datasources.api.auth.password, function(err, authToken) {
if (err) {
return res.send(401, err);
}
client.getProducts(token, san, function(err, products) {
if (err) {
var httpStatus = err.httpStatus || 500;
if (httpStatus === 500) {
console.trace(err);
}
return res.send(httpStatus, err.message);
}
if (products) {
return products.length > 0
? res.send(200, products) // <--- ERROR OCCURS HERE
: res.send(200, []);
}
else {
return res.send(403, 'Purchase is not allowed at this time.');
}
});
});
},
和數組返回這個樣子的:
[ { PRODUCTID: '7',
PRODUCTNAME: 'Token 1',
QTY: '500',
PRICE: '5',
AVAILABLE: '1',
PRODUCTTYPE: '1',
BILLINGDEALNAME: 'Token 1' },
{ PRODUCTID: '8',
PRODUCTNAME: 'Token 2',
QTY: '1000',
PRICE: '9',
AVAILABLE: '1',
PRODUCTTYPE: '1',
BILLINGDEALNAME: 'Token 2' },
{ PRODUCTID: '9',
PRODUCTNAME: 'Token 3',
QTY: '2000',
PRICE: '16',
AVAILABLE: '1',
PRODUCTTYPE: '1',
BILLINGDEALNAME: 'Token 3' },
{ PRODUCTID: '5',
PRODUCTNAME: 'Token - Free',
QTY: '500',
PRICE: '0',
AVAILABLE: '0',
PRODUCTTYPE: '0',
BILLINGDEALNAME: 'Token - Free Token Use' },
{ PRODUCTID: '6',
PRODUCTNAME: 'Token - Prepaid',
QTY: '500',
PRICE: '0',
AVAILABLE: '0',
PRODUCTTYPE: '0',
BILLINGDEALNAME: 'Token - Prepaid Token Use' } ]
我知道這不是一噸的信息,但它是我的一切。如果我強制路由在響應中返回空數組,則沒有問題。我不知道還有什麼可以看的。
幫助?
UPDATE
我稍微調整了代碼進行調試。三元運營商已經拋棄:
if (products.length > 0) {
//return res.send(200, []);
console.error('RETURNING PRODUCTS');
console.error(products);
// return res.send(200, []);
return res.send(200, products);
}
else {
return res.send(200, []);
}
你可以試試'res.json(200產品);返回;'? – Gntem
立即嘗試,但我無法想出一個原因,這將有任何不同的行爲。你覺得它可能做什麼? –
而不是返回一個'res.send'方法,你最好調用方法並使用'return'來終止,有時在異步調用中它會繼續在回調中執行代碼..我可能是這裏的問題。 – Gntem