2016-08-24 2 views
0

Wir haben einen einfachen node.js-Dienst, der auf einem Standby-Server ausgeführt wird, um Abfragen hoher Anzahl von einer Anwendung zu behandeln, um die Last auf dem Apache-Hauptserver zu entlasten.Node.js mysql-Abfrage wird nicht ausgeführt

Einer der ausgeführten Anrufe führt eine Abfrage für den anderen Server aus, führt die Abfrage jedoch manchmal nicht aus. Der Code ist hier:

app.get(/^\/rest\/[0-9]*\/*/, function (req, res) { 
    ... get controller from url 

    if (controller=='appListEvents'){ 
     console.log("appListEvents from "+req.connection.remoteAddress+" eid="+eid+" at "+getNow()); 
     var sql="SELECT * from updates where status='PENDING' and eid = "+eid+" order by stamp, id"; 
     connection.query(sql, function (error, rows, fields) { 
     res.type('application/xml'); 
     if (error) { 
      console.log("appListEvents Query error is "+error); 
      res.send('<root><response>AppListEvents Query Error</response></root>'); 
      return; 
     } 
     var xml = eventsToXml(rows); 
     res.send(xml); 
     console.log("appListEvents from "+req.connection.remoteAddress+" eid="+eid+"return XML" + xml); 
     return; 
    }) 
    console.log("appListEvents Out of connection, from "+req.connection.remoteAddress+" eid="+eid); 
    } 

Meiner Meinung nach sollte die aus der Verbindung Nachricht nie angezeigt - entweder gibt es Daten aus der Abfrage, wobei in diesem Fall einige xml zurück gesendet wird, oder es gibt keine Daten, in dem Fall Der exentsToXml gibt XML ohne Daten zurück.

Dies passiert, wie ich gerade beschrieben habe, aber SOMETIMES Anrufe an den Dienst auszulösen die Out-of-Connection-Nachricht. Die Fehlerbehandlung im if (error) Teil wird nie ausgelöst.

Alles, was ich denken kann, ist, dass Abfragen gelöscht werden, weil ich die Datenbank überlasten möchte: Wie schütze ich mich vor allem, was schief läuft?

Antwort

1

Die Nachricht Out of connection sollte jederzeit angezeigt werden, da der Aufruf connection.query() asynchron ausgeführt wird.

+0

Also, auf dieser Basis sollte Out of connection * immer * (mit beliebiger Verzögerung) entweder durch den console.log Fehler oder die console.log Erfolgsmeldung folgen? (Wenn der asynchrone Callback schließlich ausgeführt wird) –

+0

Ich denke, es wird immer so funktionieren –

Verwandte Themen