NodeJs Mongoose findById返回状态为true的空文档

时间:2019-02-21 06:46:47

标签: node.js mongodb mongoose mongoose-schema

我正在尝试使用MEAN堆栈实现CRUD操作。我在通过ID获取用户方面遇到问题。它显示状态为true,但返回空文档。

这是我的模特

const userSchema = new mongoose.Schema({
    fullName: {
        type: String,
        required: 'Full name can\'t be empty '
    },
    userName: {
        type: String,
        required: 'user name can\'t be empty ',
        unique: true
    },
    email: {
        type: String,
        required: 'email can\'t be empty ',
        unique: true
    });

mongoose.model('User', userSchema);

在我的控制器中:

const mongoose = require('mongoose');
const passport = require('passport');
var ObjectId = require('mongoose').Types.ObjectId;
const User = mongoose.model('User');

module.exports.getuser = (req, res, next) => {
    if(!ObjectId.isValid(req.params.id))
        return res.status(400).send(`No record with given id : ${req.params.id}`);

    User.findById(req.params.id, (err, user) => {
        if(!err){ res.status(200).json({status: true, user}); }
        else{ console.log('Error in retriving User :' + JSON.stringify(err, undefined, 2)); }
    });    
}

这是路线:

router.get('/:id', jwtHelper.verifyJwtToken, ctrlUser.getuser);

在检查邮递员时,我的状态是:true,但返回空白文档。 我没有得到任何人的帮助,请帮助。 在此先感谢!

3 个答案:

答案 0 :(得分:0)

您使用了错误的参数

req.params._id替换为req.params.id,如下所示:

User.findById( req.params.id, (err, user) => {
        if(!err){ res.status(200).json({status: true, user}); }
        else{ console.log('Error in retriving User :' + JSON.stringify(err, undefined, 2)); }
    });    

答案 1 :(得分:0)

尝试一下。另一种可能的情况是,req.params字符串格式的_id代替了ObjectId。

var id = mongoose.Types.ObjectId(req.params.id);
User.findById(id, (err, user) => {
    if(!err) { 
        res.status(200).json({status: true, user}); 
    }else {
        console.log('Error in retriving User :' + JSON.stringify(err, undefined, 2));
    }
});

答案 2 :(得分:-1)

findById的语法无效

使用findByID的正确语法是

Adventure.findById(id, function (err, adventure) {});

您还可以以此将findById替换为findOne

User.findOne({_id: req.params.id}, (err, user) => {
        if(!err){ res.status(200).json({status: true, user}); }
        else{ console.log('Error in retriving User :' + JSON.stringify(err, undefined, 2)); }
    }); 

或者您也可以使用它

  User.findById(req.params.id, (err, user) => {
            if(!err){ res.status(200).json({status: true, user}); }
            else{ console.log('Error in retriving User :' + JSON.stringify(err, undefined, 2)); }
        }); 

希望这对您有用@sun