mongoose - 如何仅验证特定字段?

时间:2016-05-06 13:35:17

标签: mongodb mongoose nodes mean-stack

我有以下猫鼬模型和路由文件。

  

user.js

var mongoose = require('mongoose'),
    Schema = mongoose.Schema,
    ObjectId = Schema.ObjectId,

    var userSchema = new Schema({
        nick_name: {
            type: String,
            unique: true
        },
        email: {
            type: String,
            unique: true
        },
        first_name: String,
        last_name: String,
        birth_date: {
             type: Date 
        },
        password: {
            type: String,
            select: true
        },
        user_type: {
            type: Number,
        },
        is_active: {
            type: Number,
            default: -1
        }
    }, { collection: 'user' });


/*
 *Validations
 */
userSchema.path('nick_name').required(true, 'nick name is required!');
userSchema.path('email').required(true, 'email is required!');
userSchema.path('password').required(true, 'password is required!');
userSchema.path('user_type').required(true, 'user type is required!');
userSchema.path('is_active').required(true, 'is active is required!');
userSchema.path('is_close').required(true, 'is close is required!');


userSchema.path('first_name').required(true, 'first name is required!');
userSchema.path('last_name').required(true, 'last name is required!');
userSchema.path('birth_date').required(true, 'birth date is required!');

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

router.js

var express = require('express');
var router = express.Router();
var User = require('../models/user');
router
    .route('/api/user/register')
    .post(
        function(req, res, next) {
            var user_ = new User(req.body);
            /*
             *here all validations are required
             */
            user_.validate(function(err) {
                    if (err) {
                        res.json({ "status": 0, "error": err });
                    } else {
                        user_.save(function(err) {
                            if (err) {
                                res.json({ "status": 0, "error": { "other": "Oops! something went wrong, please try again later." } });
                            } else {
                                res.json({ error: 1, message: 'User registered' });
                            }
                        });
                    }
                }
            });
    }
});

在上面的路由文件中,我可以使用validate()方法验证所有字段,但是,我需要验证以下条件

- >用户注册时,需要以下字段  NICK_NAME
 电子邮件
 密码
 USER_TYPE
 IS_ACTIVE
- >当用户编辑他的个人资料时(注册后),所有字段都是必填字段。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我只是在这种情况下发现自己,想要更新注释模型,并希望对“内容”字段进行特定的字段验证。

我正在考虑黑客行为,请从数据库中提取完整的注释文档,然后从注释文档中创建与我刚从数据库中提取的属性相同的新架构对象,并像验证我一样验证此文档模型副本创建一个新文档,但是我不会,我不会使用save()方法。如果“内容”字段有错误,这是我关心的唯一问题,我将在验证后知道,如果没有错误,那么我会忘记通过从注释文档中提取注释文档而创建的新对象架构副本。数据库,请忘记它,因为我已经知道我的“内容”字段是有效的,因为未显示任何错误,所以请继续进行我的流程。

也许不是从数据库中提取该文档,而是仅创建带有一些假的但有效字段的新对象...然后传递我要测试的真实值(在我的情况下为“内容”,我不会假)该值,因为我已经拥有它。

注意:我的评论模型具有属性'createdAt',所以我将其替换为当前日期,因为我在验证时可能会出错,说新评论必须来自当前日期,而不是过去日期,但是由于我不会保存该新日期添加到数据库中,我可以添加当前日期,回想起我会忘记该新对象,我不会将其保存到数据库中,我只关心“内容”字段验证,看看是否有任何错误。 / p>