简体   繁体   English

我可以在 express js 的控制器中使用路由吗?

[英]Can i use route inside a controller in express js?

So I have something like this in one of my controllers:所以我的一个控制器中有这样的东西:

module.exports.authToken = (req, res, next) => {
    const token = req.cookies.jwt;
    //console.log(token);
    if (!token) {
        return res.sendStatus(403);
    }
    try {
        const data = jwt.verify(token, "secret token");
        console.log(data);
        req.userId = data.id;
        return next();
      } catch {
        return res.sendStatus(403);
      }
  };

and it's called by a route:它被一条路线调用:

router.get("/protected", authController.authToken, (req, res) => {
    return res.json({ user: { id: req.userId, role: req.userRole } });
  });

and I want to get a JSON response of that route in one of my other controllers.我想在我的其他控制器之一中获得该路由的 JSON 响应。 I tried some things but none of it worked.我尝试了一些东西,但没有一个奏效。

What I would do is abstract the response out to a function for re-use:我要做的是将响应抽象为一个函数以供重用:

// the function will just return the data without writing it to the response
function protectedRoute(req) {
    return {user: {id: req.userId, role: req.userRole}};
}

router.get("/protected", authController.authToken, (req, res) => {
    // in the actual handler you can return the response
    return res.json(protectedRoute(req));
});

// make sure the middleware is still being run
router.get("/other_route", authController.authToken, (req, res) => {
    // use the same function to get the response from /protected
    const protectedResponse = protectedRoute(req);
    // do stuff with it
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM