【问题标题】:Validation Error in mongoDB while making a reference to another Schema?引用另一个模式时mongoDB中的验证错误?
【发布时间】:2022-01-03 07:26:45
【问题描述】:

我在 mongo 中创建了一个博客模式,它引用了用户模式。 但是,当我尝试在 MongoDB 中保存博客时,出现以下错误:-

CUrrrent post user:  new ObjectId("61d28db34c78f60375189033")
User validation failed: passwordHash: Path `passwordHash` is required., name: Path `name` is required., username: Path `username` is required.

我通过 JSON 发送这个

{
        "title": "Best Copywriting formulas!",
        "author": "Copywriters Inc.",
        "url": "https://buffer.com/resources/copywriting-formulas/",
        "likes": 420
    }

当我没有向用户架构添加任何新内容时,我无法解释为什么会出现此验证错误。

这是我的主要路由器代码:-

blogRouter.post('/', async (request, response) => {
    const blog = new Blog(request.body)

    if (blog.author === undefined || blog.title === undefined)
        return response.status(400).json({
            error: "name or title missing!"
        })

    //temporary get the first user from the Users db
    const userDB = await User.find({});
    //Get the first available user in db
    const currentUser = userDB[0]._id;

    console.log('CUrrrent post user: ', currentUser);

    const newBlog = new User({
        title: request.body.title,
        author: request.body.author,
        url: request.body.url,
        likes: request.body.likes || 0,
        user: currentUser
    })

    try {
        const newEntry = await newBlog.save()
        response.status(200).json(newEntry);
    } catch (error) {
        logger.error(error.message);
    }
})

我的博客架构:-

const blogSchema = new mongoose.Schema({
  title: String,
  author: String,
  url: String,
  likes: {
    type: Number,
    default: 0
  },
  user: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User'
  }
})

blogSchema.set('toJSON', {
  transform: (document, returnedObject) => {
    returnedObject.id = returnedObject._id.toString()
    delete returnedObject._id
    delete returnedObject.__v
  }
})

module.exports = mongoose.model('Blog', blogSchema)

这是我的用户架构:-

var uniqueValidator = require('mongoose-unique-validator');

const userSchema = new mongoose.Schema({
    username: {
        type: String,
        required: true,
        minLength: 3,
        unique: true
    },
    name: {
        type: String,
        required: true
    },
    passwordHash: {
        type: String,
        required: true
    }
})

userSchema.plugin(uniqueValidator, {message: 'username already taken. {VALUE} not available.'});

userSchema.set('toJSON', {
    transform: (document, returnedObject) => {
        returnedObject.id = returnedObject._id.toString()
        delete returnedObject._id
        delete returnedObject.__v
        delete returnedObject.passwordHash
    }
})

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

【问题讨论】:

    标签: javascript node.js mongodb mongoose mongoose-schema


    【解决方案1】:

    您应该在创建新的Blog 文档时更改您的模型名称:

      const newBlog = new Blog({
        title: request.body.title,
        author: request.body.author,
        url: request.body.url,
        likes: request.body.likes || 0,
        user: currentUser,
      });
    

    此外,一个好的做法是在检索第一个用户之前检查数据库中是否有任何用户。 这是为了避免可能的索引越界异常:

    const userDB = await User.find({});
    if (userDB.length > 0) {
        const currentUser = userDB[0]._id;
        ...
    

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 2020-12-20
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      • 2015-08-28
      • 1970-01-01
      相关资源
      最近更新 更多