我想获得此功能 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 }) }) } }) })
首先,中间件在请求之前运行,而不是之后。如果您在 POST 端点中设置
req.err = true
,它将保持 TRUE,这意味着您的数据库调用肯定会返回错误。其次,要成功中止中间件调用,请使用
return
。返回一个函数会立即停止它。您可以选择返回next(err)
将错误转发给处理程序,或者使用return res.send('Error')
终止响应中间件。