socket.io.js not found

39,024

Solution 1

Please check your Express version. Express recently is updated to 3.0alpha which API was changed. If 3.0 you can change your code to something likes this:

var express = require('express')
  , http = require('http');

var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);

...

server.listen(8000);

Same issue with connect: https://github.com/senchalabs/connect/issues/500#issuecomment-4620773

Solution 2

Using with the Express 3 web framework: (from socket.io)

> Express 3 requires that you instantiate a http.Server to attach socket.io to first:

meaning - (1) you must create a server instance:

var app = express();
var http = require('http').createServer(app);

(2) couple it with the socket.io:

var io = require('socket.io');
io.listen(http);

and ONLY THEN - (3) make the server listen:

http.listen(8080);

make sure you keep this order!

Solution 3

After installing node 0.8.1 I had the same problem. I just deleted the node_modules map in my project folder and reinstalled express/socket.io. After that it worked fine again with the code in your question.

Share:
39,024

Related videos on Youtube

dan-lee
Author by

dan-lee

Updated on July 09, 2022

Comments

  • dan-lee
    dan-lee almost 2 years

    For some reason my node server cannot serve the route /socket.io/socket.io.js, I always get a 404 error.
    I tried compiling different node versions (current is 0.6.13 which also runs on server, where it actually works).
    From the app.js I get info: socket.io started and no error when trying to call the socket.io.js.

    I try it from localhost and port 8000 and I use the express framework

    This is the code from app.js:

    var express = require('express')
      , app = require('express').createServer()
      , io = require('socket.io').listen(app, { log: true });
    
    app.listen(8000);
    
    app.configure(function() {
        app.use(express.static(__dirname + '/public'));
        app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
    });
    
    io.sockets.on('connection', function (socket) {
       // all other stuff here
    
    • freakish
      freakish about 12 years
      Show us your code (socket.io initialization and framework initialization if you are using one).
  • dan-lee
    dan-lee about 12 years
    I added the node_modules to my NODE_PATH but it still doesn't work. Too bad, it really raised my hopes. But strangely enough, when installing something via npm it says: Checking for node path: not found. But when echoing $NODE_PATH I get /usr/local/lib/node:/usr/local/lib/node_modules. I am really confused at this point.
  • dan-lee
    dan-lee about 12 years
    Ok that sounds very close, I replaced it with your code and now I get this error when I try to start the server: Cannot call method 'on' of undefined. This corresponds to following code piece: io.sockets.on('connection', function (socket) {. This is just plain weird. I feel so lost.
  • dan-lee
    dan-lee about 12 years
    btw I forgot to add that I actually have express 3.0alpha installed
  • nguyenkha
    nguyenkha about 12 years
    Sorry, I write wrong code of socket.io. I updated it, please change your code again.
  • dan-lee
    dan-lee about 12 years
    Great that was it! Thank you very much! :)
  • nguyenkha
    nguyenkha about 12 years
    No problem, it has just happened to me half a day ago :)
  • Diogo Gomes
    Diogo Gomes about 11 years
    For future reference don't forget to change app.listen() to server.listen() if you are using example snippets.
  • pedalpete
    pedalpete almost 11 years
    I had tried probably 15 or 20 different variations of very similar code. This is the one that worked for me. Thanks!
  • mineroot
    mineroot almost 9 years
    It was very useful for me. Thanks a lot!
  • Admin
    Admin over 5 years
    This solution is viable with Docker too. Check this post for an live example.