Express路由器上的Promise不能工作两次

Promise on Express router don't work twice

提问人:Azz972 提问时间:11/5/2023 更新时间:11/5/2023 访问量:34

问:

我是 Node.js 和 Express(或者更确切地说是通道)的初学者。 很简单,我尝试通过嵌套两个路由器来进行电子邮件检查。它可以工作,但是当我在不重新启动服务器的情况下第二次尝试时,它可以工作一半: 我收到邮件,确认邮件时路由器收到确认,路由器在浏览器上显示“邮件验证成功”,然后什么都没有。没有错误消息,但其余指令未被读取(“try/catch”中的所有内容)。 但是,当我等待 setTimout 结束时,catch 条件会激活并执行 catch 中的指令。我不明白

router.post('/send', async (req, res) => {

    const token = jwt.sign({ //Creation of the JsonWebToken
        data: 'Token Data' 
    }, 'MySecretKey', { expiresIn: '5m' }   
    );  

    const mailConfigurations = { 

        // It should be a string of sender/server email 
        from: '[email protected]', 
        
        //User mail to verify
        to: req.body.emailPretension, 
        
        // Subject of Email 
        subject: 'Vérification', 
            
        html:`<body>...</body>`,    
    }; 

    transporter.sendMail(mailConfigurations, function(error, info){ 
        if (error) throw Error(error); 
        console.log('Email Sent Successfully');  
    });

    let WaitConfirmation = async () => {
        return new Promise((resolve,reject) => {
            router.get('/response', async (req, res) => {
                const tokenReceived = req.query.token; 

                jwt.verify(tokenReceived, 'MySecretKey', function(err, decoded) { 
                    if(err){
                        res.send("Email verification failed, possibly the link is invalid or expired");
                        reject("Email verification failed, possibly the link is invalid or expired");
                    } 
                    else{
                        resolve("Email verifified successfully");
                        res.send("Email verification success");
                    } 
                }); 
            })
            setTimeout(()=>{
                reject();
            },300000) //300 000 = 5min
        })
    }
    try{
        let test = await WaitConfirmation();
        res.json({response:true});
    }
    catch{
        console.log(Error response");
    }

});

我尝试了几种设备,什么都没有。我尝试用router.get('/response/:token')改变路由器名称,什么都没有。我也试图停止嵌套路由器,但我没有这样做的技能。

Node.js Express 承诺 嵌套 路由器

评论

1赞 Dave Newton 11/5/2023
为什么要在每个请求上动态创建路由?这是一种奇怪的(目前已损坏)的方法,可以查看他们是否在五分钟内回复电子邮件。send
0赞 Azz972 11/6/2023
我不确定我是否理解你的评论,但对我来说,这是成功确保前端中的异步函数是发送和接收用户响应的唯一方法。我该怎么办?

答: 暂无答案