I'm using Express with Socket.io but I can't figure out how to use SocKet.io in Express routes.
I end up doing this in "app.js"
... ... // development only if ('development' == app.get('env')) { app.use(express.errorHandler()); } var server = http.createServer(app); var io = require("socket.io").listen(server); app.get('/', routes.index); app.get('/users', user.list); app.post('/cmp', function(request, response) { var client = new pg.Client("pg://user:[email protected]/db_name"); client.connect(function(err) { // Get the product_id and bid var product_id = request.body.product_id; var bid = request.body.bid.split('b')[1]; // If not get the connection if(err) { return console.error('could not connect to postgres', err); } client.query('select 1 from product_bid where product_id = $1 and number_bid = $2', [product_id, bid], function(err, result) { if(err) { return console.error('error running query', err); } if (result.rowCount == 1) { // do not insert } else { // insert // Insert to the DB client.query('insert into product_bid (product_id, number_bid) values ($1, $2)', [product_id, bid], function(err, result) { if(err) { return console.error('error running query', err); } io.sockets.emit("bidSuccess", {product_id: product_id, bid: bid}); response.json(200, {message: "Message received!"}); client.end(); }); } }); }); }); server.listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); }); // --------------- io.on('connection', function(socket){ console.log("alguem se ligou!"); socket.emit('event_from_server', {message: 'conectou-se ao servidor'}); });
How can I define the route to "/cmp" like this and passing the var "io" inside?
app.post('/cmp', routes.cmp);
So that in "/routes/cmp.js" I can do something like this:
exports.cmp = function(req, res){ var product_id = req.body.product_id; var bid = req.body.bid.split('b')[1]; io.sockets.emit("bidSuccess", {product_id: product_id, bid: bid}); response.json(200, {message: "Message received!"}); };
Some clues?
Socket.IO can be used based on the Express server just as easily as it can run on a standard Node HTTP server. In this section, we will fire the Express server and ensure that it can talk to the client side via Socket.IO.
listen(port); // Create a Socket.IO instance, passing it our server var socket = io. listen(server); // Add a connect listener socket. on('connection', function(client){ console. log('Connection to client established'); // Success!
How about a higher order function?
exports.cmp = function(io) { return function(req, res){ var product_id = req.body.product_id; var bid = req.body.bid.split('b')[1]; io.sockets.emit("bidSuccess", {product_id: product_id, bid: bid}); response.json(200, {message: "Message received!"}); } };
and then
app.post('/cmp', routes.cmp(io));
As another option, I'll sometimes format my routes in the following format:
var routes = require('./routes/routes'); routes(app, io);
And then define routes
as
module.exports = function(app, io) { app.post('/cmp', function(req, res){ var product_id = req.body.product_id; var bid = req.body.bid.split('b')[1]; io.sockets.emit("bidSuccess", {product_id: product_id, bid: bid}); response.json(200, {message: "Message received!"}); }) };
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With