[Hỏi] Nếu thay đổi url request trong 1 middleware nào đó thì các middleware khác không được nhảy đến



  • Chào các bạn mình có 1 vấn đề sau:

    Khi mình thay đổi url của request trong 1 middleware nào đó thì chỉ có middleware ngay sau đó được gọi mà các middleware khác bị bỏ qua. Ví dụ đoạn code sau:

    const express = require('express')
    const app = express()
    
    app.get('/',function (req, res, next) {
     req.url = req.protocol + '://' + req.get('host') + req.originalUrl + 'next'   // thay url bằng http://localhost:3000/nxt
     console.log('middleware1');
     next()
    })
    
    app.use('/nxt',function (req, res, next) {
     console.log('middleware2');
     next()
    })
    
    app.use('/nxt',function (req, res, next) {
     console.log('middleware3');
     next()
    })
    
    app.listen(3000);
    

    Khi mình vào bằng đường dẫn http://localhost:3000 thì phần console chỉ in ra middleware1, middleware2 mà ko in ra middleware3, tức là nó đã không nhảy vào middleware3. Nhưng nếu mình vào bằng http://localhost:3000/next thì phần console in ra middleware2, middleware3, tức là nó đã có chạy vào middleware3. Ai có thể giải thích giúp mình hiện tượng đó được không ạ?

    Cảm ơn các bạn!!

    alt text




  • Global Moderator

    @Quy-Tran Bạn có thể giải thích cụ thể hơn không? Tức là với middleware trên 1 route giống nhau thì đưa vào Router à?

    Tech-nông
    Email: [email protected]
    Profile: about.me/vunb
    Github: github.com/vunb
    Twitter: @nhubaovu

    0


  • @Vũ Không cần dùng router

    
    app.get('/default-page', function (req, res) {
      let content = JSON.stringify(config);
    
      res.send('default page');
    });
    
    app.use(function (req, res, next) {
      req.url = '/default-page';
      app.handle(req, res, next); // <--- here
    });
    
    

    Quan trọng là 2 dòng

    req.url = '/default-page';
    app.handle(req, res, next);
    

Log in to reply