Я создаю маленькое приложение для чата с использованиемact, node и socket.io. Я хочу запустить приложение на http://localhost: 3002 / chat-io / , но получаю следующее ошибка:
GET http://localhost:3002/chat-io/socket.io/?EIO=3&transport=polling&t=N2YJ1pG 404 (Not Found)
Сервер:
const express = require('express');
const path = require('path');
const app = express();
const server = require('http').createServer(app);
const io = require('socket.io')(server);
io.path('/chat-io/socket.io');
const cors = require('cors');
const {
addUser,
removeUser,
getUser,
getUsersInRoom,
} = require('./users');
// Cors
app.use(cors());
// Serve static assets in production
if (process.env.NODE_ENV === 'production') {
app.use('/chat-io/', express.static(path.join(__dirname, '/client/build')));
}
app.get('/', (req, res) => {
res.status(200).send({ response: 'Server is up and running' });
});
io.on('connection', (socket) => {
socket.on('join', ({ name, room }, callback) => {
const { error, user } = addUser({ id: socket.id, name, room });
if (error) return callback(error);
socket.join(user.room);
socket.emit('message', { user: 'admin', text: `${user.name}, welcome to the room ${user.room}` });
socket.broadcast.to(user.room).emit('message', { user: 'admin', text: `${user.name} has joined` });
io.to(user.room).emit('roomData', { room: user.room, users: getUsersInRoom(user.room) });
return callback();
});
socket.on('sendMessage', (message, callback) => {
const user = getUser(socket.id);
io.to(user.room).emit('message', { user: user.name, text: message });
io.to(user.room).emit('roomData', { room: user.room, users: getUsersInRoom(user.room) });
return callback();
});
socket.on('disconnect', () => {
const user = removeUser(socket.id);
if (user) {
io.to(user.room).emit('message', { user: 'admin', text: `${user.name} has left.` });
}
});
});
server.listen(process.env.PORT || 3002, () => {
console.log(`Server has started on port ${process.env.PORT || 3002}`);
});
Клиент:
const Chat = ({ location }) => {
const [name, setName] = useState('');
const [room, setRoom] = useState('');
const [messages, setMessages] = useState([]);
const [message, setMessage] = useState('');
const [users, setUsers] = useState('');
const ENDPOINT = 'http://localhost:3002';
useEffect(() => {
const { name, room } = queryString.parse(location.search);
socket = io(ENDPOINT, { path: '/chat-io/socket.io' });
setName(name);
setRoom(room);
socket.emit('join', { name, room }, (error) => {
if (error) alert(error);
});
}, [ENDPOINT, location.search]);
useEffect(() => {
socket.on('message', (message) => {
setMessages([...messages, message]);
});
socket.on('roomData', ({ users }) => {
setUsers(users);
});
return () => {
socket.emit('disconnect');
socket.off();
};
}, [messages]);
const sendMessage = (e) => {
e.preventDefault();
if (message) socket.emit('sendMessage', message, () => setMessage(''));
};
};
На клиенте также есть некоторые jsx, но я не не думаю, что это важно. Я могу заставить код нормально работать на http://localhost: 3002 , но я хочу запустить его на http://localhost: 3002 / chat-io /
Кто-нибудь знает, что я делаю не так? Спасибо