来自DB的快速JS中的路由

时间:2017-10-12 06:59:31

标签: javascript node.js express

我想使用类似这样的路线。

例如:

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)
})

我知道,下一个路由中的a变量不会从DB获取值导致功能范围。所以,任何解决这个方法的想法。我只是想知道我是否可以像这样使用模块化

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

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

对最佳方法有什么想法?感谢

2 个答案:

答案 0 :(得分: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);
});

这是通过express中的不同中间件传递变量的一种方法。

我认为您不能为快速Web服务器动态设置路由。但是,路由在启动期间设置一次。您可以在那时从数据库获取路径。

const route = await routeFromDatabase();

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

如果在启动后更改数据库,则必须重新启动节点应用程序。

2018年2月19日更新:用户将用例称为API网关。对于此类用例,这值得探讨:https://www.express-gateway.io/

答案 1 :(得分:1)

您想根据数据库中的内容添加路线

所以你可以进行查找,并在成功时创建路线

例如:

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