Per imparare node.js sto creando una piccola app che ottiene alcuni feed rss archiviati in mongoDB, li elabora e crea un singolo feed (ordinato per data) da questi.La richiesta express viene richiamata due volte
Analizza un elenco di ~ 50 feed RSS, con ~ 1000 articoli del blog, quindi è piuttosto lungo analizzare il tutto, quindi ho impostato il seguente req.connection.setTimeout(60*1000);
per ottenere un tempo sufficiente per recuperare e analizzare tutti i feed.
Tutto funziona abbastanza bene, ma la richiesta viene chiamata due volte. (Ho controllato con wireshark, non penso che si tratti di favicon qui).
Davvero non capisco.
È possibile testare qui: http://mighty-springs-9162.herokuapp.com/feed/mde/20 (dovrebbe creare un feed RSS con gli ultimi 20 articoli su "mde").
Il codice è qui: https://github.com/xseignard/rss-unify
E se ci concentriamo sui bit interessanti:
Ho un percorso definito in questo modo: app.get('/feed/:name/:size?', topics.getFeed);
E il topics.getFeed
è come questo:
function getFeed(req, res) {
// 1 minute timeout to get enough time for the request to be processed
req.connection.setTimeout(60*1000);
var name = req.params.name;
var callback = function(err, topic) {
// if the topic has been found
if (topic) {
// aggregate the corresponding feeds
rssAggregator.aggregate(topic, function(err, rssFeed) {
if (err) {
res.status(500).send({error: 'Error while creating feed'});
}
else {
res.send(rssFeed);
}
},
req);
}
else {
res.status(404).send({error: 'Topic not found'});
}};
// look for the topic in the db
findTopicByName(name, callback);
}
Quindi niente di eccezionale, ma ancora, questa funzione di getFeed viene chiamata due volte.
Cosa c'è che non va? Qualche idea?
problema più comune è che da qualche parte ci si dimentica di usare 'return' –
Ciao mvbl-FST, che non si ottiene quello che si intende per dimenticare' '' return'''. Puoi spiegare di più? –
Potrei sbagliarmi riguardo a quanto sopra e in questo codice nulla si distingue per farlo eseguire due volte (eccetto favicon.ico ma hai detto che è fuori questione). L'unica cosa che farei è 'return findTopicByName (name, callback);'. Ma piuttosto sicuro che non sarà di aiuto. –