2015-06-25 13 views
6

Ho un'app in cui sto cercando di creare un sistema di code per i clienti. Sto cercando di fare in modo che quando un cliente si unisce alla coda, esso informi i dipendenti del punto vendita del join e facciamolo sapere per intervenire e aiutare il cliente il prima possibile.Socket.io + Express + Node + Notifiche angolari

Non riesco a trovare Socket IO per parlare con il mio front end, comunque.

Ecco il codice che ho e non riesco nemmeno a far sì che il nodo riconosca Socket come una libreria. Ho seguito 3 tutorial diversi e li ho provati tutti, ma non riesco a vedere cosa si sta facendo male nel mio codice server.

Ecco quello che sto facendo nel mio assistente che è legato a Socket.io

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); 
    }); 

}); 

io non riesco a farlo funzionare nel mio server, e quando ha funzionato, ma non l'ha fatto mostra uno qualsiasi degli eventi socket.on che ho avuto lì e non avrebbe console.log nulla.

Cosa sto sbagliando? Qualcuno ha ottenuto con successo Socket per giocare bene con Express e Angular insieme?

+0

Hai messo il tuo server in modalità di ascolto? –

risposta

11

Sembra che il codice è incompleta o forse non ha attuato bene.

Ho creato un esempio utilizzando angular.js, express e socket.io cercando di replicare il requisito.

Questo è il mio assistente, 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'); 
}); 

Poi ho creato una cartella pubblica con i seguenti file:

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

var app = angular.module('sampleApp', ['ngRoute']); 

app.config(['$routeProvider', function($routeProvider) { 
    $routeProvider.when('/', { 
    templateUrl: '/index.html' 
    }); 
}]); 

app.factory('socket', ['$rootScope', function($rootScope) { 
    var socket = io.connect(); 

    return { 
    on: function(eventName, callback){ 
     socket.on(eventName, callback); 
    }, 
    emit: function(eventName, data) { 
     socket.emit(eventName, data); 
    } 
    }; 
}]); 

app.controller('IndexController', function($scope, socket) { 
    $scope.newCustomers = []; 
    $scope.currentCustomer = {}; 

    $scope.join = function() { 
    socket.emit('add-customer', $scope.currentCustomer); 
    }; 

    socket.on('notification', function(data) { 
    $scope.$apply(function() { 
     $scope.newCustomers.push(data.customer); 
    }); 
    }); 
}); 
+0

Questo mi ha avvicinato molto al lavoro. Ora posso dire che la mia connessione socket sta provando ad andare al mio server da Angular, ma il mio server non vede la connessione e non sta facendo il ping a nessuno dei file console.logs che ho sul posto. –

+0

Puoi condividere la configurazione della tua app angolare e dell'app server? – Wilson

+1

sì, quali parti ti piacerebbe vedere esattamente? Ho creato una fabbrica di prese, l'ho chiamata nel mio CustomerCtrl, ho collegato la funzione addCustomer a un pulsante e ho riportato il ping sul mio server. 'io.on ('connessione', la funzione (presa) { console.log ('nuova connessione', socket); socket.on ('addCustomer', la funzione (cliente) { io.emit (' notifica ', { messaggio:' nuovo cliente ', cliente: cliente }); }); }); server.listen (4041, function() { console.log ('Socket.IO server attivo e funzionante sulla porta 4040 '); }); ' Questo è il mio codice server. Il resto è più o meno quello che avevi. –

1

È necessario configurare il server socket.io in modo che sia in ascolto su una porta specifica; senza ascoltare, non può controllare la connessione dei client e emettere messaggi. Si dovrebbe modificare il codice come segue per risolvere questo problema:

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'); 
}); 
Problemi correlati