【发布时间】:2017-10-11 15:17:04
【问题描述】:
帮助!我的应用中发生了一些非常奇怪的事情。
我有一个 merchantReview 模板,应该显示审阅者的数量。
下面是模板的样子:
<template name="merchantReview">
<div> {{numberOfReviewers}} Total</div>
以及辅助代码是什么样子的:
Template.merchantReview.helpers({
'numberOfReviewers': function () {
var numberOfReviewers = 0;
var merchantProfileId = Session.get('offerUserId2');
console.log("The numberOfReviews _id session is: " + merchantProfileId );
merchantReviews.find({_id: merchantProfileId}).map(function (doc)
{
numberOfReviewers += doc.noOfReviewers;
});
return numberOfReviewers;
}
});
这在merchantReview 页面上完全没有任何结果。
让我们看看路由器:
Router.route('/merchantReview/:_id', {
template: 'merchantReview',
data: function(){
},
waitOn: function(){
return Meteor.subscribe('merchantReviews');
}
});
以及订阅的内容:
Meteor.publish('merchantReviews', function publishmerchantReviews(){
return merchantReviews.find();
});
现在是“非常奇怪的事情”部分。 当我在 chrome 浏览器控制台中运行以下代码(类似于帮助程序代码)时,我得到了不同的结果。
当我运行以下内容时:
var numberOfReviewers = 0;
var merchantProfileId = Session.get('offerUserId2');
console.log("The _id is: " + merchantProfileId );
merchantReviews.find({_id: merchantProfileId}).map(function (doc)
{
numberOfReviewers += doc.noOfReviewers;
});
console.log (numberOfReviewers);
...它产生:
The _id is: udEnfEmy5DSBvDsSy
0
如您所见,它绕过了merchantReviews.find 查询。
但是,稍微修改一下代码,然后运行:
var numberOfReviewers = 0;
var merchantProfileId = Session.get('offerUserId2');
console.log("The _id is: " + merchantProfileId );
merchantReviews.find({_id: "udEnfEmy5DSBvDsSy"}).map(function (doc)
{
numberOfReviewers += doc.noOfReviewers;
});
console.log (numberOfReviewers);
这次它产生了:
The _id is: udEnfEmy5DSBvDsSy
93
是不是很奇怪?
谁能解释为什么
merchantReviews.find({_id: merchantProfileId})... 查询不能识别包含udEnfEmy5DSBvDsSy 值的merchantProfileId 变量?我该如何解决这个问题?
【问题讨论】:
-
可以加
console.log('"' + merchantProfileId + '"')吗?最后可能有多余的空间。 -
@user3374348 我听从了您的建议,结果是:“udEnfEmy5DSBvDsSy”确认任何一端都没有多余的空间。
-
你在哪里设置
Sessionvar? -
您的实验并不表示绕过查询,它只是表示结果为0。还有其他原因可能导致这种情况。当您运行代码的第一个版本时,是否可能发布尚未准备好?如果您想更有效地调试事物,则需要更好地隔离事物。例如,将数据记录在尽可能靠近根的位置(查询结果而不是基于它完成的计算将更好地指示查询是如何执行的)。
-
如果没有弹出警报,很可能是您的 MerchantProfileId 在某处包含隐藏空格。请做两件事:第一件事
console.log(merchantProfileId.length, String("udEnfEmy5DSBvDsSy").length),第二件事如果你这样做merchantProfileId = merchantProfileId.replace(/\s+/g)会发生什么?
标签: meteor mongodb-query minimongo