Express-Anfrage wird zweimal aufgerufen
Lernen node.js ich bin momentan dabei, eine kleine app, bekommen einige rss-feeds gespeichert in mongoDB auf, Bearbeiten Sie und erstellen Sie einen einzigen feed (nach Datum sortiert) von diese.
Analysiert eine Liste von ~50 rss-feeds, mit ~1000 blog-Artikel, so es ist ziemlich lange zu analysieren, das ganze, also habe ich den folgenden req.connection.setTimeout(60*1000);
erhalten Sie eine lange genug Zeit, heraus zu Holen und zu analysieren, alle feeds.
Läuft alles ganz Prima, aber die Anfrage ist zweimal genannt. (Ich habe mit wireshark, ich glaube nicht, dass es über favicon hier).
Ich wirklich nicht bekommen, es.
Test können Sie sich selbst hier : http://mighty-springs-9162.herokuapp.com/feed/mde/20 (es sollte erstellen Sie einen rss-feed mit den letzten 20 Artikeln über die "mde").
Der code ist hier: https://github.com/xseignard/rss-unify
Und wenn wir uns auf die interessanten bits :
Habe ich eine route die wie folgt definiert sind : app.get('/feed/:name/:size?', topics.getFeed);
Und die topics.getFeed
ist wie folgt :
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);
}
Also nichts ausgefallenes, aber immer noch, das getFeed-Funktion zweimal aufgerufen.
Was stimmt da nicht? Irgendeine Idee?
- Häufigste problem ist, dass irgendwo vergessen
return
- Hallo mvbl-fst, ich verstehe nicht, was du meinst, durch das vergessen
return
. Können Sie mehr erklären? - Ich könnte falsch sein über die oben beschriebenen und in diesem code steht nichts heraus, um es auszuführen zweimal (außer favicon.ico aber Sie sagte, es ist aus der Frage). Das einzige, was ich tun würde, tun
return findTopicByName(name, callback);
. Aber ziemlich sicher, dass es nicht helfen wird. - Ich habe versucht deinen Tipp, aber mit kein Glück. Ich kann wirklich nicht herausfinden, was das problem...
- können Sie es hinzufügen, um git so kann ich ziehen und sehen, was Los ist???
- vielen Dank für Ihre Geduld "mvbl fst", hier ist das repo: github.com/xseignard/rss-unify, die ich begangen, Ihre
return
Idee. Um die Dinge laufen lokal, benötigen Sie eine mongodb läuft auflocalhost:27017
mit einer db namens "topicsDB', und dann können Sie gehen in den utils-Ordner und machen Sie einennode populateDB.js
um einige Daten in die db. Nochmals vielen Dank für Ihre Geduld. - Ich werde ziehen und laufen morgen.
- Also machte ich einige weitere Untersuchungen, und es scheint nur zufällig mit Chrom und Chrom nehme ich an), mit firefox ist es nicht Auftritt.
- Sehen Sie, welche Anforderungen es ist damit im Netzwerk"?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das hat mich geärgert, für eine lange Zeit. Es ist am wahrscheinlichsten, dass die Firebug-Erweiterung, die senden ein Duplikat jeder GET-Anforderung in den hintergrund. Deaktivieren von Firebug, um sicherzustellen, dass ist nicht das Problem.
Wenn du favicon auf Ihrer Website, entfernen Sie es und versuchen Sie es erneut. Wenn Ihr problem behoben wird, überarbeiten Sie Ihre favicon-url
Mache ich mehr oder weniger die gleiche Sache jetzt, und bemerkte die gleiche Sache.
Ich Teste meine server durch Eingabe des api-Adresse in chrome wie diese:
http://127.0.0.1:1337/links/1
meine Node.js server wird dann reagiert mit einem json-Objekt abhängig von der id.
Ich eine Konsole in die Methode get und bemerkt, dass, wenn ich ändern Sie die id in der Adressleiste von chrome, sendet er eine Anfrage (vor dem drücken der enter zum eigentlichen senden der Anfrage) und der server akzeptiert andere Anfrage, nachdem ich eigentlich drücken Sie die EINGABETASTE. Dies geschieht mit und ohne den chrome-dev-console öffnen.
IE 11 scheint nicht zu funktionieren in der gleichen Weise, aber ich habe keinen Firefox installiert jetzt.
Hoffe, dass jemand hilft, auch wenn dies war eine Art alten thread 🙂
/J
müssen Sie möglicherweise erhöhen Sie den timeout noch mehr. Ich habe nicht gesehen, die express-source, aber es klingt einfach für die Wartezeit, es zu versuchen.
Sicherzustellen, dass Sie geben, res.send(); Die axios-Aufruf erwartet einen Wert vom server und damit zurück sendet eine Verbindungsanfrage nach 120 Sekunden.
Traf ich das gleiche problem. Dann habe ich versucht zu hinzufügen zurückzukehren, hat es nicht funktioniert. Aber es funktioniert, wenn ich return res.redirect('/Pfad');
Ich hatte das gleiche Problem, dies zu tun mit Express 4. Ich glaube, es hat zu tun mit ow es löst request-params. Die Lösung ist, um sicherzustellen, dass Ihre
params
gelöst werden, beispielsweise durch eine überprüfung in einemif
block.