On the client side, it calls socket.current.emit
in useEffect
. I am trying to send the name and age to the server and display the data in the server side io.on
terminal. I have no error, nothing is displayed in the terminal.
BACKEND
server.js
const express = require('express');
require('dotenv').config();
const app = express();
const port = process.env.PORT || 8000;
const server = app.listen(port, () => {
console.log(`connect on the port ${port} - ${process.env.NODE_ENV}`);
});
const io = require('socket.io').listen(server);
io.on('connection', socket => {
socket.on('hello', data => {
console.log({name: data.name, age: data.age});
});
});
FRONTEND
client
import React, { useState, useRef, useEffect } from 'react';
import io from 'socket.io-client';
const ChatUser = () => {
const [values, setValues] = useState({
chatters: [],
idReceiver: '',
idSender: ''
});
const [activeUser, setActiveUser] = useState('');
const [message, setMessage] = useState('');
const [chats, setChats] = useState([]);
const socket = useRef();
useEffect(() => {
if(!socket.current) {
socket.current = io(process.env.REACT_APP_API);
}
if(socket.current) {
socket.current.emit('hello', {name: 'john', age: '23'});
}
}, []);
return (
<>
</>
);
};
//env
REACT_APP_API=http://localhost:8000/api
Updated backend
My code in server.js Maybe I should put io.on
in different place?
const express = require('express');
const morgan = require('morgan');
const bodyParser = require('body-parser');
const cors = require('cors');
const mongoose = require('mongoose');
require('dotenv').config();
const db = require('./connection');
const app = express();
// Connect to our Database and handle an bad connections
mongoose
.connect(process.env.DATABASE, {
autoIndex: false
})
.then(() => console.log("DB server connect"))
.catch(() => console.log("DB server disconnect"))
const authRoutes = require('./routes/auth');
const userRoutes = require('./routes/user');
const messageRoutes = require('./routes/message');
const countriesRoutes = require('./routes/countries');
const languagesRoutes = require('./routes/languages');
const tutorRoutes = require('./routes/tutor');
app.use(morgan('dev'));
app.use(bodyParser.json({limit: '50mb'}));
app.use((req,res,next)=>{
res.header('Content-Type: application/json');
res.header('Access-Control-Allow-Origin','*');
res.header('Access-Control-Allow-Headers','Authorization, X-API-KEY, Origin, X-Requested-With, Content-Type, Access-Control-Allow-Request-Method');
res.header('Access-Control-Allow-Methods','GET, PUT, POST, DELETE, OPTIONS');
res.header('Allow','GET, PUT, POST, DELETE, OPTIONS');
req.io = io;
next();
});
if(process.env.NODE_ENV === 'development') {
app.use(cors());
}
const port = process.env.PORT || 8000;
const server = app.listen(port, () => {
console.log(`connect on the port ${port} - ${process.env.NODE_ENV}`);
});
const io = require('socket.io').listen(server, {
cors: {
origin: '*'
}
});
io.on('connection', socket => {
socket.on('hello', data => {
console.log({name: data.name, age: data.age});
});
});
//middleware
app.use('/api', authRoutes);
app.use('/api', userRoutes);
app.use('/api', countriesRoutes);
app.use('/api', languagesRoutes);
app.use('/api', tutorRoutes);
app.use('/api', messageRoutes);
Request header
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: pl-PL,pl;q=0.9,en-US;q=0.8,en;q=0.7
Connection: keep-alive
Host: localhost:8000
Origin: http://localhost:3000
Referer: http://localhost:3000/
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="90", "Google Chrome";v="90"
sec-ch-ua-mobile: ?0
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36
404 not found - in terminal
GET /socket.io/?EIO=4&transport=polling&t=NtFERz- 404