如何为Mongoose返回的无名数组添加名为results的父对象?
解决Mongoose接口返回无名数组改为带results键的对象问题
你的EventModel定义本身没有问题,要实现返回带results名称的数组,需要修改接口的返回逻辑——也就是在查询事件列表的路由/控制器代码中,把Mongoose查询到的数组包装成一个包含results键的对象。
修改前的典型接口代码(返回无名数组)
// 示例:Express框架下的接口路由 const EventModel = require('./path/to/event.model'); app.get('/api/events', async (req, res) => { try { const events = await EventModel.find(); res.status(200).json(events); // 直接返回数组,前端拿到的是无名数组 } catch (err) { res.status(500).json({ error: err.message }); } });
修改后的接口代码(返回带results键的对象)
只需要把查询到的数组放入results字段中返回即可:
const EventModel = require('./path/to/event.model'); app.get('/api/events', async (req, res) => { try { const events = await EventModel.find(); // 将数组包装在results字段里返回 res.status(200).json({ results: events }); } catch (err) { res.status(500).json({ error: err.message }); } });
扩展:带分页信息的返回格式(可选)
如果需要分页功能,可以同时返回分页相关参数,方便Flutter前端处理:
app.get('/api/events', async (req, res) => { try { const page = parseInt(req.query.page) || 1; const limit = parseInt(req.query.limit) || 10; const skip = (page - 1) * limit; const events = await EventModel.find().skip(skip).limit(limit); const totalEvents = await EventModel.countDocuments(); res.status(200).json({ results: events, pagination: { currentPage: page, pageSize: limit, totalCount: totalEvents, totalPages: Math.ceil(totalEvents / limit) } }); } catch (err) { res.status(500).json({ error: err.message }); } });
修改完成后,Flutter前端就能通过response['results']直接获取到命名的事件数组,符合你的需求。
内容的提问来源于stack exchange,提问作者DBG
相关产品推荐
相关产品推荐

