Javascript expressJS中的嵌套路由

Javascript expressJS中的嵌套路由,javascript,express,nested-routes,Javascript,Express,Nested Routes,我定义了以下路线 router.get('/:company', function (req, res, next) { // 1. call database and get company data // 2. render company view }) router.get('/:company/employees', function (req, res, next) { // 1. call database and get company data

我定义了以下路线

router.get('/:company', function (req, res, next) {
    // 1. call database and get company data
    // 2. render company view
})

router.get('/:company/employees', function (req, res, next) {
    // 1. call database and get company data
    // 2. call database and get employees data
    // 3. render employees view
})
如何合并这两条路由,只对数据库进行一次调用以获取公司数据。基本上我只想重复使用这个逻辑

我正在寻找类似的东西(经过测试但不起作用)

有一个通用函数为您获取该数据。把路线分开

函数getCompanyData(输入,cb){ //数据库操作 返回cb(数据); } 函数getEmployeeData(输入,cb){ //数据库操作 返回cb(数据); } router.get('/:company',函数(req、res、next){ getCompanyData({ 数据:数据 },函数(错误,数据){ //雷德视图 }); }) router.get('/:company/employees',函数(req、res、next){ getCompanyData({ 数据:数据 },函数(错误,数据){ 如果(!err){ getEmployeeData({ 数据:数据 },函数(错误,数据){ //雷德视图 }) } }); }) 有一个通用函数为您获取该数据。把路线分开

函数getCompanyData(输入,cb){ //数据库操作 返回cb(数据); } 函数getEmployeeData(输入,cb){ //数据库操作 返回cb(数据); } router.get('/:company',函数(req、res、next){ getCompanyData({ 数据:数据 },函数(错误,数据){ //雷德视图 }); }) router.get('/:company/employees',函数(req、res、next){ getCompanyData({ 数据:数据 },函数(错误,数据){ 如果(!err){ getEmployeeData({ 数据:数据 },函数(错误,数据){ //雷德视图 }) } }); })
不能嵌套路由。这样做会造成严重破坏。首先,直到首先命中父路由,然后每次命中父路由时都安装一个新的路由处理程序(从而安装一个重复的路由处理程序),路由才处于活动状态。不能那样做。只需将公共代码移动到一个共享函数中,您可以从多个路由调用该函数。有趣的是,Express route handler体系结构以某种方式使人们忘记了将公共代码放入可从多个位置调用的共享函数的基本编程原则。@jfriend00-“很有趣的是,Express route handler体系结构以某种方式让人们忘记了将公共代码放入可从多个位置调用的共享函数的基本编程原则。“:派斯很有趣。哈哈哈,你不能筑巢。这样做会造成严重破坏。首先,直到首先命中父路由,然后每次命中父路由时都安装一个新的路由处理程序(从而安装一个重复的路由处理程序),路由才处于活动状态。不能那样做。只需将公共代码移动到一个共享函数中,您可以从多个路由调用该函数。有趣的是,Express route handler体系结构以某种方式使人们忘记了将公共代码放入可从多个位置调用的共享函数的基本编程原则。@jfriend00-“很有趣的是,Express route handler体系结构以某种方式让人们忘记了将公共代码放入可从多个位置调用的共享函数的基本编程原则。“:派斯很有趣。哈哈哈。我建议在一个函数中处理多个异步调用时使用模块
async
,尤其是
瀑布
方法@mxncson-我会说“视情况而定”。。对于这样的小用例,我会避免使用
async
。我建议在一个函数中处理多个异步调用时使用模块
async
,尤其是使用
瀑布方法@mxncson-我会说“视情况而定”。。对于这样的小用例,我会避免
async
。。
router.get('/:company', function (req, res, next) {
    // 1. call database and get company data
    // 2. render company view

    router.get('/:company/employees', function (req, res, next) {
        // no need to call database to get company data. we already have it
        // 1. call database and get employees data
        // 2. render employees view
    })

})