javascript 如何在Express中使用`next`重定向到另一个函数

k2arahey  于 2023-05-27  发布在  Java
关注(0)|答案(1)|浏览(100)

我正在使用Nodejs,我正在使用expressjs,现在我正在尝试使用中间件功能,但我们如何使用“next”重定向到另一个函数,这是我当前的代码

const authMiddleware = (req, res, next) => {
  // Check if user is authenticated
  const isAuthenticated = checkAuthentication(req);

  if (isAuthenticated) {
    // Now you have verified the has valid a token. So how can we redirect to another function
    next();
  } else {
    // User is not authenticated, send an unauthorized response
    res.status(401).send('Unauthorized');
  }
};
j2cgzkjk

j2cgzkjk1#

为了使用next“重定向”到另一个函数,您可以简单地将该函数定义为另一个中间件,并让它位于中间件链中的身份验证中间件之后。下面是你如何构建它:

const authMiddleware = (req, res, next) => {
  // Check if user is authenticated
  const isAuthenticated = checkAuthentication(req);

  if (isAuthenticated) {
    next();
  } else {
    res.status(401).send('Unauthorized');
  }
};

const nextFunction = (req, res, next) => {
  // You can put your logic here after user is authenticated.
  // This function will be called after `authMiddleware` if `next()` is called in `authMiddleware`.
};

// Define your routes
app.use(authMiddleware);
app.use(nextFunction);

// The rest of your routes...

注意:注意不要在res.send()或res.json()之后调用next(),因为这会导致错误。在发送响应之后,通常不应调用res对象上的任何其他函数或方法。
在本例中,nextFunction将是在authMiddleware之后执行的函数。在使用app.use(...)设置中间件之后,您可以定义路由或端点。这可以确保每个请求都按照设置的顺序通过中间件。如果你在authMiddleware中调用next(),它将继续到nextFunction。
此外,如果你想确保authMiddleware只应用于某些路由,你可以通过在路由定义之前将其作为参数传递来实现,如下所示:

app.get('/protected-route', authMiddleware, (req, res) => {
  // Your route handling code here.
});

相关问题