Express.js next()函数到底做什么?它在Express包中的位置?

Express.js next()函数到底做什么?它在Express包中的位置?,express,Express,我正在学习node.js和express.js,以期成为一名完整的javascript开发人员。目前,我正在学习express.js和中间件的概念 据我所知,中间件基本上是可以在req res周期内修改请求和响应的功能。这是正确的吗 但是,我对next()函数的概念有点模糊。我知道它是为了调用中间件函数流中的下一个中间件函数而设计的,但是,它来自哪里呢。在express.js包的哪里可以找到它。当您有更多的中间件时,它们将按顺序运行,每个中间件将结果传递给下一个中间件。假设您有一条只能由经过身份

我正在学习node.js和express.js,以期成为一名完整的javascript开发人员。目前,我正在学习express.js和中间件的概念

据我所知,中间件基本上是可以在req res周期内修改请求和响应的功能。这是正确的吗


但是,我对next()函数的概念有点模糊。我知道它是为了调用中间件函数流中的下一个中间件函数而设计的,但是,它来自哪里呢。在express.js包的哪里可以找到它。

当您有更多的中间件时,它们将按顺序运行,每个中间件将结果传递给下一个中间件。假设您有一条只能由经过身份验证的用户访问的路由

  router.get("/products", adminController.getProducts);
也就是说,每当用户向
/products
发出请求时,都要为此路由运行控制器。但是,如果您只想向经过身份验证的用户显示此路由,您将编写一个自定义中间件,检查用户是否经过身份验证,用户是否经过身份验证,您将让
adminController.getProducts
显示错误消息。因此,您将把中间件放在

    router.get("/products", isAuth, adminController.getProducts);
请注意,您可以传递多个中间件。(adminController.getProducts也是一个中间件,但我的意思是,除了iAuth之外,您还可以放置任意数量的产品)
isAuth
将是这样的:

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

假设您设置了一个基于会话的项目。当用户登录时,
express session
(您会很熟悉)将
session.isLoggedIn=true
添加到
req
obj。所以,在用户尝试对“/products”作出反应之前,您将检查
req.session.isLoggedIn
是否为真。如果是,您将让下一个中间件运行,如果不是,您将把用户重定向到“/login”路径。

您不需要知道它在哪里,只需添加所需的中间件,然后调用它即可。