Как я могу перезаписывать и добавлять данные в один и тот же файл несколько раз в node js

#javascript #node.js

#javascript #node.js

Вопрос:

У меня есть «clients.txt » файл, в котором у меня есть список электронных писем. Я пытаюсь запустить программу для отправки электронных писем, в которой я выбрал несколько электронных писем для использования из файла, в этом случае число равно 2. После того, как я использую два письма, которые я хочу перезаписать «clients.txt » без них. Проблема в том, что когда я пытаюсь запустить код только один раз, все работает! но если я создаю цикл, что-то не так. С нетерпением ждем любой помощи от вас, ребята. Спасибо! Я добавляю приведенный ниже код. PS: Извините за мой плохой английский!

 function readEmails(){
    const fs = require('fs');
    clients_list = fs.readFileSync('clients.txt', 'utf8').split('n');
    let filtered = clients_list.filter(function (el) {
        return el != null amp;amp; el != '';
    });
    return filtered
}
function dump_array(arr, file){
    let fs = require('fs');
    let file = fs.createWriteStream(file);
    file.on('error', function(err) { /* error handling */ });
    arr.forEach(function(v) { file.write(v   'n'); });
    file.end();
}

while_var = 0;
while (while_var < 2){
    while_var   ;
    let all_clients = readEmails();
    let selected_clients = [];
    if (all_clients.length > 0){
        selected_clients = all_clients.splice(0,2);
        dump_array(all_clients, 'clients.txt');
        console.log(selected_clients);
    }else{
        console.log('No more clients')
    }
}
  

Ответ №1:

 const fs = require('fs');

function readEmails(){
    const clients_list = fs.readFileSync('clients.txt', 'utf8').split('n');
    const filtered = clients_list
        // clear false, 0 and undefined too
        .filter(el => !!el) 
        // remove extra spaces and r symbols
        .map(el => el.trim()); 
    return filtered;
}
function dump_array(arr, file){
    // Here you need sync method. 
    fs.writeFileSync(file, arr.join('n')); 
    // And here was 'already declared' error in orginal code
}

let while_var = 0;
while (while_var   < 2){
    let all_clients = readEmails();
    let selected_clients = [];
    if (all_clients.length > 0){
        selected_clients = all_clients.splice(0,2);
        dump_array(all_clients, 'clients.txt');
        console.log(selected_clients);
    }else{
        console.log('No more clients')
    }
}
  

Комментарии:

1. В каждом цикле я хочу взять двух клиентов из clients.txt и перезаписать файл без них. Поэтому мне нужно поместить let all_clients = readEmails(); внутри цикла, потому что каждый раз будет другой clients.txt контент. Код, который вы предоставляете, не очень хорош.

2. Я хочу, чтобы в каждом цикле было два новых клиента, let selected_clients = [] и перезаписать `clients.txt — без них.

3. @popescuandrei хорошо, я исправлю это сейчас

4. @popescuandrei Я исправил код и проверил его на своей машине, работает нормально