2017-10-12 3 views
0

Je veux utiliser des routes quelque chose comme ça.Routes en express JS prises à partir de la base de données

Par exemple:

routes.use((req, res, next) => { 
 
    /** 
 
    * I have an example routes from database and i was passing into variable 
 
    * I'm assign fromDb as 'api/test' 
 
    */ 
 
    var a = fromDb; 
 
    next() 
 
}) 
 

 
routes.get(a, (req, res, next) => { 
 
    console.log(req.path) 
 
})

Je sais, a variable dans les routes suivantes ne reçoivent pas une valeur de DB provoquer la portée fonctionnelle. Donc, aucune idée pour résoudre cette méthode. Je me demandais si je peux en utilisant modulaire comme celui-ci

const DBRoutes = require('lib/example.js') 
 

 
router.get(DBRoutes, (req, res) => { 
 
    console.log(req.path) 
 
})

Toute idée de la meilleure méthode? Merci

Répondre

1

Vous voulez ajouter un itinéraire en fonction du contenu de votre base de données

Vous pourriez faire la recherche et le succès créer l'itinéraire

par exemple:

dbConnection.lookup(...some query) 
    .then((pathFromDB) => { 
    // where pathfromDb = /api/test 
    routes.get(pathFromDB, (req, res, next) => { 
     console.log(req.path) 
    }) 
    }); 
1

routes.use((req, res, next) => { 
 
    /** 
 
    * I have an example routes from database and i was passing into variable 
 
    * I'm assign fromDb as 'api/test' 
 
    */ 
 
    res.locals.fromDb = fromDb; 
 
    next() 
 
}) 
 

 
routes.get('/your/route', (req, res, next) => { 
 
    console.log(req.path); 
 
    console.log(res.locals.fromDb); 
 
});

C'est une façon de variables passant par différents middlewares express.

Je ne pense pas que vous pouvez configurer dynamiquement des routes pour le serveur web express. Cependant, les routes sont configurées une seule fois au démarrage. Vous pouvez obtenir les itinéraires de la base de données à ce moment-là.

const route = await routeFromDatabase(); 
 

 
routes.get(route, (req, res, next) => { 
 
    console.log(req.path); 
 
    console.log(res.locals.fromDb); 
 
});

Si vous modifiez la base de données après le démarrage, vous devrez redémarrer l'application nœud.

Mise à jour du 19 février 2018: L'utilisateur a mentionné le cas d'utilisation comme passerelle API. Cela vaut la peine d'explorer pour de tels cas d'utilisation: https://www.express-gateway.io/

+0

'/ votre/route'/est extrait de DB, pas une route statique. –

+0

@AdeFirmanFauzi Mise à jour de la réponse –

+0

Merci de mettre à jour votre réponse. J'ai réalisé quand vous dites "Les routes sont configurées une fois au démarrage". Donc, à ce moment-là, je dois redémarrer l'application de noeud quand il y a des changements dans la base de données. Comme vous le savez, le but que je fais cette méthode pour créer une passerelle API. Mais de toute façon, merci de l'expliquer –