You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

mongoose使用findById时报错path需为字符串却收到model实例怎么解决

问题原因
  • 报错和findById执行无关,问题出在res.render的参数使用错误。
  • Express的res.render()方法第一个入参要求为字符串类型的视图模板路径(对应项目views目录下的模板文件),你直接将Bid.findById返回的Mongoose模型实例作为第一个参数传入,类型不匹配触发类型错误。
  • 接口未添加异步异常捕获逻辑,异步抛出的错误未被处理,进而出现UnhandledPromiseRejectionWarning相关警告。
解决方法

根据你的业务需求二选一即可:

场景1:需要渲染模板页面

修正res.render的传参,第一个参数填实际的模板路径,第二个参数传入要注入模板的查询数据,同时添加异常捕获逻辑:

app.get('/:id', async (req,res, next) => {
    try {
        const id = req.params.id;
        const bids = await Bid.findById(id)
        // 示例:如果模板文件是views/bidDetail.ejs,第一个参数填'bidDetail'
        res.render('你的实际模板文件名', { bids })
    } catch (err) {
        // 将异常传递给Express错误处理中间件
        next(err)
    }
})

场景2:仅需要返回JSON数据

不需要调用res.render,直接使用res.json()返回查询结果即可:

app.get('/:id', async (req,res, next) => {
    try {
        const id = req.params.id;
        const bids = await Bid.findById(id)
        res.json(bids)
    } catch (err) {
        next(err)
    }
})

内容的提问来源于stack exchange,提问作者20CS039 - Gratus Richard A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:36:05