gpt4 book ai didi

mongodb - Mongoose - 如何仅验证特定字段?

转载 作者:行者123 更新时间:2023-12-05 07:49:40 24 4
gpt4 key购买 nike

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

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() 方法验证所有字段,但是,我需要按照以下条件进行验证

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

谁能帮我解决这个问题?

最佳答案

我刚发现自己处于这种情况,想要更新评论模型并想要对字段“内容”进行特定字段验证。

我正在考虑一个 hack,从数据库中提取完整的评论文档,然后从我刚刚从数据库中提取的评论文档中创建一个具有相同属性的新模式对象,并验证此文档模型副本,就好像我要创建一个新文档,但我不会,我不会使用 save() 方法。如果“内容”字段有错误,这是我唯一关心的,我会在验证后知道,如果没有错误,那么我会忘记我通过从中提取注释文档创建的新对象模式副本数据库,我忘了它,因为我已经知道我的“内容”字段是有效的,因为没有显示错误,所以我继续我的流程。

也许我可以创建一个包含一些虚假但有效字段的新对象,而不是从数据库中提取该文档...然后传递我想要测试的真实值,在我的情况下是“内容”,我不会伪造这个值,因为我已经拥有了。

注意:我的评论模型有属性“createdAt”,所以我会用当前日期替换它,因为我在验证时可能会出错,说新评论必须来自当前日期,而不是来自过去的日期,但因为我不会保存那个新日期到数据库我可以添加当前日期,记得我会忘记那个新对象,我不会将它保存到数据库,我只关心“内容”字段验证并查看是否有任何错误。

关于mongodb - Mongoose - 如何仅验证特定字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37073809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com