我正在尝试向DB请求包含过滤器的项目:
{
paid : true,
'budget.credits': {$gt : 0},
retrieveView : { $ne : userId }
}
并更新该项目以包含用户的ID,有点像“查看”功能,以便他不会再次看到相同的项目:
{
$inc : { "retrieveCount" : 1 } ,
$addToSet: { retrieveView: userId }
}
这是接收http.Get调用
的服务器端功能的示例export function findOnePaidItem(req, res) {
var userId = req.params.userId;
return Item.findOneAndUpdate({
paid : true,
'budget.credits': {$gt : 0},
retrieveView : { $ne : userId }
},{
$inc : { "retrieveCount" : 1 } ,
$addToSet: { retrieveView: userId }
},{
maxTimeMS : 1000
})
.then(responseWithResult(res))
.catch(handleError(res));
}
当有结果返回时,此方法正常工作,但是当不再存在且适合过滤器的Item时,查询永远不会返回任何内容并继续加载,就像等待响应一样。
我尝试使用maxTimeMS选项,希望在过去一段时间后获得回报,但无济于事。
现在已经被这个问题搞砸了,任何在MongoDB中都知道这个特定问题的大师......?
export function findOnePaidItem(req, res) {
var userId = req.params.userId;
return Item.findOneAndUpdate({
paid : true,
'budget.credits': {$gt : 0},
retrieveView : { $ne : userId }
},{
$inc : { "retrieveCount" : 1 },
$addToSet: { retrieveView: userId }
},{
maxTimeMS : 100
}).exec(function(err, res) {
console.log(err); // null
console.log(res); // null
return res;
})
.then(responseWithResult(res))
.catch(handleError(res));
}
两个变量在exec注释中都返回null,完全混淆>。<哈哈
export function findOnePaidItem(req, res) {
var userId = req.params.userId;
return Item.findOneAndUpdate({
paid : true,
'budget.credits': {$gt : 0},
retrieveView : { $ne : userId }
},{
$inc : { "retrieveCount" : 1 },
$addToSet: { retrieveView: userId }
},{
maxTimeMS : 100
}).exec(function(err, result) {
console.log(err); // null
console.log(result); // returns Item from DB *Thank you Stuart Bourhill
if(!result) {
res.status(401).send("empty file");
} else {
res.status(200).json(result);
}
return;
});
}
感谢 Stuart Bourhill 提供的宝贵建议,当然在编码时,我倾向于忽略重复的参数名称,尤其是使用Angular JS模块化引用时。在更新#1 的情况下,我复制了 res 参数。
在Jain的帮助下成功修复了API调用,Stuart& Johnny的建议,我在使用Angular的 $ http.get 函数调用时遇到了错误。
当结果为空时似乎发生此错误,当存在结果时,返回调用成功结束。
执行代码片段(客户端):
Auth.getCurrentUser(function(user) {
console.log(user._id);
if(user._id) {
console.log("sending");
return $http.get('/api/items/paid/' + user._id).then(function(data) {
paidItemPageDetails = data;
console.log(data);
return data;
}).catch(function(err) {
console.log(err);
return err;
});
} else {
return {data:null};
}
});
非常感谢你们让我到目前为止,我非常满意并且< 3来到Stackoverflow大师:)
https://github.com/angular-fullstack/generator-angular-fullstack/issues/1556
诀窍是不要将console.log作为一个对象,而不是console.log一个字符串对象,可以写成console.log(JSON.stringify(result));
干杯,让我知道这对你有帮助吗