Shashidhar Gr
Shashidhar Gr

Reputation: 418

express js - socket io connection

Unable to integrate socket io and express js . Below is my html code.

<html>
<head>
</head>
<body>
hello world.
<script src="https://cdn.socket.io/socket.io-1.3.5.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script>
   var socket = io();
</script>
</body>
</html>

This is my app.js of express js.

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();

var server = require('http').Server(app);
var io = require('socket.io')(server);

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.get('/', function(req, res){
  res.sendFile(path.join(__dirname, 'public', 'index.html'));
});

io.on('connection', function(socket){
  console.log('client connected.');
});

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
      message: err.message,
      error: err
    });
  });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: {}
  });
});

module.exports = app;

Problem : Unable to connect socket io with express. Below is the image which shows errors in developer console, when i run the app. enter image description here

Upvotes: 2

Views: 591

Answers (3)

Vrinda Kansal
Vrinda Kansal

Reputation: 1

This code works for me

const express  = require('express')
const socketIo = require('socket.io')
const http = require('http')

const app = express()

const server = http.createServer(app)
const io = socketIo(server)

io.on('connection',(socket)=>{
    console.log('client connected: ',socket.id)
    socket.on('disconnect',(reason)=>{
        console.log(reason)
    })
})

server.listen(5000, err=> {
    if(err) console.log(err)
    console.log('Server running on Port ', PORT)
})

Upvotes: 0

Protap
Protap

Reputation: 19

const http = require("http");
const port = 4000;
const { joinUser, removeUser, findUser } = require('./users');

const app = http.createServer((req, res) => {
    res.writeHead(200, headers);
    res.end("API");
    return;
});

const server = app.listen(port, () => {
    console.log('Server Started..');
});

const io = require("socket.io")(server, {
    cors: {
        origin: "*",
        methods: ["GET", "POST"]
    }
});

io.on('connection', (socket) => {
    console.log('socket connected..', socket.id);
    socket.on('chat', (data) => {  
        io.sockets.emit('send data', {
            id: socket.id
        });
    io.sockets.emit('chat', { data: data, id: socket.id });
});

socket.on('typing', (data) => {
    socket.broadcast.emit('typing', data);
});

socket.on("disconnect", () => {
    const user = removeUser(socket.id);
    console.log(user);
    if (user) {
        console.log(user.username + ' has left');
    }
    console.log("disconnected");
    });
}); 

Upvotes: -1

DevAlien
DevAlien

Reputation: 2476

Using your same code, removing var routes = ... and var users = ...

and adding at the end server.listen(3000); instead of the exports it just works for me.

https://dripr.io/file/NkWBbbHR

Upvotes: 3

Related Questions