如何使用POST路由作为中间件

时间:2019-06-09 08:09:30

标签: javascript node.js express router

我有2条路线

  1. users.js POST api/users
  2. auth.js 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(),

1 个答案:

答案 0 :(得分:1)

您不会将路由用作中间件,而是将其用作功能。身份验证方案的常见流程是:

  1. 用户请求访问安全路由POST /users
  2. 第一个中间件将设置用户上下文,例如:
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)

  1. 第二种中间件功能可以应用于需要保护的路由:
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) => { ... })

在这种情况下,您没有确认路径,而是具有两个中间件功能。