как подключить мидддвар к отдельному роуту?

Миддлвар на чек авторизации

const jwt = require("jsonwebtoken");
const config = require("config");

module.exports = function(req, res, next) {
  //get token from header
  const token = req.header("x-auth-token");

  //check if not token
  if (!token) {
    return res.status(401).json({ msg: "No token, authorization denied" });
  }

  try {
    const decoded = jwt.verify(token, config.get("jwtSecret"));

    req.user = decoded.user;
    next();
  } catch (error) {
    res.status(401).json({ msg: "Token is not valid" });
  }
};

роуты

const express = require ( 'express' );
const { getLoggedInUser, authUserAndGetToken } = require ( '../controllers/users' );
const router = express.Router ();


router
  .route ( '/' )
  .get ( getLoggedInUser )
  .post ( authUserAndGetToken );



module.exports = router;

пример

app.get('/example/d', [cb0, cb1], function (req, res, next) {
  console.log('the response will be sent by the next function ...');
  next();
}, function (req, res) {
  res.send('Hello from D!');
});


Ответы (1 шт):

Автор решения: Yugofx

Разница вызова метода get на уровне router и route в том, что router.get сначала создает route и потом вызывает на нем метод get. Поэтому, отвечая на ваш вопрос, как передать промежуточные обработчики на конкретный метод, передавайте так, как передавали бы на app.get('/', middlewares, handler), за исключением пути /.

По сути вызовы

router.route('/').get(middlewares, handler)
router.get('/', middlewares, handler)

идентичны. Под капотом вызов метода get создает route и передает первый аргумент в качестве пути (эквивалент первой записи). И потом забирает собственное имя вызванного метода и вызывает аналогичный метод на route, просто передавая middlewares и handler как есть.

→ Ссылка