2017-05-02 3 views
0

Ich möchte eine Website komplett in Abhängigkeit von einem beliebigen Wert anzeigen.Zwischen Routern wechseln Express

Lassen Sie uns sagen, ich habe zwei Router

const express = require('express'); 
const app = express(); 
const router1 = express.Router(); 
router1.get('/', (req, res, next) => res.json({message: 'I am the router1'})) 
const router2 = express.Router(); 
router2.get('/', (req, res, next) => res.json({message: 'I am the router2'})) 
app.use((req, res, next) => { 
    if(Math.random() > 0.5) { 
     // Use router1 
    } else { 
     // Use router2 
    } 
}) 

Ich habe keine Ahnung, wie ich das tun kann. Ich werde ein viele Routen haben (router.get, router.post) Ich möchte nicht, dass

Dank auf jeder Strecke

+0

Probieren Sie 'app.use ('/', Router1 oder Router2);' basierend auf Ihrer Bedingung –

Antwort

1

Nur um zu überprüfen, einen Anruf an den Router zurück:

app.use((req, res, next) => { 
    if(Math.random() > 0.5) { 
     return router1(req, res, next) 
    } else { 
     return router2(req, res, next) 
    } 
}) 
0

Warum nicht einfach ?

if(Math.random() > 0.5) { 
    app.use(router1); 
} else { 
    app.use(router2); 
} 
+0

Sorry, funktioniert nur das erste Mal;) – Ajouve

+0

oh Scheiße, du hast Recht: D – ardilgulez

0

Dies kann auch durch Verwendung von .next('router') Verfahren erfolgen. Hier

ist ein Beispiel:

const router1 = express.Router(); 

router1.use((req, res, next) => { 

    console.log("This gets called everytime!"); 

    if(Math.random() > 0.5) 
    next('router');//skip to next router object 
    else 
    next();//continue with current router 
}); 

router1.get('/',(req, res, next) => { 
    console.log("Continuing with current router"); 
    res.send("Continuing with current router"); 
}); 


const router2 = express.Router(); 

router2.get('/', (req, res, next) => { 
    console.log("Skipped Router 1, continuing with router 2"); 
    res.send("Skipped Router 1, continuing with router 2"); 
}); 

//binding both routers here 
app.use("*", router1, router2); 

.next('router') grundsätzlich springt zum nächsten Router-Objekt, das in der Leitung app.use erwähnt worden ist, wenn nur next() verwendet wird, dann geht es weiter mit aktuellen Router Methoden.