Hello, i'm a beginer with node.js and just now i try to learn
best practice of how to implement a
socket.io module to
my node.js testwebsite.
----------------------------------------------------
server use :
node.js 5
express 4
socket.io 1.4
----------------------------------------------------
client use :
JQuery 1.10
----------------------------------------------------
directory structure :
dir bin
dir js
- server.js
dir public
- index.js
dir routes
- index.js
dir socket
-app.socket.io.js
app.js
browserify.js
package.json
----------------------------------------------------
bin/server.js containsvar console = require('console');
var app = require('../app');
var debug = require('debug')('ScriptShareing:server');
var http = require('http');
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
var server = http.createServer(app);
var socket = require('../socket/app.socket.io')(server);
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
function normalizePort(val) {
var port = parseInt(val, 10);
return (isNaN(port)) ? val : ((port >= 0) ? port : FALSE);
}
function onError(error) {
if (error.syscall !== 'listen') { throw error; }
var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}
function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}
socket/app.socket.io.js containsvar console = require('console');
module.exports = function (server) {
var io = require('socket.io')(server);
io.on('connection', function (socket) {
console.log('a user connected');
var userIsSet = false;
socket.on('add user', function (username) {
username = username.replace(/\s/g,'');
if (username.length) {
socket.username = username;
userIsSet = true;
socket.emit('login success');
io.emit('new user', {timestamp:new Date(), username:username});
} else {
socket.emit('login error');
}
});
socket.on('chat message', function (data) {
data.timestamp = new Date();
io.emit('chat message', data);
});
socket.on('disconnect', function () {
console.log('user disconnected');
});
});
};app.js containesvar console = require('console');
var express = require('express');
var path = require('path');
var app = express();
var routes = require('./routes/index');
app.use('/', routes);
app.use(express.static(path.join(__dirname, 'public')));
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
// catch 404 and forward to error handler
app.use(function(req, res, next) {
console.log('error: ', typeof Error);
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// development error handler
// will print stacktrace
if (app.get('env') !== 'development') {
} else {
app.use(function (err, req, res) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
//error: {}
});
});
}routes/index.js containsvar console = require('console');
var express = require('express');
var router = express.Router();
router.get('/', function (req, res) {
var view = {
title:'NetCoApp Node Chat',
text:'Welcome, you are visting our Node Test Chat!'
};
res.render('index',view);
});
module.exports = router;There are many ways to implement
socket.io and the socket-handling, now i include app.socket.io-script
in server.js but i'm not shure that this is the best practice.
Grateful about any answer,
Stefan