2016-08-12 4 views
1

Ich arbeite an Knoten js Web-Anwendung und ich mache eine HTTP-Abfrage, die eine db Adresse und nimmt Daten über Abfrage.Wie Cache von http entfernen Get auf Knoten request js

Die http Get-Anfrage funktioniert gut auf Chrom, aber auf IE jeder get wird nicht aktualisiert, aber von einer Art Cache zurückgegeben. Das bewirkt, dass das Ergebnis der DB-Abfrage nicht aktualisiert wird (weil es aus dem Chache stammt).

Ich kann sehen, dass es von chache Form F12 Entwicklerwerkzeug in IE genommen wird:

enter image description here

Mein Code unten. Ich weiß, dass ich so etwas hinzufügen sollte:

res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); 

auf meine Anfrage, aber ich denke, dass ich vielleicht an der falschen Stelle diese Zeile setzen beacuse die bekommen reuqest noch von chache genommen und gibt mir schlechtes Ergebnis ...

Client

$http.get('/users') 

.success(function(data) { 
    $scope.usersNumber = data.length; 

}) 
.error(function(data) { 
    console.log('Error: ' + data); 
}); 

Server

app.get('/users', function(req, res){ 
    get_user(req, res); 
}); 

var get_user= function(req, res){ 

    var query= User_session.find(); 
    query.exec(function(err, docs){ 
     res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); 

     res.json(docs); 
     //mongoose.connection.close(); 

    }); 

} 

Antwort

1

Versuchen Hinzufügen max-age zu Ihrem heade r:

Die Antwort, die Sie von den Entwicklertools erfasst haben, zeigt, dass die Antwort aus dem Cache abgerufen wird. Die zwischengespeicherte Antwort hatte einen Expires-Header, der die Dauer angibt, für die die Antwort aus dem Cache abgerufen werden kann und nicht als veraltet gilt.

Sie würden wollen, gehören ein no-cache Direktive für End-to-End-reload

Die Anforderung enthält eine "no-cache" Cache-Control-Richtlinie oder für Kompatibilität mit HTTP/1.0-Clients , "Pragma: no-cache". Feldnamen DÜRFEN NICHT mit der No-Cache-Direktive in einer Anfrage enthalten sein. Der -Server darf keine zwischengespeicherte Kopie verwenden, wenn er auf eine solche Anfrage antwortet.

Referenz: https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

Sie können auch diese andere Lösung versuchen Client neu geladen zu zwingen. Fügen Sie Ihrer URL einen Abfragezeichenfolgenparameter hinzu. Beispiel: Wenn Sie ein/Benutzer haben, statt die URL machen als/users uniqstamp = < Zeitstempel>

Ihr Browser immer denkt, dass der gesamte Pfad einschließlich der Abfrage-String eine URL macht?. So bekommen Sie immer eine 200 in Ordnung, die frisch serviert wird. Stellen Sie sicher, dass der von Ihnen verwendete Zeitstempel aus der JavaScript-Zeit in Millis stammt, sodass der Zeitstempel immer eindeutig ist.

+0

danke, versuchte es, aber ich bekomme immer noch Ergebnisse von chache – Matoy

+0

Ich aktualisierte mit dem Pragma: No-Cache für HTTP/1.0-Clients. – randominstanceOfLivingThing

+0

Hat es funktioniert? Ich fügte auch eine andere Technik hinzu, um Caching zu verhindern. – randominstanceOfLivingThing