Mongoose查询结果控制台可见但浏览器无法渲染页面求助
问题解决:Mongoose find()无法渲染页面且回调写法报错
核心问题分析
- Promise参数顺序错误:你代码中
then()的参数写反了——Mongoose的find()返回的Promise,then()第一个参数是成功结果,错误需通过catch()捕获,而非把err放在第一个位置。这直接导致ProductList始终为undefined,模板拿不到数据无法渲染。 - 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
相关产品推荐
相关产品推荐

