So here is the deal: I'm trying to use socket.io in an express project. After Express Js 4 was lauched, i've updated my express-generator and now the app initial functions goes into ./bin/www
file, including those vars (www file contents: http://jsfiddle.net/avMa5/ )
var server = app.listen(app.get('port'), function() {..}
(check it by npm install -g express-generator
and then express myApp
that being said, let's remember how socket.io docs ask us to fire it:
var app = require('express').createServer();
var io = require('socket.io')(app);
Ok but i can't do it inside app.js, like recommended. This should be done in ./bin/www in order to work. in ./bin/www this is what i can do to get it working:
var io = require('socket.io')(server)
Ok this works, but i can't use the io var anywhere else, and i really don't want to put my socket.io functions on www
file.
I guess this is just basic syntax, but I can't get this to work, not even using module.exports = server
or server.exports = server
nor module.exports.io = app(io)
on www file
So the question is: how can i use socket.io having this /bin/www file as starting point of my app?
Some previous answers are not working and others are overly complicated. Try the following solution instead...
Install server-side and client-side socket.io node modules:
Server-side
Add the following code to bin/www after the server definition,
var server = http.createServer(app);
:Client-side
If using webpack, add the following code to your webpack entry.js file:
Done. Visit your site and check the browser's js developer console.
I have a solution for making socket.io available in app.js.
app.js:
bin/www:
This way, you can access the io variable in your app.js, and even make it available to your routes by defining module.exports as a function which accepts io as a parameter.
index.js
Then, pass io into the module after it is setup:
app.js
After reading through all of the comments, I came up with the following using Socket.io Server Version: 1.5.0
Issues that I ran into:
var sockIO = require('socket.io') should be var sockIO = require('socket.io')(). (Credit to: Zhe Hu)
sockIO.attach should be sockIO.listen (Credit to: rickrizzo)
Steps
Install Socket.io with the following command:
Add the following to app.js:
In bin/www, after var server = http.createServer(app), add the following:
To test functionality, in app.js, you can add the line:
Update to Gabriel Hautclocq's response:
In www file, the code should appear as the following due to updates with Socket.io. Attach is now Listen.
Additionally getting that connection to work requires implementing the client side API as well. This isn't Express specific but without it the connect call won't work. The API is included in
Include this file on the front end and test with the following:
It turns out it really was some basic sintax problem.... I got these lines from this socket.io chat tutorial...
on ./bin/www, just after
var server = app.listen(.....)
so now I create the ../sockets/base.js file and put this little fellow inside it:
Yeah! Now it works... So i guess i really had no option other than starting socket.io inside /bin/www , because that is where my http server was started. The goal is that now i can build socket functionality in other file(s), keeping the thing modular, by
require('fileHere')(io);
<3
A tutorial for beginners from Cedric Pabst
here are the short basics form the link for an app chat:
using express-generate and the ejs engine usable in every .ejs file standard routing in express-generate
edit the file bin\www and add this app.io.attach(server); like this
edit in app.js
edit in index.ejs
Have fun :) and thanks many to Cedric Pabst