Tuesday, 2 May 2017

Synchronous readline in Nodejs

I am making POST request to Nodejs server (with Express). In POST processing, I need to read data from 3 different files and push them in 3 array. However, it seems like that res.end() occurs before the reading finishes. Can someone help fix this please, this is my process function. (response = [[],[],[]])

app.post('/process_post', urlencodedParser, function(req, res) {

    var readMail = readline.createInterface({
        input : fs.createReadStream(path.join(process.cwd(), '/mail.txt'))
    });
    var readSubject1 = readline.createInterface({
        input : fs.createReadStream(path.join(process.cwd(), '/subject1.txt'))
    });
    var readSubject2 = readline.createInterface({
        input : fs.createReadStream(path.join(process.cwd(), '/subject2.txt'))
    });

        readMail.on('line', function(line) { 
            email.push(line);
        });
        readMail.on('close', function() {
            // resolve(email);
            console.log('finish mail');

        });
        readSubject1.on('line', function(line) { sub1.push(line) }).on('close', function() {
            console.log('finish subject1');
        });
        readSubject2.on('line', function(line) { sub2.push(line) }).on('close', function() {
            console.log('finish subject2');
        });


    var response = [email, sub1, sub2];
    res.end(JSON.stringify(response));
});



via user4595537

No comments:

Post a Comment