所以我在这里首先要通过密码加入一些大厅:
app.post('/join-lobby', async(req, res) => {});
然后在代码下面,我声明我的套接字发出:
socket.on('join-lobby', (data) => {
User.findOne({username: data.username}).then(async(user) => {
if(user != null) {
let memberofLobby = await UserLobby.findOne({username: user.username}); // RETURNS NULL
//let lobbyId = await memberofLobby.lobby_id;
console.log(memberofLobby);
io.emit('join-lobby', {
username: user.username,
level: user.level,
skin: user.skin,
lobbyId: memberofLobby.lobby_id
});
//let lobbyId = memberofLobby.lobby_id;
} else {
console.log('User not found');
}
})
});
问题是我无法在此行同时从套接字let memberofLobby = await UserLobby.findOne({username: user.username});
的DB集合中获取数据。因此它返回我NULL。
当我提交表单(输入密码)时,套接字发射会立即在表单提交时触发,我相信这就是为什么它可以从集合中获取信息。
P.S。页面刷新后完美添加了用户,因此POST(第一条路线)可以正常工作。
$( "#join-lobby" ).submit(function( event ) {
socket.emit('join-lobby', {
username: $("#username").text()
});
});
-------------------------------------
app.post('/join-lobby', async(req, res) => {});
-------------------------------------
socket.on('join-lobby', (data) => {
User.findOne({username: data.username}).then(async(user) => {
if(user != null) {
let memberofLobby = await UserLobby.findOne({username: user.username}); // NULL