我想獲得此功能 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粉1988143722024-01-03 10:40:23
首先,中間件在請求之前運行,而不是之後。如果您在 POST 端點中設定 req.err = true
,它將保持 TRUE,這表示您的資料庫呼叫肯定會回傳錯誤。
其次,要成功中止中間件調用,請使用return
。傳回一個函數會立即停止它。您可以選擇回傳 next(err)
將錯誤轉送給處理程序,或使用 return res.send('Error')
終止回應中間件。