EJS页面渲染异常:访问/all-datas接口持续加载问题求助
解决EJS页面持续加载无法渲染的问题
代码中的核心问题
你的代码存在两个致命问题,导致请求一直处于挂起状态:
- 未处理数据库查询错误:
data.find()的回调函数没有处理err参数。如果数据库查询出错(比如连接失败、集合不存在),代码不会执行任何响应操作,请求就会一直卡在加载状态。 - 变量不匹配:回调里拿到的查询结果是
names,但渲染时传递的是Uname——如果Uname未定义,要么会抛出错误(同样导致请求挂起),要么传递空数据。
修正后的代码
app.get('/all-datas', (req, res) => { data.find({}, function (err, names) { // 优先处理错误 if (err) { console.error(err); return res.status(500).send('数据库查询失败'); } // 使用正确的查询结果变量 res.render('EJS', { // 若已配置view engine为ejs,可省略.ejs后缀 nameList: names }); }); });
额外排查步骤
- 确认
data是正确的数据库模型实例,集合名称与数据库中实际存在的一致。 - 查看控制台是否有数据库连接或查询的错误日志,这是定位问题的关键。
- 检查EJS文件是否存在于配置的views目录下,且文件内无语法错误(比如未闭合的标签、错误的变量引用)。
替代实现方式(使用async/await)
用async/await可以让代码逻辑更清晰,错误处理更直观:
app.get('/all-datas', async (req, res) => { try { const names = await data.find({}); res.render('EJS', { nameList: names }); } catch (err) { console.error(err); res.status(500).send('数据库查询失败'); } });
内容的提问来源于stack exchange,提问作者gamecoders
相关产品推荐
相关产品推荐

