首页  >  问答  >  正文

探索 Express 中间件中“下一个”函数的功能及其在重定向到另一个函数中的作用。

我是Nodejs新手,正在研究Express js,现在我正在研究特定路由的“中间件函数”,我想知道“next有什么用”,意味着在验证“next”函数可以做什么之后做 ?如果我们想移动/重定向到另一个函数那么我们该怎么做?什么是“checkAuthentication”?这是我当前的代码

const express = require('express');
const app = express();

// Custom middleware function
const authMiddleware = (req, res, next) => {
  // Check if user is authenticated
  const isAuthenticated = checkAuthentication(req);
  
  if (isAuthenticated) {
    next();
  } else {
    // User is not authenticated, send an unauthorized response
    res.status(401).send('Unauthorized');
  }
};

// Middleware function is applied to specific routes
app.get('/protected', authMiddleware, (req, res) => {
  res.send('Protected Route');
});

// Route handler
app.get('/', (req, res) => {
  res.send('Home Page');
});

// Start the server
app.listen(3000, () => {
  console.log('Server is listening on port 3000');
});

P粉195402292P粉195402292181 天前343

全部回复(1)我来回复

  • P粉738676186

    P粉7386761862024-04-03 16:05:48

    接下来是传递给中间件函数的回调函数。您可以在不同的框架中找到它的不同名称,但概念保持不变。

    我将尝试通过您的代码本身来解释中间件。

    const express = require('express');
    const app = express();
    
    function checkAuthentication(req) {
      /*
      I am considering this as my authentication function. 
      When the user logged in, server has sent him a token, which now will act as a validator. 
      */
    
      if (req.headers.token) {
        const user = someFunctionToFetchUser(req.header.token)
        return user
      } else {
        return false
      }
    }
    
    /*
    Now I want a function to be there on each protected api routes
    to make user if user has a valid token then only allow them to interact with the data base otherwise throw an error 
    */
    
    
    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 allow user 
        // to reach to the controller or any other middleware, if any.
        next();
      } else {
        // User is not authenticated, send an unauthorized response
        res.status(401).send('Unauthorized');
      }
    };
    
    // Middleware function is applied to specific routes
    app.get('/protected', authMiddleware, (req, res) => {
      res.send('Protected Route');
    });
    
    // You can have any number of middlewares
    app.get('/protected', authMiddleware, someOtherMiddleware, (req, res) => {
      res.send('Protected Route');
    });
    
    // And also you can pass data from middleware to next middleware/controller also by attahching it with request
    
    function newMiddleware(req, res, next) {
      req.foo = "bar" //Now you can access this foo variable in next function.
    }

    回复
    0
  • 取消回复