【发布时间】:2021-11-29 02:19:44
【问题描述】:
我的代码有什么问题吗?我用快递和猫鼬
router.get('/c/:hashtoken', validateEmailToken, catchAsync(async(req,res)=>{
const hashtoken = req.params.hashtoken
const hashtoken2 = createHash('sha256').update(hashtoken).digest('hex')
const realHashTokens = await EmailToken.find({hashtoken2})
if(realHashTokens.length===0){
req.flash('error','Incorrect email verification token or Your account has been activated')
return res.redirect('/')
}
const toDeleteTokenId = []
for(let realHashToken of realHashTokens){
let theUser = await User.findById(realHashToken.user)
theUser.active = true
await theUser.save()
toDeleteTokenId.push(realHashToken._id)
}
for (let theId of toDeleteTokenId){
await EmailToken.findByIdAndDelete(theId)
}
req.flash('success','Success! Your account has been activated')
return res.redirect('/')
}))
该页面从未响应。它一直在加载,但是如果我签入数据库,用户就会变得活跃
【问题讨论】:
-
这是一个 Ajax 调用吗?或在发出此请求的浏览器中键入的 URL。 Ajax 调用不会导致浏览器更改它们正在显示的页面,除非您专门编写客户端接收 Javascript 来查找 302 状态并将
window.location设置为新页面。 -
hello @jfriend00 ,这是在浏览器中输入的网址。用户从他们的电子邮件中点击此链接
-
好吧,那么我会说在你的函数中放一个
try/catch,这样你就可以检测到任何拒绝的await语句。您目前没有任何错误处理。 -
它在 catchAsync 函数中。它是 try catch 的包装器
-
然后,跟踪您的服务器端函数并观察调试器中的每一行。如果你不知道怎么做,那就学习吧。如果您不想学习,请在该请求处理程序的每一行代码之间放置一个
console.log()语句,这样您就可以准确地看到它在做什么和没有做什么。来这里 - 这是基本的调试 - 这是你如何解决这样的问题。我们不能为您做 - 您必须自己做。
标签: javascript node.js mongodb express mongoose