搜索

首页  >  问答  >  正文

如何阻止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粉674999420407 天前500

全部回复(1)我来回复

  • P粉198814372

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

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

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

    回复
    0
  • 取消回复