Ý nghĩa của next trong expressjs



  • Em xem nhiều thằng nodejs mà vẫn thấy cái callback của nó trừu tượng quá các bác ạ :(.
    Các bác cho em hỏi cái next trong đoạn code kia có ý nghĩa gì nhỉ? Có hoặc k có nó sẽ ảnh hưởng thế nào tới hệ thống phía sau.

    app.use('/user/:id', function (req, res, next) {
    console.log('Request Type:', req.method);
    next();
    });



  • Trong expressj, next() dùng để nhảy tới rout tiếp theo mà match với url khi clien request.
    Ví dụ trong đoạn code bên dưới:

    • nếu url: /users
      • rout * thực hiện visitCounter ++;
      • chạy tiếp vào rout /users
    • tương tự url: /products
      • vào rout * thực hiện visitCounter ++;
      • chạy tiếp vào rout /products
    app.all('*', function(req, res, next){
      visitCounter ++;
      next();
    });
    
    app.get('/users', function() {
      //...
    });
    
    app.get('/products', function() {
      //...
    });
    

    NHAN NGUYEN

    2


  • @nguyenquynhan Cảm ơn bác ạ. Em hiểu cơ bản rùi ạ :)
    Có 1 phần nữa là nếu ấp dụng thế này:

    var attachDB = function(req, res, next) {
    req.db = db;
    next();
    };
    app.all('/', attachDB, function(req, res, next) {
    Home.run(req, res, next);
    });

    thì cái next sử tiếp dụng chạy khi url match với "/", vậy next chuyển đi tiếp có tác dụng gì nữa anh nhỉ?



  • Anh tham khảo thêm ở đây để hiểu rõ hơn : http://expressjs.com/en/guide/writing-middleware.html



  • Để hiểu về next() trước tiên bạn cần hiều một web server không chỉ xử lý đoạn code của bạn viết mà trước đó nó xử lý một loạt các middlewares khác. Hiểu một cách trừu tượng thì phần code của bạn ở trong app.get(...) là middleware cuối cùng của một request.

    Khi một middleware được invoke thì nó block tiến trình xử lý request của bạn lại. Và hàm next trong một middleware sinh ra để thông báo cho express biết là mdw này xử lý xong rồi, nhảy sang mdw khác xử lý tiếp thôi...


Log in to reply