我在 teamMembers.js
中有以下模型:
const { Schema, model } = require('mongoose');
const teamMembersSchema = new Schema({
uid: String,
name: String,
hours: Number
})
const TeamMembers = model('teamMembers', TeamMembersSchema);
module.exports = TeamMembers;
我在 teamMemberRoute.js
中创建了以下端点:
const TeamMembers = require('./models/teamMembers');
module.exports = (app) => {
app.get('/api/pods/teamMembers/:uid', async (req, res) => {
let teamMember = await TeamMembers.find( {'uid': req.params.uid } );
return res.status(200).send(teamMember);
});
app.get('/api/pods/teamMembers', async (req, res) => {
let teamMembers = await TeamMembers.find();
return res.status(200).send(teamMembers);
});
}
第一个端点 (/api/pods/teamMembers/:uid
) 工作得很好 - 当我传递 uid
时,它返回特定于该 uid 的文档
在 TeamMember 集合中。
第二个端点应该返回 TeamMember 集合中的所有文档,因为没有传递任何参数。但是,当执行请求时,仅返回[]
。我们知道文档存在于 TeamMember 集合中,因为第一个端点根据传递的 uid
参数从该集合返回数据。
我被这个问题难住了。有任何想法吗?我认为我的模型没有任何问题,因为我能够毫无问题地执行第一个端点。
最佳答案
Express从顶部到按钮执行代码,这就是这个问题的原因。它将匹配您的第一个端点,并假设 uid
为 null
。只需更改定义端点的顺序,如下所示:
module.exports = (app) => {
app.get('/api/pods/teamMembers', async (req, res) => {
let teamMembers = await TeamMembers.find();
return res.status(200).send(teamMembers);
});
app.get('/api/pods/teamMembers/:uid', async (req, res) => {
let teamMember = await TeamMembers.find( {'uid': req.params.uid } );
return res.status(200).send(teamMember);
});
}
关于javascript - Mongoose - find() 在没有传递参数时不返回任何内容,但在传递参数时返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68854666/