app.use Express路由与Node.js中缺少参数

时间:2019-07-03 13:17:10

标签: javascript node.js express routes

我正在尝试将路线的不同部分分成不同的文件

我有一条/houses/路线和一条/houses/:houseid/bookings路线

我在routeHouses.js文件中有/ houses /,我想将部分预订路线放在routeBookings.js文件中,但是由于无法获取:houseid参数,因此无法正常工作。

params对象为空

我正在使用

设置路线
app.use('/profile/houses/:hid/bookings', bookingRoutes)

在routeBookings.js中

router.get('/', auth, (req, res) => {

    database('sh_bookings').select('*').where('b_house_id', req.params.hid).then((bookings) => {

        res.render('profile/bookings/bookings.ejs', {
            bookings: bookings,
            moment: moment
        })

    }).catch(() => {    
        res.status(500).send('An error occured')
    })
})

req.params.hid为空时,它马上就抓住了

如果我使用

将路线移到routeHouses
router.get('/:hid/bookings') 

它可以工作,但我想将其分开。

1 个答案:

答案 0 :(得分:3)

我不相信您可以使用这种快速路由器。预订Routes路由器无权访问其他路由器参数,因为预订Routes只能访问“父”路由器URL之后的任何内容。

如果您确实有需要这样做,可以使用以下示例代码来解决。但是id表示尝试重组API路由会导致我不确定这样做的效果。

抱歉,这么多修改。决定最好将该逻辑提取到中间件功能中

const bindHid = (req, res, next) => {
  req.hid = req.params.hid;
  next();
}

app.use('/homes/:hid/bookings', bindHid, bookingRoutes)

bookingRoutes.use('/', (req, res, next) => {
  res.send(req.hid)
})