猫鼬findById返回空文档

时间:2019-02-21 07:31:56

标签: node.js mongoose mongodb-query 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,但返回空白文档。 我没有得到任何人的帮助,请帮助。 在此先感谢!

1 个答案:

答案 0 :(得分:-1)

您可能无法找到并返回用户的原因可能有多种。我将通过此清单来查看可能发生的情况:

  1. 定义架构时,required字段采用布尔值或函数,而不是字符串。为了安全起见,将您的字符串更改为true可以确保所有新的数据库记录都包含这些字段。 (https://mongoosejs.com/docs/schematypes.html#schematype-options

  2. 在控制器中导入模型时,无需再次调用mongoose.model;此步骤在模型文件中执行。确保在模型文件/模块中导出mongoose.model('User', userSchema)对象,然后在控制器模块中执行常规的const User = require(<pathToModelFile>);

如果仍然无法执行...

  1. 您将要确保您的记录实际上已保存在数据库中。通过运行$ mongo在终端中运行mongo shell,并使用此处找到的命令来使用您的数据库并搜索User集合:https://docs.mongodb.com/manual/reference/mongo-shell/

这通常是我对模型和控制器(带有路由)进行编码的方式:

模型文件-注意,您确实需要猫鼬

const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
    fullName: {
        type: String,
        required: true
    },
    userName: {
        type: String,
        required: true,
        unique: true
    },
    email: {
        type: String,
        required: true,
        unique: true
    });

module.exports = mongoose.model('User', userSchema);

控制器/路由器-

const express = require('express');
const router = express.Router();
const mongoose = require('mongoose');
const passport = require('passport');
const User = require('User');

router.get('/:id', jwtHelper.verifyJwtToken, async (req, res) => {
   try {
    const user = await User.findById(req.params.id);
    res.status(200).json({status: true, user});
  } catch (e) {
    res.status(400).json({err: e});
  }
});

module.exports = router;