Node.js how to use socket.io in express route – iTecNote
expressnode.jsroutessocket.io
In one of my node.js script i am trying to use socket.io in express route. I found many similar questions and tried to implement the solution as suggested but nothing worked out. May be because of my lack of understanding of express routes. I followed below links,
How use socket.io in express routes with node.js
Use socket.io in expressjs routes instead of in main server.js file
This is my app.js
const express = require('express');const app = express();const server = require('http').createServer(app);const io = require('socket.io').listen(server);const PORT = 3000;server.listen(PORT);console.log('Server is running');var api = require('./routes/api');//app.use('/api', api);app.use('/api', (req, res) => {res.sendFile(__dirname + '/api.html');});app.get('/', (req, res) => { res.send("this is home location");});
And route file api.js in ./routes folder
var express = require('express');var router = express.Router();var fs = require("fs");var bodyParser = require('body-parser');const app = express();const server = require('http').createServer(app);const io = require('socket.io').listen(server);console.log("inside api route");router.get('/', function(req, res, next) {console.log("api route called");const connections = [];var jsonobj = [{name:"john",score:345},{name:"paul",score:678}]io.sockets.on('connection',(socket) => { connections.push(socket); console.log(' %s sockets is connected', connections.length); // this is not printing socket.on('disconnect', () => { connections.splice(connections.indexOf(socket), 1); }); socket.emit('server message', jsonobj); }); //res.send(jsonobj) });module.exports = router;
Socket.emit is not showing data on html page i am rendering on route use. My html code is,
//api.html
<!DOCTYPE html><html lang="en"><body> <div class="container"> <h1 class="jumbotron"> Node js Socket io with socket route example </h1> <div class="results">results</div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js"></script> <script> jQuery(document).ready(function() { var socket = io.connect(); var jsondata = ""; socket.on('server message', function(data){ console.log('got data from server',data) jsondata = JSON.stringify(data); //console.log('jsondata',jsondata) $('.results').html(jsondata); }); }); </script></body></html>
Please suggest what i am supposed to get route socket data in html page.
Thanks