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);