Node Express 4 middleware after routes

前端 未结 5 487
后悔当初
后悔当初 2021-01-01 10:22

Following the upgrade to Express 4, and the removal of app.router, I\'m struggling to get middleware to execute after routes execute.

e.g. the following code correct

5条回答
  •  佛祖请我去吃肉
    2021-01-01 10:45

    In regards to Express 4, the "after" function from your second example never gets called because the middle function never calls next().

    If you want the "after" function to get called, then you need to add and call the next callback from your middle function like this:

    var express = require( "express" )();
    
    express.use( function( req, res, next ) {
    
      console.log( "before" );
      next();
    
    } );
    express.get( "/", function( req, res, next ) {
    
      res.send( "hello" );
      next();      // <=== call next for following middleware 
    
    } );
    express.use( function( req, res, next ) {
    
      console.log( "after" );
      next();
    
    } );
    
    express.listen( 8888 );
    

    res.send() writes the headers and response back to the client.

    Beware, that once res.send() has been called, you won't want to update your response headers or contents. But you can do other tasks like database updates or logging.

    Note that express looks at the the number of arguments in the middleware function and does different logic. Take express error handlers for example, which have 4 parameters defined.

    express error handler signature: app.use(function(err, req, res, next) {});

    Calling next on the very last item in your middleware chain is optional, but probably a good idea in case you ever change things around.

提交回复
热议问题