2017-12-26 1 views
0

Ich kodiere einen Server mit Node.js und ExpressJS.Wie man die Reaktion des ExpressJS-Servers auf eine POST-Anfrage nach einer Zeitüberschreitung aktualisiert

Das Problem ist, dass es eine Situation geben wird, in der der Client eine POST-Anfrage sendet, die dem Server mitteilt, dass ein externes Gerät nach oben oder unten bewegt werden soll.

Ich möchte, dass der Server eine erste Antwort auf diese POST-Anfrage sendet, die besagt, dass sich das Gerät bewegt. Wenn das Gerät stoppt, sendet es diese Informationen an den Server. Dann möchte ich den Körper der Antwort ändern, so dass es besagt, dass das Gerät gestoppt wurde.

Ist dies im Kontext einer Antwort auf eine POST-Anfrage möglich?

Für jetzt habe ich etwas verspotteten Code vorbereitet, was ich erreichen möchte. Die setTimeout Funktion simuliert die Gerätebewegung. Das Ende der Timeout ‚simuliert‘ Anhalten der Vorrichtung zu bewegen (das heißt, sie bewegt den ganzen Weg bis)

res.send("MOVING"); 
setTimeout(function() { 
    if (req.body.direction === "UP") { 
     res.send("OPENED"); 
    } else { 
     res.send("CLOSED"); 
    } 
}, 1000); 

Ich weiß, dass res.send() wird die Verbindung zwischen dem Server beenden und den Kunden. Es ist nur dort platziert, um besser zu visualisieren, was ich erreichen möchte. Ich denke, dass es früher in ExpressJS res.write() gab, aber es wird nicht mehr in den Dokumenten erwähnt. Ich fand auch ein npm-Paket namens express-mung, aber ich glaube nicht, dass ich es parametrisieren kann (abhängig von dem Wert wird der Wert der zweiten Antwort anders sein).

+1

emittieren Ich denke, es kann nicht mit http getan werden. Aber Sie können Websockets versuchen, indem Sie socket.io verwenden – Gary

Antwort

0

Soweit ich weiß, ist dies nicht im Bereich der HTTP-Anfragen. Es sollte nur eine Antwort geben.

Für Ihre Anforderung empfehle ich die Verwendung von Websockets.

https://socket.io/ ist eine der beliebtesten Möglichkeiten.

In einfachen Worten, Sie werden einen WebSocket-Server zusammen mit Ihrem ExpressJs-Server haben. Auf der Client-Seite verwenden Sie den SocketIo-Client, um ein Ereignis zu senden. Nach dem Empfang des Ereignisses gibt der Server das erste Ereignis (MOVING) an die Ziel-Socket-Verbindung zurück. Dann nach dem Timeout, wird es ein anderes Ereignis (Geöffnet oder geschlossen)

Verwandte Themen