2016-07-01 4 views
0

Ich versuche mit socket.io + eckig eine Chat-Room-Webanwendung zu erstellen.socket.io - kann keine Nachrichten an einen bestimmten Raum in einem Socket senden

Ich habe ein spezielles Textfeld, in dem der Benutzer den Namen des Raums eingeben, den er verbinden möchte. dann versuche ich, diesen Benutzer mit diesem bestimmten Raum zu verbinden und alle seine Nachrichten in diesen Raum zu senden.

Wenn ich jedoch versuche, einen String in den Chat zu senden, wird die Anfrage auf der Serverseite bearbeitet (die Konsolenprotokollausgabe wird vom Server gedruckt), aber nicht auf dem Controller socket.on ('chat_message' , Funktion (Daten) ...) Methode druckt es nicht Konsolenprotokoll.

was mache ich falsch?

der Code ist unten. Es gibt mehr Code, den ich nicht für erforderlich halte (angular related stuff).

Vielen Dank im Voraus

Ansicht

<form ng-submit="submit()"> 
    <input autocomplete="off" ng-model="insertedText" type="text" /> 
    <button type="button" ng-click="submit()"> 
    Send 
    </button> 
</form> 

Controller

mymodule.controller("cntrlChat", ['$scope', 'myService', 
    function($scope, myService){ 
    var socket = io(); 
    $scope.messages = []; 
    $scope.room= myService.get(); 
    socket.emit('room', $scope.room); 

    $scope.submit=function(){ 
    socket.emit('chat_message',{ room: $scope.room, msg: $scope.user+": "+$scope.insertedText }); 
    $scope.insertedText=''; 
    return false; 
    } 

    socket.on('chat_message', function(data){ 
    console.log('room-->'+data.room+' msg---->'+data.msg); 
    $scope.$apply(function() { 
     $scope.messages.push(data.msg); 

    }); 
    }); 

}]); 

Server

var express = require('express'); 
var app = express(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

app.use(express.static(__dirname + '/')); 

app.get('/', function(req, res){ 
    res.sendFile(__dirname + '/index.html'); 
}); 

io.on('connection', function(socket){ 
io.emit('chat_message', "welcome"); 

socket.on('room', function(room) { 
    socket.join(room); 
}); 

socket.on('chat_message', function(data){ 
    console.log("room---->"+data.room, "msg---->"+data.msg); 
    io.sockets.in(data.room).emit('chat message',data.msg); 
}); 


socket.on('disconnect', function(){ 
    io.emit('chat message', "Bye"); 

}); 

}); 

http.listen(3000, function(){ 
    console.log('listening on *:3000'); 
}); 
+1

Sie werden viel mehr Details benötigen, als „es nicht funktioniert“, wenn Sie etwas Hilfe wollen – tommybananas

+0

Beschreibung hinzugefügt – Matoy

Antwort

1

Sie geben chat message vom Server aus und warten auf chat_message auf dem Client. Schau genau hin, man hat den anderen ein Leerzeichen unterstrichen.

Es könnte nur ein Tippfehler sein.

Vermeiden Sie Leerzeichen und Sonderzeichen in Nachrichtenbeschriftungen.

1

der Fehler ist hier io.sockets.in (data.room) .emit ('chat Nachricht ', data.msg);

Es sollte sein io.sockets.in (data.room) .emit ('chat_message', data.msg);

+0

so statt: io.sockets.in (data.room) .emit ('chat_message ', data.msg); was soll ich schreiben? – Matoy

+1

du hast nicht chat_message geschrieben du hast chat (space) message geschrieben –

Verwandte Themen