我有2条路线
POST api/users
POST api/auth/confirmation
我想将auth/confirmation
用作路由/users
的中间件
我尝试创建一个临时函数并使用res.redirect(...)
但会引发错误Cannot GET ....
我可以更改程序的结构以使其正常运行,但是我想通过使用另一条路由作为中间件来使其以这种方式工作
我尝试过的临时功能
checkk = (req, res, next) => {
console.log('middleware')
res.redirect('api/auth/confirmation')
next()
}
auth / auth.js
router.post('/confirmation', (req,res)=>{
//do something
})
/users.js
router.post('/', auth.checkk, async (req, res) => {
res.send("user route")
})
期望的输出
middleware
confirm route (If some error occurs it will go back with response)
user route
我不希望用户自己通过/auth/confirmation
来访问/users
端点。
修改
我正在使用express-validator
检查请求正文,我希望中间件对此进行检查
router.post('/confirmation', [
check('name', 'Name is required').not().isEmpty(),
check('email', 'Enter valid email').isEmail(),
答案 0 :(得分:1)
您不会将路由用作中间件,而是将其用作功能。身份验证方案的常见流程是:
POST /users
function setUserContext(req,res,next) {
// get user from session or decode a JWT from auth header etc.
if (user) {
// user will be available for the lifetime of the request
req.user = user
}
next()
}
在所有路由中使用此中间件:app.use(setUserContext)
function requireLoggedInUser(req,res,next) {
if (req.user) {
return next()
}
throw new Error("You need to be logged in")
}
应用于用户路由:app.post('/users', requireLoggedInUser, (req, res) => { ... })
在这种情况下,您没有确认路径,而是具有两个中间件功能。