温馨提示:本文翻译自stackoverflow.com,查看原文请点击:javascript - Param missing in app.use express route with nodejs
express javascript node.js routes

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

发布于 2020-03-27 10:22:16

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

我有/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抓住了,因为它是空的

如果我将路线移入路线

router.get('/:hid/bookings') 

它有效,但我想将其分开。

查看更多

查看更多

提问者
Morten Hagh
被浏览
218
Morgan Brown 2019-07-03 21:44

我不相信您可以使用这种快速路由器。预订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)
})