我想使用类似这样的路线。
例如:
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)
})
对最佳方法有什么想法?感谢
答案 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)
})
});