Im writing little scrap tool with Node(Express) searching urls from list. Problem is with access to results of search outside of request callback function in forEach loop. Please help - why results array are empty outside request? I want exports this results to the view. Also any variable defined inside request is not defined from outside. Here my code:
var express = require('express');
var request = require('request');
var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({ extended: false });
var fs = require("fs");
var app     = express();
app.get('/scrap/',function(req,res){
    res.render('start.ejs');
});
app.post('/scrap/result', urlencodedParser, function(req,res){
        var lista = req.body.lista;
        var phrase = req.body.phrase;        
        var l = lista.split('\n');
        var results = [];  // declaring results array       
        l.forEach(function(elem) {            
            request(elem, function(error, response, html) {
                try {
                if (html.indexOf(phrase) > 0) {
                var result = 'Phrase "' + phrase + '" found';
                }
                else {
                  var result = 'Phrase "' + phrase + '" not found';
                }                
              }
              catch(err) {
                var result = 'Error: '+ err.message;
              }
             results.push(result);             
             console.log(results) // here results array is filled with result
            });
           console.log(results); // results array is empty
        });  
         console.log(results); // results array is also empty
            res.render('result.ejs', { 
                  result : results[0],
                  phrase : phrase, 
            });     
}); 
app.use(function(req, res, next){
    res.redirect('/scrap');
});
app.listen(3000);
 
    