Хорошо, я играл с этим пару недель, и мне удалось заставить его работать.
Прежде всего, создайте массив со всеми URL-адресами на сервере:
const paths = [
{
path: '/pages/games',
page: 'games',
}, {
path: '/pages/cpu',
page: 'cpu',
}, {
path: '/pages/playStation',
page: 'playStation',
}
];
Далее некоторые экспресс-функции:
app.use('/client', express.static(__dirname + '/client'));
app.set('socketio', io); // so we can use it in app.get I guess
app.get('/', (req, res) => res.sendFile(__dirname + '/client/index.html'));
Проблема частично решена.Если пользователь переходит на localhost: 2000, он перенаправляется на домашнюю страницу.Теперь нам нужно прикрепить другие ссылки:
paths.forEach(function(prop) {
app.get(prop.path, function(req, res) {
res.redirect('/');
res.sendFile(__dirname + '/client/index.html');
const io = req.app.get('socketio');
const socketId = [];
io.on('connection', function(socket) {
socketId.push(socket.id);
if(socketId[0] === socket.id) {
io.removeAllListeners('connection');
}
socket.emit('renderPage', {page: prop.page});
// other listeners, login, register, etc...
});
});
});
Итак, во-первых, была ошибка, которая рендерила одни и те же элементы снова и снова и складывала их, если вы продолжали обновлять страницу, но проверка if(socketId[0] === socket.id)
исправляеттот.Теперь единственное, что нам нужно сделать на клиенте:
socket.on('renderPage', function(data) {
history.pushState({id: data.page}, '', `/pages/${data.page}`);
pages[data.page]();
});
А клиент сделает все остальное.Я не верю, что это лучший метод, но он работает, и, так как у меня мало времени, он должен сделать это сейчас.
Любая рекомендация по улучшению этого очень ценится!Я просто новичок в узле, и я на самом деле не понимаю, почему это работает.Это все благодаря старым добрым методам проб и ошибок.
TFW вы понимаете, что можете просто выполнить window.location на стороне клиента и выполнить оттуда маршрутизацию.Мне даже не нужно больше выражать.Хороший XD Я не могу поверить, что я всегда склонен делать что-то чрезвычайно сложное / невозможное, когда во всей вселенной есть самое простое решение ...