So verhindern Sie die weitere Ausführung der Express-Middleware
P粉674999420
P粉674999420 2024-01-02 11:41:53
0
1
408

Ich möchte diese Funktion erhalten if(thereIsSomeError) //Weitere Ausführung stoppen. Wenn beispielsweise ein Fehler in der Middleware oder im Callback auftritt, möchte ich den Callback (in app.route) und die Middleware nicht weiter ausführen Ich habe diesen Code ausprobiert. Aber ich denke immer noch, dass req.err wahr ist. Wie kann ich dieses Problem lösen

// My MiddleWare
export let Middleware=()=> {
return (req,res,next)=>{
    next()
    console.log(req.err) // Problem is here.. i'm still getting req.err(true)
    if(!req.err){
        db.query(`query`,(error, responseData)=>{
            if(error) console.log(error)
            db.query(`second query`,{...// send data to the 
database})
        })
        }
    }
}



//End point    
app.post('/addStudent',Middleware, (req, res) => {
//setting error to true initially
    req.err=true;
    let data = req.body
    db.query(`query `, data.username, (err, d) => {
        if (err) return res.json(err)
        else {
        // since no Error accured so set the error to false
        req.err=false;
            let q = 'query';
            let values = {//data here}

            db.query(q, values, (err, data) => {
                if (err) return res.status(200).json(err)
                else return res.status(200).json({ data })
            })
        }
    })
})


P粉674999420
P粉674999420

Antworte allen(1)
P粉198814372

首先,中间件在请求之前运行,而不是之后。如果您在 POST 端点中设置 req.err = true,它将保持 TRUE,这意味着您的数据库调用肯定会返回错误。

其次,要成功中止中间件调用,请使用return。返回一个函数会立即停止它。您可以选择返回 next(err) 将错误转发给处理程序,或者使用 return res.send('Error') 终止响应中间件。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!