I'm making a little Node app using socket.io
0.9.13 using Express 3.0.6. I can't seem to anything even starting to run because it says socket.io
has no method listen()
. Here's my code (compiled coffeescript, so it's a bit ugly):
(function() {
var app, express, io, port, usernames;
express = require('express');
app = express();
io = require('socket.io'.listen(3000));
port = 3000;
app.listen(port);
console.log("Listening on port " + port);
console.log('CNTRL-C to quit.');
app.engine('hamlc', require('haml-coffee'.__express));
app.get('/', function(request, response) {
return response.render('index.hamlc');
});
usernames = {};
io.sockets.on('connection', function(socket) {
socket.on('send-chat', function(msg) {
return io.sockets.emit('update-chat', socket.username, msg);
});
socket.on('add-user', function(username) {
socket.username = username;
usernames[username] = username;
socket.emit('update-chat', 'SERVER', "You have connected as " + username + ".");
socket.broadcast.emit('update-users', 'SERVER', "" + username + " has joined the chat.");
return io.sockets.emit('update-users', usernames);
});
return socket.on('disconnect', function() {
delete usernames[socket.username];
io.sockets.emit('update-users', usernames);
return socket.broadcast.emit('update-chat', 'SERVER', "" + socket.username + " has disconnected from chat");
});
});
}).call(this);
Which raises the following error:
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
TypeError: Object socket.io has no method 'listen'
at Object.<anonymous> (/Users/chris/src/web/kouv/app.js:8:28)
at Object.<anonymous> (/Users/chris/src/web/kouv/app.js:44:4)
at Module._compile (module.js:432:26)
at Object..js (module.js:450:10)
at Module.load (module.js:351:31)
at Function._load (module.js:310:12)
at Array.0 (module.js:470:10)
at EventEmitter._tickCallback (node.js:192:40)
Answer appreciated greatly. :-)
Try 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(3000);
Socket.io essentially hijacks the http object when it runs; express 3.xx no longer runs off the http.server though, so it's necessary to create your own instance of it for socket.io to use.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.