我遇到以下代码的问题我正在删除用户并将用户列表更新到客户端,因此当我调用api删除用户时,需要一些时间来删除并且我更新的userList呈现的数据包括已删除的用户。如何正确执行删除?
controller.js
export function destroy(req, res) {
console.log(req.params.id);
UserAccess.findOne({
attuid: req.params.id
}, function(err, user) {
if (user) {
user.remove();
}
});
}
这将返回userLIst
export function index(req, res) {
UserAccess.findAsync()
.then(responseWithResult(res))
.catch(handleError(res));
}
index.js
router.get('/', controller.index);
router.delete('/:id', controller.destroy);
答案 0 :(得分:1)
使用回调函数调用remove(),然后调用usersList
export function destroy(req, res) {
console.log(req.params.id);
UserAccess.remove({attuid: req.params.id}, function(err,removed) {
if(!err && removed){
//call getUsersList function
}
});
}
答案 1 :(得分:0)
试试这个:
UserAccess.findOne({attuid: req.params.id}).remove().exec();
mongoose.model.findOne
会返回一个查询,其中包含remove function。
答案 2 :(得分:0)
您可以按照以下方式使用 findOneAndRemove()
方法:
export function destroy(req, res) {
console.log(req.params.id);
UserAccess.findOneAndRemove(
{ attuid: req.params.id },
function(err, user) {
console.log(user);
}
);
}
当前的实现需要一段时间,因为 remove()
方法是异步的,并且您还没有为该函数提供回调。
UserAccess.findOneAndRemove(conditions, callback) // executes
将在回传传递后立即执行,否则返回Query
对象。
如果您要删除的用户列表,则上述方法将不再有效,因为它只删除符合指定条件的单个文档。您需要 remove()
函数,其中条件使用$in
运算符来查询列表,如下例所示:
export function destroy(req, res) {
UserAccess.remove(
{ "attuid": { "$in": userList } },
function(err, result) {
console.log(result);
}
);
}