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

Mongoose查询结果控制台可见但浏览器无法渲染页面求助

问题解决:Mongoose find()无法渲染页面且回调写法报错

核心问题分析

  1. Promise参数顺序错误:你代码中then()的参数写反了——Mongoose的find()返回的Promise,then()第一个参数是成功结果,错误需通过catch()捕获,而非把err放在第一个位置。这直接导致ProductList始终为undefined,模板拿不到数据无法渲染。
  2. Mongoose版本兼容性:Mongoose 6+已彻底移除对回调函数的支持,所以旧版回调写法会触发报错,必须使用Promise或async/await语法。

修正后的代码示例

方案1:修正Promise写法

let mongoose = require('mongoose');
let ByProduct = require('../models/Byproduct')

router.get('/',(req,res,next)=>{
    ByProduct.find()
      .then((productList)=>{
          res.render('Byproduct', {title: 'Product List', productList: productList})
      })
      .catch((err)=>{
          console.error(err);
          res.status(500).send('获取产品列表失败');
      });
});

module.exports = router;

方案2:更推荐的async/await写法(可读性更高)

let mongoose = require('mongoose');
let ByProduct = require('../models/Byproduct')

router.get('/', async (req,res,next)=>{
    try {
        const productList = await ByProduct.find();
        res.render('Byproduct', {title: 'Product List', productList: productList});
    } catch (err) {
        console.error(err);
        res.status(500).send('获取产品列表失败');
    }
});

module.exports = router;

额外检查项

  • 确认Byproduct模板文件路径正确,文件名拼写(含大小写)与res.render中的参数完全匹配,比如模板是否在views目录下,是否为Byproduct.ejs/Byproduct.pug等对应格式。
  • 检查模板中是否正确使用了productList变量,比如是否通过循环遍历该数组渲染内容。

内容的提问来源于stack exchange,提问作者AHF

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 06:15:24