如何设置猫鼬模式,使其只能被修改一次?



我正在构建这个竞标应用程序,这个特定应用程序的猫鼬模式看起来像这样

const bidSchema = new mongoose.Schema({

name: String,
price : Number,
description: String,
location: String,
specilization: String,
image: String,
highestBidder: {
highBidderName: String,
highPrice: Number,
},
previousBidders: [{previousName: String , previousPrice: Number}],
isClosed: {
type: Boolean,
}

})

在上面的模式中,isClosed的值将保持为none,如果有人关闭了竞标,我将为该isClosed变量设置一个真值并执行相应的操作。这里的问题在于它的安全部分,就像任何人都可以在表单的编辑字段中发送一个put请求,使用像postman这样的东西,值为

isClosed : false

,它正在被更新。我能做些什么,让用户只能设置它的假值,一旦它被设置,没有人应该能够修改它?

有两种方法——

  • 最常用-你可以做一个findOne({YOUR_UNIQUE_KEY: SOME_VALUE}),在你的代码中添加一个条件如果isClosed: true-抛出错误否则执行操作
  • 既然你正在构建一个投标应用程序,你应该期待高并发。你可以试试这个db.insertIfNotExistsDemo,你可以在这里查看- https://www.tutorialspoint.com/insert-records-in-mongodb-collection-if-it-does-not-exist

一个可能的解决方案是:从数据库中检索您的出价,检查isCloses == true的值是否更新。

Bid.findOne({ name }, function (err, bid) {
if(bid.isClosed) {
console.error('Bid is closed')
};
bid.save(function (err) {
if(err) {
console.error('ERROR!');
}
});
});

最新更新