javascriptnode.jsecmascript-6websocketsocket.io

How to use socket.io in node.js with ES6 syntax


I want to make a chat application using oop architecture and javascript ES6 syntax. I don't know how to initialize socket.io. I did not find any help.

Here is my code.

import express from 'express';
import http from 'http';
import config from 'config';
import SocketIO from 'socket.io'

const app = express();
const port = config.PORT;
app.set('port', port);
const server = http.createServer(app);
var io = SocketIO(server);
io.on('connection', socket => {
    console.log("Socket connected");
    
});

server.listen(port, () => console.log(`API running on localhost:${port}`));

I am trying to connect socket using socket-client-tool, it shows connection timeout.


Solution

  • Using import socketIo from 'socket.io'; did not work in my case.

    I used the following method to solve this issue and to connect the socket to my already existing node express server on port 5000.

    import cors from 'cors';
    import { createServer } from 'http';
    import { Server } from 'socket.io'; //replaces (import socketIo from 'socket.io')
    
    const httpServer = createServer(app);
    const io = new Server(httpServer, { cors: { origin: '*' } });
    
    
    io.on('connection', (socket) => {
      console.log('Connection established');
     
    getApiAndEmit(socket);
      socket.on('disconnect', () => {
        console.log('Disconnected');
      });
    });
    
    
    const getApiAndEmit = (socket) => {
      const response = 'response you need';
      socket.emit('FromAPI', response);
    };
    
    app.set('port', process.env.PORT || 5000);
    
    httpServer.listen(app.get('port'), function () {
      var port = httpServer.address().port;
      console.log('Running on : ', port);
    });
    

    And in the client, I connected as follows:

    import React,{ useState, useEffect } from 'react';
    import socketIOClient from 'socket.io-client';
    
    const ENDPOINT = 'http://127.0.0.1:5000'; //endpoint port 5000
    
    const MyComponent = () => {
    
      const [response, setResponse] = useState('');
    
      useEffect(() => {
        const socket = socketIOClient(ENDPOINT);
        console.log(socket);
        console.log(ENDPOINT);
        socket.on('FromAPI', (data) => {
          setResponse(data);
        });
    
      }, []);
    
         return <p>{response}</p>
    
    }
    
    export default MyComponent;