最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

使用NodeJS Express服务器从MongoDb的ObjectId以外的字段中获取数据

IT培训 admin 14浏览 0评论

使用NodeJS Express服务器从MongoDb的ObjectId以外的字段中获取数据

我不想使用自动生成的_id字段,而使用router.get从我的集合中获取数据。我一直不断收到错误消息:

"message": "Cast to ObjectId failed for value \"xxxxxxxxxx\" at path \"_id\" for model \"Member\""

这是我的路线:

GET http://localhost:3000/members/xxxxxxxxxx

这是我的请求功能

async function getMemberBySSN(req, res, next) {
    let member
    try {
        member = Member.find({ ssn: req.params.ssn }, null);
        if (member == null) {
            return res.status(404).json({ message: "Cannot find member" });
        }
    } catch(e) {
        return res.status(500).json({ message: e.message });
    }
    res.member = member
    next();
}

我从这条路线打来的电话:

router.get("/:ssn", getMemberBySSN, (req, res) => {
    res.json(res.member);
})

这是模特

const mongoose = require("mongoose");

// Object containing keys for different props in member
const memberSchema = new mongoose.Schema({
    ssn: {
        type: String,
        required: true
    },
    name: {
        type: String,
        required: true
    },
    email: {
        type: String,
        require: true
    },
    isJunior: {
        type: Boolean,
        required: true
    },
    isAdmin: {
        type: Boolean,
        required: true
    },
});

//params: name of model in db, the schema that corresponds to the model, the collection in db
module.exports = mongoose.model("Member", memberSchema, "_splurggenMembers");

所有帮助将不胜感激。谢谢。

回答如下:

您可以使用以下代码通过ssn查找成员

Member.find({ ssn: req.params.ssn}, null);

并且如果您不想在响应中输出对象ID,则在架构模型中使用以下代码从输出响应中删除ID。

memberSchema.set('toJSON', {
  virtuals: true,
  transform: function (doc, ret) {
    delete ret._id;
  }
});

使用NodeJS Express服务器从MongoDb的ObjectId以外的字段中获取数据

我不想使用自动生成的_id字段,而使用router.get从我的集合中获取数据。我一直不断收到错误消息:

"message": "Cast to ObjectId failed for value \"xxxxxxxxxx\" at path \"_id\" for model \"Member\""

这是我的路线:

GET http://localhost:3000/members/xxxxxxxxxx

这是我的请求功能

async function getMemberBySSN(req, res, next) {
    let member
    try {
        member = Member.find({ ssn: req.params.ssn }, null);
        if (member == null) {
            return res.status(404).json({ message: "Cannot find member" });
        }
    } catch(e) {
        return res.status(500).json({ message: e.message });
    }
    res.member = member
    next();
}

我从这条路线打来的电话:

router.get("/:ssn", getMemberBySSN, (req, res) => {
    res.json(res.member);
})

这是模特

const mongoose = require("mongoose");

// Object containing keys for different props in member
const memberSchema = new mongoose.Schema({
    ssn: {
        type: String,
        required: true
    },
    name: {
        type: String,
        required: true
    },
    email: {
        type: String,
        require: true
    },
    isJunior: {
        type: Boolean,
        required: true
    },
    isAdmin: {
        type: Boolean,
        required: true
    },
});

//params: name of model in db, the schema that corresponds to the model, the collection in db
module.exports = mongoose.model("Member", memberSchema, "_splurggenMembers");

所有帮助将不胜感激。谢谢。

回答如下:

您可以使用以下代码通过ssn查找成员

Member.find({ ssn: req.params.ssn}, null);

并且如果您不想在响应中输出对象ID,则在架构模型中使用以下代码从输出响应中删除ID。

memberSchema.set('toJSON', {
  virtuals: true,
  transform: function (doc, ret) {
    delete ret._id;
  }
});
发布评论

评论列表 (0)

  1. 暂无评论