一般来说,我是新手,因此,如果答案问题似乎很直截了当,或者某些术语看起来不正确,请留出一些余地。另外,我花了最后几天试图理解这一点,因此,我的尽职调查部分也已完成。
目标: 实施聊天应用程序。用户通过身份验证后,他/她将被重定向到一个房间(对他来说是唯一的),其中包含数据库中所有用户的列表。 堆栈: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");
}
});
});
此/ chat GET路由呈现页面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));
});