2015-06-25 10 views
6

Ich habe eine App, wo ich versuche, ein Warteschlangensystem für Kunden zu machen. Ich versuche, es so zu machen, dass, wenn ein Kunde der Warteschlange beitritt, es den Ladenmitarbeitern des Anschlusses benachrichtigt und ihnen sagt, dass sie darauf kommen und dem Kunden so schnell wie möglich helfen sollen.Socket.io + Express + Knoten + Winkelmeldungen

Ich kann nicht scheinen, Socket IO zu bekommen, um mit meinem Frontend überhaupt zu sprechen.

Hier ist der Code, den ich habe, und ich kann nicht einmal Node Socket als eine Bibliothek zu erkennen. Ich habe drei verschiedene Tutorials verfolgt und alle ausprobiert, aber ich kann nicht sehen, was in meinem Server-Code falsch gemacht wird.

Hier ist, was ich in meinem Server zu tun, die zu Socket.io verwandt ist

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


io.on('connection', function(socket){ 

    socket.emit('connection', "Connection created.") 
    console.log("Socket.io is GO"); 

    socket.on('add customer', function(customer){ 
     console.log("Customer added", customer); 

    }) 

    socket.on('notification', function(data) { 
     console.log("NEW CUSTOMER IN THE QUEUE", data); 
    }); 

}); 

Ich kann nicht scheinen, um es in meinem Server laufen zu bekommen, und wenn es lief, dauerte es nicht zeige irgendeines der socket.on Ereignisse an, die ich dort hatte und es würde nichts console.log.

Was mache ich falsch? Hat jemand erfolgreich Socket bekommen, um gut mit Express und Angular zusammen zu spielen?

+0

Haben Sie Ihren Server in den Listenmodus versetzt? –

Antwort

11

Sieht aus wie der Code unvollständig ist oder vielleicht hast du nicht gut umsetzen.

Ich habe ein Beispiel erstellt mit angular.js, express und socket.io versucht, Ihre Anforderung zu replizieren.

Das ist mein Server, app.js:

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

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

io.on('connection', function(socket) { 
    console.log('new connection'); 

    socket.on('add-customer', function(customer) { 
    io.emit('notification', { 
     message: 'new customer', 
     customer: customer 
    }); 
    }); 
}); 

server.listen(4041, function() { 
    console.log('server up and running at 4041 port'); 
}); 

Dann einen öffentlichen Ordner mit den folgenden Dateien, die ich erstellt:

public/index.html

<!doctype> 
<html ng-app="sampleApp"> 
    <head> 
    </head> 

    <body ng-controller="IndexController"> 
    <label>Please enter your name: </label> 
    <input ng-model="currentCustomer.name"/> 
    <button ng-click="join()">Join</button> 
    <br/> 

    <h1>New Customers: </h1> 
    <ul> 
     <li ng-repeat="customer in newCustomers">{{customer.name}}</li> 
    </ul> 

    <script src="https://cdn.socket.io/socket.io-1.3.5.js"></script> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.1/angular.js"></script> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.1/angular-route.js"></script> 
    <script src="app.js"></script> 
    </body> 

</html> 

public/app.js

+0

Das hat mich viel näher zum Arbeiten gebracht. Jetzt kann ich sagen, dass meine Socket-Verbindung versucht, von Angular zu meinem Server zu gehen, aber mein Server sieht die Verbindung nicht und pingt keine der console.logs, die ich an Ort und Stelle habe. –

+0

Können Sie Ihre Konfiguration Ihrer eckigen App und Server App teilen? – Wilson

+1

Ja, welche Teile genau würdest du gerne sehen? Ich habe eine Socket-Factory erstellt, die in meiner CustomerCtrl aufgerufen wurde, die addCustomer-Funktion mit einer Schaltfläche verknüpft und dieses Ping-Signal an meinen Server zurückgegeben. 'io.on ('Verbindung', Funktion (socket) { console.log ('neue Verbindung', socket); socket.on ('AddCustomer', function (Kunde) { io.emit (‘ Benachrichtigung ', { Nachricht:' neuer Kunde ', Kunde: Kunde }); }); }); server.listen (4041, function() { console.log ('Socket.IO-Server läuft auf Port 4040 '); }); ' Das ist mein Server-Code. Der Rest ist ziemlich genau das, was du hattest. –

1

Sie müssen Ihren socket.io-Server so einrichten, dass er auf einem bestimmten Port wartet; ohne dass es zuhört, kann es nicht nach Clients suchen und Nachrichten aussenden. Sie sollten Ihren Code wie folgt ändern, dies zu beheben:

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

//Existing Code 

server.listen(1337, function(){ 
    console.log('listening on *:1337'); 
});