NodeJs Mongoose findById возвращает пустой документ со статусом true - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь реализовать операции CRUD с использованием стека MEAN.У меня проблема с получением пользователя по 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 голосов
/ 21 февраля 2019

синтаксис для findById недействителен

правильный синтаксис для использования findByID:

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

u также можно заменить 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

0 голосов
/ 21 февраля 2019

Попробуй это.Другой возможный сценарий заключается в том, что _id в формате req.params String вместо 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));
    }
});
0 голосов
/ 21 февраля 2019

Вы используете неправильный параметр

, замените 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)); }
    });    
...