2015-06-25 3 views
6

У меня есть приложение, где я пытаюсь создать систему очередей для клиентов. Я пытаюсь сделать так, чтобы, когда клиент присоединился к очереди, он уведомляет сотрудников магазина о соединении и дайте им знать, чтобы получить его и как можно скорее помочь клиенту.Socket.io + Express + Node + Angular уведомления

Я, похоже, не могу получить Socket IO, чтобы поговорить с моим передним концом.

Вот код, который у меня есть, и я даже не могу заставить Node распознать Socket как библиотеку. Я следил за тремя различными учебными пособиями и пробовал их все, но я не вижу, что делается в моем серверном коде.

Вот что я делаю в моем сервере, связанные с 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); 
    }); 

}); 

Я не могу заставить его работать на моем сервере, и когда она бежать, он не сделал покажите какие-либо из событий socket.on, которые у меня были там, и это ничего не даст console.log.

Что я делаю неправильно? Кто-нибудь успешно получил Socket, чтобы играть красиво с Express и Angular вместе?

+0

Вы поместили ваш сервер в режим прослушивания? –

ответ

11

Похоже, что ваш код является неполным или, возможно, вы не выполнили хорошо.

Я создал пример использования углов.js, express и socket.io, чтобы повторить ваши требования.

Это мой сервер, 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'); 
}); 

Затем я создал общую папку со следующими файлами:

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

Это меня гораздо ближе к работе. Теперь я могу сказать, что мое сокет-соединение пытается перейти на мой сервер с помощью Angular, но мой сервер не видит соединение и не пингует ни один из console.logs, который у меня есть. –

+0

Можете ли вы поделиться своей конфигурацией своего углового приложения и серверного приложения? – Wilson

+1

Да, какие именно части вы хотели бы видеть? Я создал фабрику сокетов, назвав ее в моем CustomerCtrl, связав функцию addCustomer с кнопкой и вернув ее на мой сервер. 'io.on ('соединение', функция (гнездо) { console.log ('Новое соединение', розетка); socket.on ('addCustomer', функция (заказчик) { io.emit (» уведомление ", { сообщение: 'новый клиент', клиент: клиент }) }) }); сервер.listen (4041, функция() { console.log ('Socket.IO-сервер на порту 4040 '); }); ' Это мой код сервера. Остальное - это то, что у вас было. –

1

Вам необходимо настроить свой сервер socket.io так, чтобы он прослушивал определенный порт; без его прослушивания, он не может следить за подключением клиентов и распространением сообщений. Вы должны изменить код следующим образом, чтобы это исправить:

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'); 
}); 
Смежные вопросы