我正在构建这个竞标应用程序,这个特定应用程序的猫鼬模式看起来像这样
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!');
}
});
});