Socket.io + Express + Node + Angular notifications Socket.io + Express + Node + Angular notifications express express

Socket.io + Express + Node + Angular notifications


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.

This is my 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');});

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; 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 Codeserver.listen(1337, function(){    console.log('listening on *:1337');});