exit from chain of route specific middleware in express/ nodejs

前端 未结 3 1413
清歌不尽
清歌不尽 2021-02-08 05:07

I have a chain of \"route specific middleware\" for this route, like so:

    var express = require(\'express\');
    var server = express();
    var mw1 = functi         


        
3条回答
  •  臣服心动
    2021-02-08 05:58

    You can call next( 'route' ), as said on the express api reference, application routing section:

    Multiple callbacks may be given, all are treated equally, and behave just like middleware, with the one exception that these callbacks may invoke next('route') to bypass the remaining route callback(s).

    Example

    var express = require('express')
      , app = express()
    ;
    
    // keep an eye on the function names
    app.post( '/some/path', middleware1, middleware2, function route1( req, res, next ) {
          // write response
    });
    app.all( '*', function route2( req, res, next ) {
        // do something like handle a 404 request
    });
    app.use(function errorHandler( err, req, res, next ) {
        // handle error
    });
    
    function middleware1( req, res, next ) {
        // ...
        if ( !success ) {
            // bypasses middleware2 and route1, route2 will be called
            return next( 'route' );
        }
        // calls middleware2
        next();
    }
    // intentionally similar to middleware1 to keep things clear
    function middleware2( req, res, next ) {
        if ( !success ) {
          // bypasses route1 and route2
          // errorHandler will be called with the error
          return next( Error( 'middleware 2 failed' ) );
        }
        // calls route1
        next();
    }
    

提交回复
热议问题