Ahm*_*san 4 mongoose mongodb node.js
我想使该集合中的唯一电子邮件变得唯一,但是我无法正常工作,这是我的服务器代码。
// Create a schema
var userSchema = new mongoose.Schema({
email: { type: String, required: true},
password: String
});
var userModel = mongoose.model("user", userSchema);
router.post('/postuser', (req, res) => {
console.log('Requested data to server: ' + JSON.stringify(req.body._user));
var user = new userModel({
email: req.body._user.email,
password: req.body._user.password
});
// user.isNew = false;
user.save((err, data) => {
console.log('Analyzing Data...');
if(data) {
console.log('Your data has been successfully saved.');
res.json(data);
}
else {
console.log('Something went wrong while saving data.');
console.log(err);
res.send(err);
}
})
});
Run Code Online (Sandbox Code Playgroud)
注意:我也尝试了,email: { type: String, required: true, unique: true}但是它不起作用,并显示以下错误。
名称:“ MongoError”,
消息:'E11000重复键错误集合:hutreservationsystem.users
索引:_Email_1 dup键:{:null}',
司机:对,
代码:11000,
索引:0,
errmsg:'E11000重复密钥错误集合:hutreservationsystem.users索引:_Email_1重复密钥:{:null}',
getOperation:[功能],
toJSON:[功能],
toString:[功能]}
var userSchema = new mongoose.Schema({
password: String,
email: {
type: String,
lowercase: true,
required: true,
validate: {
isAsync: true,
validator: function(value, isValid) {
const self = this;
return self.constructor.findOne({ email: value })
.exec(function(err, user){
if(err){
throw err;
}
else if(user) {
if(self.id === user.id) { // if finding and saving then it's valid even for existing email
return isValid(true);
}
return isValid(false);
}
else{
return isValid(true);
}
})
},
message: 'The email address is already taken!'
},
}
});
Run Code Online (Sandbox Code Playgroud)
您可能希望将验证器代码更改为es6。
使用此工具的简短回答 mongoose-unique-validator
npm install --save mongoose-unique-validator
Run Code Online (Sandbox Code Playgroud)
在你的模型中
var mongoose = require('mongoose')
var uniqueValidator = require('mongoose-unique-validator')
var userSchema = new mongoose.Schema({
email: { type: String, required: true, unique: true},
password: String
});
userSchema.plugin(uniqueValidator)
var userModel = mongoose.model("user", userSchema);
Run Code Online (Sandbox Code Playgroud)
就是这样!(注意唯一:真实)
现在,您的收藏中没有电子邮件重复。
奖金!: 你可以访问错误
.catch(err => console.log(err))
Run Code Online (Sandbox Code Playgroud)
所以在你的例子中
// user.isNew = false;
user.save((err, data) => {
console.log('Analyzing Data...');
if(data) {
console.log('Your data has been successfully saved.');
res.json(data);
}
else {
console.log('Something went wrong while saving data.');
console.log(err);
res.send(err);
}
Run Code Online (Sandbox Code Playgroud)
访问 err >> 所以你可以 res.send(err.message) >> 'Validation failed'
{
message: 'Validation failed',
name: 'ValidationError',
errors: {
email: {
message: 'Error, expected `email` to be unique. Value: `example@gmail.com`',
name: 'ValidatorError',
kind: 'unique',
path: 'email',
value: 'example@gmail.com'
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7207 次 |
| 最近记录: |