Как освободить память после экспресс-ответа?
У меня есть маршрут в экспресс, который получает массив изображений, изменения размера и загрузки на FTP-сервер. перед запросом этого маршрута сервер использует 100 МБ памяти, во время запроса он достигает 300 МБ, а после ответа остается 300 МБ. Как я освобождаю эту память, использованную в маршруте. Что я могу делать не так? Я использую node-ftp в качестве ftp-клиента и sharpjs для изменения размера изображений.
маршрут:
app.post('/uploadFotos',upload.array('imgs'),(request,response)=> {
request.setTimeout(500000);
let contrato = request.body.contrato;
let arquivos = request.files;
ftp.listarArquivos(contrato,"",(list)=>{
if(list.arquivos.length>0){
ftp.uploadArquivos(arquivos,contrato,"original",(err, message)=>{
if(!err){
response.send(message)
}else{
console.log(message);
response.send(message);
}
});
}else{
ftp.criarPasta(contrato,(err,res)=>{
if(!err){
ftp.uploadArquivos(arquivos,contrato,"original",(err, message)=>{
delete arquivos;
if(!err){
response.send(message)
}else{
response.send("erro no upload dos arquivos");
}
});
}else{
response.send("erro ao criar pasta");
}
})
}
});
})
функции, которые делают обработку:
uploadArquivos:async function(arquivos,pasta,subpasta,callback){
if(pasta)pasta = "/"+pasta;
let numArquivos = arquivos.length;
let numArquivosSuccess =0;
//percorre todos os arquivos
for(let i = 0;i<numArquivos;i++){
let arquivo = arquivos[i];
//define um caminho para cada tamanho de imagem
let caminhoComArquivoOriginal = config.caminhoOculto+config.caminhoPadrao+pasta+"/original/"+arquivo.originalname;
let caminhoComArquivo200 = config.caminhoOculto+config.caminhoPadrao+pasta+"/200/"+arquivo.originalname;
let caminhoComArquivo800 = config.caminhoOculto+config.caminhoPadrao+pasta+"/800/"+arquivo.originalname;
let bufferOriginal = arquivo.buffer;
let buffer800 = await sharp(bufferOriginal).resize(800).toBuffer();
let buffer200 = await sharp(buffer800).resize(200).toBuffer();
let x = await uploadArquivo(bufferOriginal,caminhoComArquivoOriginal);
let x1 = await uploadArquivo(buffer800,caminhoComArquivo800);
let x2 = await uploadArquivo(buffer200,caminhoComArquivo200);
delete bufferOriginal;
delete buffer800;
delete buffer200
delete x;
delete x1;
delete x2;
}
delete arquivos;
callback("","imagens processadas");
}
function uploadArquivo(buffer,caminho){
return new Promise(
function(resolve, reject) {
c = new Client();
c.on('ready', function() {
c.put(buffer,caminho,(err)=>{
c.end();
delete c;
if(err)reject(err);
resolve("Imagem processada");
});
});
c.connect(conection);
});
}