Socket.io + Express + Node + Angular通知

我有一个应用程序,我试图为客户做一个队列系统。 我试图做到这样,当一个客户join队列时,它会通知店员join,让他们知道,并尽快帮助客户。

不过,我似乎无法让Socket IO与我的前端进行交stream。

这里是我有的代码,我甚至无法让Node将Socket识别为一个库。 我跟着3个不同的教程,并尝试所有,但我不明白我的服务器代码中做错了什么。

这是我在我的服务器与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一起玩好?

看起来你的代码不完整,或者你没有很好的实现。

我创build了一个使用angular.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'); }); 

然后我用下面的文件创build一个公用文件夹:

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

您需要设置您的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'); });