Я новичок в разработке в целом, поэтому, если ответ на вопрос кажется очень простым или если некоторая терминология кажется неверной, тогда, пожалуйста, разрешите некоторую свободу действий.Кроме того, я провел последние несколько дней, пытаясь понять это, поэтому моя часть должной осмотрительности также была выполнена.
Цель: Внедрить приложение для чата.После аутентификации пользователя он / она перенаправляется в комнату (уникальную для него) со списком всех пользователей в БД.Стек: Socket.io, Node JS, Express, EJS и Mongo DB
Я реализовал API, который будет проверять, существует ли пользователь в БД, и перенаправлять успешных пользователей.
Я считаю,У меня есть понимание механизма socket.io, то есть события могут генерироваться и потребляться либо сервером, либо клиентом.
Проблема в том, что я понимаю, как связать 2 (передача данных из Express /EJS в socket.io) вместе
Что я хотел бы иметь - 1. POST-маршрут аутентифицирует пользователя и перенаправляет на / chat GET-маршрут (На данный момент я не использую настоящую аутентификацию)
app.post("/login", (req, res) => {
db.User.findOne({ email: req.body.email }, (err, user) => {
if (!user) {
res.send("user not found");
} else if (err) {
console.log(err);
} else {
res.redirect("/chat");
}
});
});
Этот маршрут GET / chat отображает страницу index.ejs
app.get ("/ chat", (req, res) => res.render ("index"));
3. В index.ejs я хотел бы получить информацию о пользователе, прошедшем проверку, обо всех пользователях в БД.Это, я полагаю, исходит от почтового маршрута.Я знаю, как передавать данные из Express в шаблон EJS, но не при использовании socket.io.
Код Socket.io
ChatNsp.on("connection", client => {
console.log(`Client ${client.id} connected`);
client.emit("my event", { custom: "data" });
client.on("disconnect", () =>
console.log("Client " + client.id + " disconnected")
);
});
Any pointers would be appreciated. I've been trying to figure this out for the last few days.
Код клиента
const socket = io.connect("/chat");
socket.on("connect", function() {
alert("Connected to the server");
socket.on("my event", data => console.log(data));
});