如何用Express.js获取MongoDB总记录数?我的代码返回空对象
问题原因及解决方法
你的代码存在两个核心问题:
- 错误发送Promise对象而非实际计数结果
Center.countDocuments()返回的是一个Promise实例,你将其赋值给result后,在then回调里直接发送result(即Promise对象),Express序列化Promise对象后会返回空对象{}。 - 错误处理的状态码不符合规范
数据库查询出错时应返回4xx/5xx类错误状态码,而非200(成功状态)。
修正后的代码(推荐async/await写法,逻辑更清晰)
const getCountofCenters = async (req, res) => { try { // await直接获取countDocuments返回的实际计数 const count = await Center.countDocuments(); res.status(200).json({ count }); // 返回结构化JSON数据,方便前端解析 } catch (err) { res.status(500).json({ error: err.message }); // 返回500错误及具体信息 } };
若偏好then/catch写法,修正如下:
const getCountofCenters = (req, res) => { Center.countDocuments() .then(count => res.status(200).json({ count })) // 接收Promise resolve的计数结果并返回 .catch(err => res.status(500).json({ error: err.message })); };
补充说明
- 使用
res.json()替代res.send(),可确保返回标准JSON格式数据,降低前端解析难度。 - 遵循RESTful规范,在错误场景返回对应HTTP状态码,便于调用方识别请求状态。
内容的提问来源于stack exchange,提问作者user19673961
相关产品推荐
相关产品推荐

