嘿家伙我有一个问题,如何在将编辑或发布的(发布或放置操作)数据保存在猫鼬中之前进行验证!如何检查数据在数据库中是否已经存在保存
例如,如果操作已经存在于数据库中,用户将收到某种错误。我尝试这一点,但不工作: 1-NOT WORK
var mongoose = require("mongoose"),
Schema = mongoose.Schema;
var actionSchema = new Schema({
action: {
type: String,
required: true,
},
});
var data = mongoose.model('Action', actionSchema);
actionSchema.pre('save', function (next) { // Middlware to verify if action already existe
var self = this;
data.find({
action: self.action
}, function (err, actions) {
if (!actions.length) {
next();
} else {
console.log('action exists: ', self.name);
next(new Error("Action exists!"));
}
});
});
module.exports = mongoose.model('Action', actionSchema);
2 ---不做事其次METHODE:---------------------- --------------
var data = mongoose.model('Action', actionSchema);
actionSchema.pre('save', function (next) {
data.count({
action: this.action
}, function (err, count) {
if (count == 1) {
console.log('action exists: ', this.action);
next(new Error("Action exists!"));
//already exists
} else {
next();
//do the action
}
});
});
3- WORKING另类 - NODE JS控制器----我发现这招(工作好)那就是做前检查更新(支票) 但是我想知道在我的模型MONGOOSE中保存之前是否有可能做到这一点?
// router.put('/actions/:action_id');
Action.findById(req.params.action_id, function (err, upaction) {
if (err) { //no action id in database match with params.action_id
res.send(err);
} else { // find == true
// chek if action name existe
Action.findOne({
'action': req.body.action
})
.exec(function (err, found_action) {
if (err) { // ereur bizare sest produite
next(err);
}
if (found_action) { // name action exist
res.send('name action existe');
}
else { // name action no exist
upaction.action = req.body.action;
upaction.save(function (err, acti) {
if (err) {
res.send('error on save');
}
res.send(upaction); // send a document
});
}
});
}
});
我不明白你为什么要做这么多的操作来做一个单一的操作。如果你想在你的行动领域独特的价值比你可以使用“行动:{0128} },“ 比你不能添加或更新已存在的值在动作字段比猫鼬自动抛出错误。 –
我用这个,但每次POST都添加文档。 例如:操作1:“堆栈” 操作2“堆栈” .... –
我没有同时使用所有这些操作。 –