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

Express异步路由渲染index页面触发无限循环问题咨询

问题原因

和async/await、Mongoose查询逻辑无关——你控制台能正常打印reviews结果,就说明数据库查询已经执行完成了。
问题出在res.render的传参错误:
Express的res.render接口规则是:第一个参数是模板文件名,第二个参数是传给模板的变量对象,第三个参数如果传值,只能传渲染完成后的回调函数;只要传了第三个参数,Express就不会自动把渲染好的HTML返回给客户端,必须手动在回调里发响应。
你写的res.render('index', {"userData": null}, {reviews});,相当于把{reviews}这个普通对象塞到了回调参数的位置。这个对象不是可执行函数,既跑不了回调逻辑,Express也不会自动返回页面,请求就一直挂着,看起来像无限循环。

修复方法

把所有要传给模板的变量都合并到第二个参数里,不要拆成两个对象传:

require('./database');
const Review = require('./server/models/Review');

// Index view file
app.get('/index', async (req, res) => {
  const limitNumber = 8;
  const reviews = await Review.find({}).limit(limitNumber);
  console.log(reviews) 
  // 所有模板变量统一放在第二个对象中传入
  res.render('index', {
    userData: null,
    reviews
  });
});

额外说明

  • 你设的limit是8,但库里只有5条数据,Mongoose会直接返回全部5条,这个逻辑不会报错。
  • 除非你要自定义渲染后的处理逻辑,否则别给res.render传第三个参数。真要用回调的话,记得在回调里手动res.send渲染好的内容,不然请求还是会挂。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:24:24