CyrisXD
CyrisXD

Reputation: 147

Best way to handle dynamic routes with its own logic in ExpressJS?

I've been tasked with something at work that's beyond my current skills so any help is appreciated.

I'm building an admin where you can add "games". Each game needs to have it's own front-end, routes, and logic.

Kinda like, mainsite.com/game/game1

mainsite.com/game/game2

mainsite.com/game/game3

At the moment I'm just creating a directory based on the game name.

 var dir = "./games/" + req.body.gameId;
        if (!fs.existsSync(dir)) {
          fs.mkdirSync(dir);
 }

In turn I can pull the .ejs file via:

/* GET dynamic game page. */
router.get("/game/:game", function(req, res, next) {
  res.render("../games/"+req.params.game+"/index", { title: "Express" });
});

But I am confused on how it can have it's own logic, routes, connecting to database, front-end, stylesheets inside it's own folder.

There must be a better way to achieve this right?

Cheers

Upvotes: 2

Views: 109

Answers (1)

Nathan Fries
Nathan Fries

Reputation: 1524

Yes! In Express, you can call app.use() inside a route. You will be able to define a public folder to contain the CSS, JS, and assets that are specific to each route. Just call app.use(express.static('route/to/assets')) inside the route.

app.get('/game/:game', (req, res) => {
    app.use(express.static(req.params.game + '/public'))
    res.render('../games/' + req.params.game + "/index", { title: "Express" })
})

Seems strange, but perfectly allowed.

Upvotes: 4

Related Questions