代码之家  ›  专栏  ›  技术社区  ›  Jessica

当我链接/嵌套一个中间件时,我得到一个错误

  •  0
  • Jessica  · 技术社区  · 5 年前

    我的代码是:

    // middleware1
    module.exports = function(req, res, next) {
        req.user = 'current user';
        next();
    };
    
    // middleware2
    module.exports = function(req, res, next) {
        middleware1(req, res, next);
        if (req.user !== 'current user') return res.status(403).send('Access denied');
        next();
    };
    
    
    // API
    router.get('/api', middleware2, async (req, res) => {
        return res.send(req.user);
    });
    

    我做错了什么?如何正确地将一个中间件链接或嵌套到另一个中间件中?

    (web应用程序有更多内容,但我只包含了重现错误所需的内容)

    1 回复  |  直到 5 年前
        1
  •  1
  •   abondoa    5 年前

    既然你路过 next

    您可以将中间商连锁为:

    router.get('/api', middleware1, middleware2, [...])
    

    或者你希望你的中间人2表现得像:

    //middleware2
    module.exports = function(req, res, next) {
        middleware1(req, res, () =>
            if (req.user !== 'current user') return res.status(403).send('Access denied');
            next();
        );
    };