javascript - Mongoose - find() 在没有传递参数时不返回任何内容,但在传递参数时返回数据

标签 javascript node.js mongodb api mongoose

我在 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从顶部到按钮执行代码,这就是这个问题的原因。它将匹配您的第一个端点,并假设 uidnull。只需更改定义端点的顺序,如下所示:

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/

相关文章:

javascript - 在 ng-repeat 中显示字符串输出

javascript - 客户端浏览器的 Socket.IO 检测有时会失败

javascript - Socket.io 仅向当前用户发送

mongodb - 使用 meteor、cordova 在 sqlite 和 mongo 之间同步数据

mongodb - 通过聚合中的索引投影嵌套数组字段值

javascript - 如何判断 Meteor minimongo 何时与 mongo 服务器同步

javascript - 如何在html中使用滚动条动态分配按钮?

JavaScript;背景颜色更改并使用/相同输入改回

javascript - 我可以使用 setTimeout 创建一个廉价的无限循环吗?

按类型分类的 Javascript/JQuery 参数