[英]Socket.io + Express + Node + Angular notifications
I have an app where I'm trying to make a queue system for customers. 我有一个应用程序,我正在尝试为客户建立一个队列系统。 I am trying to make it so that when a customer joins the queue, it notifies the store employees of the join and let's them know to get on it and help the customer as soon as possible.
我正在尝试这样做,以便当一个客户加入队列时,它会通知商店员工加入,让他们知道加入并尽快帮助客户。
I can't seem to get Socket IO to talk with my front end at all, though. 不过,我似乎无法让Socket IO与我的前端交谈。
Here's the code I have, and I can't even get Node to recognize Socket as a library. 这是我的代码,我甚至无法让Node将Socket识别为库。 I've followed 3 different tutorials, and tried them all, but I can't see what's being done wrong in my server code.
我已经遵循了3个不同的教程,并尝试了所有这些,但我无法看到我的服务器代码中出错了什么。
Here's what I'm doing in my server that's related to Socket.io 这是我在服务器上与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);
});
});
I can't seem to get it to run in my server, and when it DID run, it didn't show any of the socket.on events that I had in there and it wouldn't console.log anything. 我似乎无法在我的服务器上运行它,当它运行DID时,它没有显示我在那里的任何socket.on事件,它不会console.log任何东西。
What am I doing wrong? 我究竟做错了什么? Has anyone successfully gotten Socket to play nicely with Express and Angular together?
有没有人成功地让Socket与Express和Angular一起玩得很好?
Looks like your code is incomplete or maybe you didn't implement well. 看起来你的代码不完整或者你没有很好地实现。
I created an example using angular.js, express, and socket.io trying to replicate your requirement. 我创建了一个使用angular.js,express和socket.io尝试复制您的需求的示例。
This is my server, app.js
: 这是我的服务器,
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');
});
Then I created a public folder with the following files: 然后我创建了一个包含以下文件的公用文件夹:
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);
});
});
});
You need to set up your socket.io server so that it is listening on a specific port; 您需要设置您的socket.io服务器,以便它正在侦听特定端口; without it listening, it can't watch for clients connection and emmitting messages.
没有它监听,它无法监视客户端连接和发送消息。 You should change your code as follows to fix this:
您应该按如下方式更改代码以解决此问题:
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');
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.