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