我有一个带有身份验证中间件的简单Express路由器设置。我有类似下面的代码。
如果用户使用不正确的凭据导航到“ / authenticate”,我希望中间件发送错误响应,并停止所有中间件和路由处理。为此,我发送了一个响应,告诉Express跳过使用next('route')
的其余路由中间件,并包含一个返回信息以停止处理authMiddleware
函数。
let router = express.Router()
function authMiddleware(req, res) {
//Do some authentication checks
if(!authenticated) {
res.status(403).send("Could not authenticate. :-(")
next('route')
return
}
//Additional authentication checks
}
router.use(authMiddleware)
router.post('/authenticate', (req, res)=> {
res.send("You should not see me if you aren't authenticated!")
}
我希望发布路线不会运行;但是,确实会出现错误[ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
。我搜索过Google,Stack Overflow和Express文档都没有用,尽管可能缺少搜索词。
我看过一篇苏格兰威士忌的文章,建议做重定向,但这似乎有点不礼貌和雅致。
所以我的问题是:终止中间件/路由链的正确方法是什么?
答案 0 :(得分:2)
要终止中间件和路由链,只需不调用$order_items = OrderItem::find()
->where(['location_id' => $model->location_name])
->andFilterWhere(['instructor_id' => $model->instructor_name])
->andwhere(['between', 'date', $model->from_date, $model->to_date ])
->all();
。
next()