首頁  >  問答  >  主體

如何阻止Express中間件的進一步執行

我想獲得此功能 if(thereIsSomeError) //停止進一步執行。例如,如果中間件或回呼中出現一些錯誤,那麼我不想進一步執行回呼(在 app.route 中)和中間件 我嘗試了這段程式碼。但我仍然認為 req.err 為 true。我該如何解決這個問題

// 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粉674999420P粉674999420291 天前413

全部回覆(1)我來回復

  • P粉198814372

    P粉1988143722024-01-03 10:40:23

    首先,中間件在請求之前運行,而不是之後。如果您在 POST 端點中設定 req.err = true,它將保持 TRUE,這表示您的資料庫呼叫肯定會回傳錯誤。

    其次,要成功中止中間件調用,請使用return。傳回一個函數會立即停止它。您可以選擇回傳 next(err) 將錯誤轉送給處理程序,或使用 return res.send('Error') 終止回應中間件。

    回覆
    0
  • 取消回覆