2016-05-21 7 views
0

Ich arbeite an einer Chat-App mit socket.io/node.js, im Terminal kann ich mit einer anderen Sitzung chatten, aber wenn ich eine Nachricht an die Nachricht senden möchte, habe ich die Entweder drücken Sie die Eingabetaste oder geben Sie eine Nachricht ein, nicht die beste. Irgendwelche Alternativen zu console.log()?Nicht blockierende Eingabeaufforderung? node.js

Die console.log, die die Nick- und Nachrichtenvariablen enthält, wird ausgelöst, wenn das neue Nachrichtenereignis empfangen wird, irgendwelche Alternativen, um es in Echtzeit zu machen? Ich verwende das Prompt-Sync-Modul.

BEARBEITEN: auf Nachrichtenereignisschnipsel.

Auf Nachrichtenfunktion:

 socket.on('msg',function(data){ 

     var newmessage = data.m; 
     var newmsgnick = data.nick; 
     newmessagefunc(newmessage,newmsgnick) 

     }); 

newmessagefunc Funktion:

 function newmessagefunc(message,nick){ 
     console.log(nick+": "+message); 
     message = i("message: ") 
      } 

Die Log-Nachricht:

message: Hello - how goes? 
Ozzie: Hello - how goes? 
message: Hello - ? 
Ozzie: it goes well. 
message: 

die Meldung lesen Sie die anderen Benutzer gesendet, muss ich entweder einreichen eine Nachricht, oder einfach auf die Nachricht eingeben, werden sie nicht angezeigt, wie sie gesendet werden, wie socket.io ist s Hilfe in der Lage zu tun, irgendwelche Wege dazu?

+0

Sie ein minimales Beispiel des Codes zeigen müssen, aber wenn Sie eine onmessage Rückruf Sie sollten Ihren Chat-Bildschirm dort aktualisieren. –

+0

Ich werde das Onmessege Event Snippet hinzufügen. – FlerrElectronics

+0

Warum der Downvote? – FlerrElectronics

Antwort

0

Sie lesen eine Nachricht, wenn eine eingehende Nachricht vorliegt. Dies zwingt Sie, eine Nachricht einzugeben, bevor Sie die eingehende Nachricht anzeigen.

socket.on('msg',function(data){ 
    var newmessage = data.nm; 
    var newmsgnick = data.nn; 
    console.log(newmessage); 
}); 

Nun wird die eingehende Nachricht gedruckt. Behalten Sie den Eingabeaufforderungscode außerhalb dieses Blocks.

while(typeof message === "undefined"){ 
    message = i("message: ") 
} 
socket.emit('msg', {'nm':message, 'nn':'nick'}); 
0

Die native prompt dialog blockiert. Das bedeutet, dass der Rest des Skripts auch dann nicht ausgeführt wird, wenn neue Ereignisse empfangen werden, bis es entsperrt wird.

Die meisten verwenden ein Textfeld, um Benutzereingaben zu erhalten, und bei einem Klick auf die Schaltfläche oder einem ähnlichen Ereignis, um die Eingabe zu erfassen und die Nachricht zu posten. Auf diese Weise der socketmsg Ereignis ausgelöst werden kann, ohne es blockiert

sein

HTML

<input id="message"><button id="sendmsgbtn">Send</button> 

JS

var msgInput = document.getElementById("message"); 
var btn = document.getElementById("sendmsgbtn"); 

btn.addEventListener("click,sendMessage); 
msgInput.addEventListener("keyup",function(e){ 
    //this is used to detect if there was a enter 
    //key press inside the input 
    if(e.keyCode==13){ 
     sendMessage(); 
    } 
}); 

socket.on('msg',onMsg);  

function onMsg(data){ 
    var newmessage = data.nm; 
    var newmsgnick = data.nn; 
    console.log(newmessage); 
    //add message to chat window 
} 

function sendMsg(){ 
    var msg = msgInput.value; 
    msgInput.value = ""; 
    socket.emit("msg",{msg:msg}); 
} 
Verwandte Themen