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

标签 javascript node.js express routes

我正在尝试将路线的各个部分分离到不同的文件中

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

我在routesHouses.js 文件中有/houses/,我想将部分预订路线放入routesBookings.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 为空,它立即就捕获了

如果我将路线移动到routesHouses中

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

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

最佳答案

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

如果您确实觉得有必要这样做,这里有一些示例代码可以解决它。但我想说尝试重构你的 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)
})

关于javascript - app.use Express 路由中缺少参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56871080/

相关文章:

javascript - Node.js如何知道express.js位置

javascript - 使用 firebase 调用数据库中的所有对象

javascript - 包含到页面后使用 Javascript 命令

javascript - 更改 HTML5 中 canvas 元素的 DPI

javascript - 无法使用 sequelize-auto 读取未定义的属性 'findOrCreate'

node.js - 如何在 React/Node/Express 中将 MongoDB Buffer 转换为 Image

javascript - 我们应该将 jQuery 与 AngularJS 一起使用吗?

node.js - Windows 10 邮件渐变不显示

node.js - 转到 Visual Studio 代码中的定义不起作用

mysql - 使用 sequelize 和 nodejs 更新多条记录?