我是全堆栈开发的新手,我正在寻找一些关于如何处理从承诺返回的错误的指针。
基本上,我将游戏ID存储在MongoDB集合中。当用户输入游戏ID时,我想检查该游戏ID是否存在于集合中。如果没有,我不想把用户链接到一个新的页面。如果是这样,用户应该转到一个新页面。
目前,我的代码没有防止默认,用户仍然转到“waitpage”,即使我使用event.preventdefault。我想知道如何才能阻止用户转到此页面。
这是我现在在前端的代码。
const onJoinGame = (event) => {
event.persist()
axios.get(`${BACKENDLINK}/rooms/${gameId}/room_available`)
.then((res) => {
if(res.data.Status == true){
axios.put(`${BACKENDLINK}/rooms/${gameId}/add_user`,
{
username: username
})
}
})
.catch((error) => {
event.preventDefault()
setErrorGameId("That game doesn't exist!")
})
}
并且在return语句中,我像这样使用这个函数。
<Link to={`/${gameId}/waitpage`} onClick={(event) => onJoinGame(event)}>
<button className = "submit" id="joinGame">Join Game</button>
</Link>
在后端,这是我的get函数返回的内容。
const roomAvailable = (req, res) => {
Room.findOne({roomId: req.params.id}, (err, result) =>{
if(!result){
res.status(400).json('Error: ' + err)
}
else{
res.json({'Status': true})
}
})
}
任何帮助都将不胜感激!
您不能阻止事件的承诺,您将需要在事件处理程序中同步地这样做。
如果您确实需要导航到另一个页面,则必须手动使用正在使用的路由器包的命令式API(它提供link
)。