Что именно делает Express.js функция next() выполняет и где находится в экспресс-пакете?

#express

#экспресс

Вопрос:

Я учусь node.js и express.js в стремлении стать полнофункциональным разработчиком javascript. В настоящее время я изучаю express.js и идея промежуточного программного обеспечения.

Насколько я понимаю, промежуточное ПРОГРАММНОЕ обеспечение — это в основном функции, которые имеют доступ для изменения запроса и ответа в цикле запроса-разрешения. Это правильно?

Тем не менее, я немного не понимаю идею функции next(). Я понимаю, что она предназначена для вызова следующей функции промежуточного программного обеспечения в потоке функций промежуточного программного обеспечения, однако, откуда она берется. Где я могу найти его в express.js посылка.

Комментарии:

1. вам не нужно знать, где она находится, просто добавьте нужные вам промежуточные программы и затем вызовите ее.

Ответ №1:

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

   router.get("/products", adminController.getProducts);
 

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

     router.get("/products", isAuth, adminController.getProducts);
 

Обратите внимание, что вы можете передать более одного промежуточного программного обеспечения. (AdminController.GetProducts также является промежуточным программным обеспечением, но я имею в виду, что помимо isAuth вы можете разместить столько, сколько захотите)
isAuth будет что-то вроде этого:

 export const isAuth = (req, res, next) => {   
  if (!req.session.isLoggedIn) {
    return res.redirect("/login");
  }
  next();
};
 

Представьте, что вы настраиваете проект, основанный на сеансе. Когда пользователь войдет в систему, express-session (вы познакомитесь) добавится session.isLoggedIn=true к req объекту. Поэтому, прежде чем пользователь попытается отреагировать на «/products», вы будете проверять, req.session.isLoggedIn верно ли это. Если да, вы разрешите запустить следующее промежуточное программное обеспечение, если нет, вы перенаправите пользователя на маршрут «/ login».