gpt4 book ai didi

node.js - Mongoose 在更新前检查用户是否拥有文档

转载 作者:行者123 更新时间:2023-12-05 06:24:46 25 4
gpt4 key购买 nike

我试图在更新删除文档之前检查用户是否拥有该文档,并希望尽可能保持干燥。理想情况下,我不会必须对数据库进行两次调用,我首先会在findById().then(doc => {check if user owns document and然后 -> doc.findByIdAndUpdate() }) 而是将其保留为对数据库的一次调用。

我经常不得不对快速路由 执行此检查,并考虑在 mongoose .pre('update') 中间件上实现这一层逻辑。但我不知道如何将传入的 useridreq 对象 传递到我的中间件验证函数?

有没有更好的层来实现这个检查功能?还是每次我想检查用户是否拥有文档并在每条快速 route 写出来时,我都必须向数据库发出两个请求?

我目前的实现是:

const addDocToDoc = (req, res, next) => {
let doc1id = req.params.id;
let doc2id = req.params.doc2id;
Doc1.findById(doc1id)
.then(doc1 => {
if(userCanAlter(doc1, req.user, res)) {
doc1.doc2s.push(doc2id)
return doc1.save().then(updatedDoc1 => res.send(updatedDoc1))
}
}).catch(next)
}

userCanAlter() 看起来像这样:

function userCanAlter(instance, user, res) {
if (!instance) { res.status(404).send("Document does not exist."); return false}
if (instance.user != user) { res.status(401).send("User unauthorized"); return false}
else return true;
}

显然,这是一个非常简单的更新,但更复杂的更新需要在保存前进行更多配置。

最佳答案

当前的实现被认为是最好的和 DRY'est 实现。

关于node.js - Mongoose 在更新前检查用户是否拥有文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57532182/

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