如何阻止Express中间件的进一步执行
P粉674999420
P粉674999420 2024-01-02 11:41:53
0
1
405

我想获得此功能 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粉674999420
P粉674999420

全部回复(1)
P粉198814372

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!