Проблема с конкатенацией строки в NodeJS: данные, отправленные в ответе, пусты - PullRequest
1 голос
/ 31 марта 2020

Этот код предназначен для добавления данных и отправки их клиенту. Но данные не добавляются. Пожалуйста, помогите

app.post('/api/display', (req,res) => {
   let data = "";
   const bod = req.body;
   var input = fs.createReadStream('sample.txt');

   var r1 = require('readline').createInterface({
      input: input
   });

   r1.on('line', function(line) {
      var ar = line.split("=");
      var valuetypestring = ar[0].split(" ");
      var valuetype = valuetypestring[0];
      var valuestring = ar[1].split(" ");
      var value = valuestring[1];
      for(var attributename in bod){
         if(valuetype==attributename){
            //console.log is giving the output
            console.log(`${valuetype}:${value} new value:${bod[attributename]}`); 
            //The data doesnt get appended
            data+=`${valuetype}:${value} new value:${bod[attributename]}`; 
         }
      }    
   });
   res.send(data); //Here the string is sent empty
});

1 Ответ

1 голос
/ 31 марта 2020

Readline, как и многие другие модули, асинхронный . Это означает, что он не блокирует выполнение вашего кода во время ожидания данных. Итак, вы начали прослушивать строку, но не дожидались окончания отправки данных sh для вызова res.send(data). Что вы хотите сделать, это изменить строку:

res.send(data);

на

r1.on("close", function() {
    res.send(data);
});

, чтобы вы знали, что данные были получены. Затем, когда вы вводите данные с консоли, вы можете нажать Ctrl+D, чтобы показать, что все строки были отправлены. Если вы хотите получить только одну строку, вам не нужно ждать события close, вы можете просто переместить res.send(data) в обработчик строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...