How to configure dynamic routes with express.js

前端 未结 7 2396
Happy的楠姐
Happy的楠姐 2020-12-07 20:32

I have a route.js which looks like this:

module.exports = function(app) {

  app.get(\'/tip\', function(req, res) {
    res.render(\"tip\");
  });

  app.get         


        
7条回答
  •  心在旅途
    2020-12-07 20:47

    There are many ways to implement dynamic express routes. It depends to a great extent on the structure you have implemented in your project, here I leave an example of dynamic routes and I hope it will be useful.

    RouterService.js

    module.exports = (function(myCustomRoutes) {
       let express = require('express');
       let router  = express.Router();
       let methods = Object.keys(myCustomRoutes); // getting methods ('get', 'post'... etc)
       let routesMethod = null;
       let url = null;
    
       for(i in methods) {
          routesMethod = Object.keys(myCustomRoutes[methods[i]]);
          for(j in routesMethod) {
             url = '/' + routesMethod[j];
             url += '/:' + myCustomRoutes[methods[i]][routesMethod[j]].params.join('/:');console.log(url);
             router[methods[i]](url, myCustomRoutes[methods[i]][routesMethod[j]].controller);
          }
       }
    
       return router;
    })();
    

    CustomRoutes.js

    module.exports = (function() {
        let routes = {get: {}, post: {}};
        let routerService = require('./RouterService');
    
        // GET:  /dynamic1
        routes.get.dynamic1 = {
           params: [],
           controller: function(req, res, next) {
               res.send('route 1');
           }
        };
    
        // GET:  /dynamic2/:param1
        routes.get.dynamic2 = {
           params: [':param1'],
           controller: function(req, res, next) {
               res.send('route 2');
           }
        };
        // POST: /dynamic3/:param1/:param1
        routes.post.dynamic3 = {
           params: ['param1', 'param2'],
           controller: function(req, res, next) {
              res.send('route 3');
           }
        };
    
        /*
        *  Export a router with paths
        *  GET:  /dynamic1
        *  GET:  /dynamic2/:param1
        *  POST: /dynamic3/:param1/:param1
        **/
        return routerService(routes);
    })();
    

    app.js

    let express = require('express');
    let app = express();
    
    
    /*
     *  Option 1
     *  GET:  /dynamic1
     *  GET:  /dynamic2/:param1
     *  POST: /dynamic3/:param1/:param1
     **/
     app.use(require('CustomRoutes')());
    
    
    /*
     *  Option 2
     *  GET:  /api/v1/dynamic1
     *  GET:  /api/v1/dynamic2/:param1
     *  POST: /api/v1/dynamic3/:param1/:param1
     **/
     app.use('/api/v1', require('CustomRoutes')());
    

提交回复
热议问题