Откуда ре, Res приходят в экспресс - PullRequest
0 голосов
/ 26 декабря 2018

Я следовал некоторому учебнику, связанному с экспрессом.

Там автор сделал промежуточное ПО

function authCheck (req, res, next) {
  if (req.user) next() 
  else res.redirect("/somepath")
}

, а затем в API-маршруте использовал его вот так

router.get("/emailfetch", authCheck, async (req, res) => {

})

Вопросы

Итак, у меня три вопроса.

1-й Наша функция authCheck принимает три вещи

  function authCheck (req, res, next) {

, и я не вижу, чтобы мы передавали их при вызове внутри нашего промежуточного программного обеспечения get route, так какон получает req, res, next

2nd. Предположим, я создаю файл вспомогательной функции helper.js , будет ли наш helper.js иметь доступ к req,res,next?

3-й почему он не делает authCheck () , скорее, почему он просто делает authCheck

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

1) Express использует функцию next для перехода к следующему промежуточному программному обеспечению в цепочке.По умолчанию одинаковые параметры req, res и next передаются каждому промежуточному программному обеспечению, поэтому вы можете просто вызвать next(), а не явно передавать параметры через next(req, res, next).Очень редко вам понадобится переопределить эти параметры, но механизм существует для этих типов сценариев.

2) Пока helper.js передается как промежуточное ПО, тогда да.

3)Промежуточное программное обеспечение должно передаваться как функция ref, потому что Express затем вызывает его изнутри.Сценарии, в которых вы, возможно, видели промежуточное программное обеспечение, называемое func(), бывают, когда он внутренне возвращает функцию, соответствующую сигнатуре промежуточного программного обеспечения Express, например

function middleware() {
  return (req, res, next) => {
     ...
  }
}
...
router.get("/path", middleware(), ...

Сам по себе такой подход не имеет значения, однако онможет быть полезен в сценариях, в которых вы хотите передавать дополнительную информацию промежуточному программному обеспечению, а не полагаться на глобальные переменные, что помогает при тестировании.

0 голосов
/ 26 декабря 2018

1.function authCheck (req, res, next): это промежуточное ПО

здесь

  • req для объекта запроса,
  • res для ответаobject,
  • next является функцией промежуточного программного обеспечения в цикле запроса-ответа приложения, передает управление следующему блоку

Подробнее о Middleware

express обеспечивает синтаксис для передачи промежуточного программного обеспечения, как показано ниже:

route.get('/your_route',yourMiddlewareFuntion,function(req,res){

});

, поэтому ваша функция промежуточного программного обеспечения имеет доступ к request и response объекту.

2.Да, вы можете создать свое промежуточное программное обеспечение в отдельном файле и использовать его в своем маршруте.

пример: ваш helper.js похож на:

module.exports = function(req,res,next){
   // middleware logic goes here 
   // like check users is logged in or not 
  if(req.user){ 
     // user is logged in so able to access private route like dashboard
     next();
  }else{
     // redirect user to login page
     return res.redirect('/login');
  }
}

, поэтому теперь вы определяете маршрут как

var checkAuth=require('./helper');

route.get('/dashboard',checkAuth,function(req,res){
    // user is logged in , find some data and display it 
    return res.render('/dashboard');
});

когда вы нажимаете эту маршрутную панель в вашем браузере, запрос сначала проходит через промежуточное ПО checkAuth, он проверяет, вошли вы в систему или нет, если вы не вошли в систему, вы будете перенаправлены на страницу входа.иначе ваш запрос перейдет к следующему блоку, который является функцией в вашем маршруте / dashboard, который будет извлекать пользовательские данные и отображать их на dashboard.

3.В приведенном выше примере мы использовали функцию промежуточного программного обеспечения, потребовав ее и присвоив ей переменную checkAuth, поэтому мы использовали checkAuth, а не checkAuth()

, или вы можете напрямую использовать function(req,res,next){} в своем маршруте какпромежуточный слой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...