Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript meteorjs用户权限未与服务器同步_Javascript_Mongodb_Meteor_Client Side_Server Side - Fatal编程技术网

Javascript meteorjs用户权限未与服务器同步

Javascript meteorjs用户权限未与服务器同步,javascript,mongodb,meteor,client-side,server-side,Javascript,Mongodb,Meteor,Client Side,Server Side,我是meteorjs和MongoDB的新手。 我在Win 7上运行meteor,我遵循isaac strack的“meteor.js JavaScript框架入门”,我停留在第6章“授予管理员权限” 我在遵循他的代码,但似乎在管理员登录时,我在列表中添加了一个项目,该项目显示为一个分离的部分,可能是因为本地缓存和服务器同步 但我做错了什么? 我的代码: 客户端: Meteor.subscribe('Categories'); Meteor.autosubscribe(function() {

我是meteorjs和MongoDB的新手。 我在Win 7上运行meteor,我遵循isaac strack的“meteor.js JavaScript框架入门”,我停留在第6章“授予管理员权限” 我在遵循他的代码,但似乎在管理员登录时,我在列表中添加了一个项目,该项目显示为一个分离的部分,可能是因为本地缓存和服务器同步 但我做错了什么? 我的代码: 客户端:

Meteor.subscribe('Categories');

Meteor.autosubscribe(function() {
    Meteor.subscribe("listdetails",
        Session.get('current_list'));
});

Template.categories.lists = function () {
    return lists.find({},{sort: {Category: 1}});
};

Session.set('adding_category', false);

Template.categories.new_cat = function () {
    return Session.equals('adding_category',true);
};
Template.categories.events({

    'click #btnNewCat': function (e, t) {

        Session.set('adding_category', true);

        Meteor.flush();
        focusText(t.find("#add-category"));
    },

    'keyup #add-category': function (e,t){
        if (e.which === 13)
        {
            var catVal = String(e.target.value || "");
            if (catVal)
            {
                lists.insert({Category:catVal,owner:this.userId});
                Session.set('adding_category', false);
            }
        }
    },
    'focusout #add-category': function(e,t){

        Session.set('adding_category',false);

    },
    'click .category': selectCategory
});

/////Generic Helper Functions/////

//this function puts our cursor where it needs to be.
function focusText(i,val) {
    i.focus();
    i.value = val ? val : "";
    i.select();

};//< -----This is the end tag for focusText() -----

function selectCategory(e,t){
    Session.set('current_list',this._id);
}

function addItem(list_id,item_name){
    if (!item_name&&!list_id)
        return;
    lists.update({_id:list_id},
        {$addToSet:{items:{Name:item_name}}});
}

function removeItem(list_id,item_name){
    if (!item_name&&!list_id)
        return;
    lists.update({_id:list_id},
        {$pull:{items:{Name:item_name}}});
}

function updateLendee(list_id,item_name,lendee_name){
    var l = lists.findOne({"_id":list_id ,
        "items.Name":item_name});
    if (l&&l.items)
    {
        for (var i = 0; i<l.items.length; i++)
        {
            if (l.items[i].Name === item_name)
            {
                l.items[i].LentTo = lendee_name;
            }
        }
        lists.update({"_id":list_id},{$set:{"items":l.items}});
    }
};

Template.list.items = function () {
    if (Session.equals('current_list',null)) return null;
    else
    {
        var cats = lists.findOne({_id:Session.get('current_list')});
        if (cats&&cats.items)
        {
            for(var i = 0; i<cats.items.length;i++) {
                var d = cats.items[i]; d.Lendee = d.LentTo ? d.LentTo :
                    "free"; d.LendClass = d.LentTo ?
                    "label-important" : "label-success";
            }
            return cats.items;
        }
    }
};// < ---- ending bracket for Template.list.items function ----

Template.list.list_selected = function() {
    return ((Session.get('current_list')!=null) &&
        (!Session.equals('current_list',null)));
};
Template.categories.list_status = function(){
    if (Session.equals('current_list',this._id))
        return "";
    else
        return " btn-inverse";
};
Template.list.list_adding = function(){
    return (Session.equals('list_adding',true));
};
Template.list.lendee_editing = function(){
    return (Session.equals('lendee_input',this.Name));
};

Template.list.events({
    'click #btnAddItem': function (e,t){
        Session.set('list_adding',true);
        Meteor.flush();
        focusText(t.find("#item_to_add"));
    },
    'keyup #item_to_add': function (e,t){
        if (e.which === 13)
        {
            addItem(Session.get('current_list'),e.target.value);
            Session.set('list_adding',false);
        }
    },
    'focusout #item_to_add': function(e,t){
        Session.set('list_adding',false);
    },
    'click .delete_item': function(e,t){
        removeItem(Session.get('current_list'),e.target.id);
    },
    'click .lendee' : function(e,t){
        Session.set('lendee_input',this.Name);
        Meteor.flush();
        focusText(t.find("#edit_lendee"),this.LentTo);
    },
    'keyup #edit_lendee': function (e,t){
        if (e.which === 13)
        {
            updateLendee(Session.get('current_list'),this.Name,
                e.target.value);
            Session.set('lendee_input',null);
        }
        if (e.which === 27)
        {
            Session.set('lendee_input',null);
        }
    }
});

Accounts.ui.config({
    passwordSignupFields: 'USERNAME_AND_OPTIONAL_EMAIL'
});
两者:

html:


伦德利卜
{{loginButtons align=“right”}
{{>类别}
{{>列表}
我的东西
{{{如果是新猫}
{{else}
&加;
{{/if}
{{{#每个列表}
{{Category}}
{{/每个}}
    {{{#每项}
  • × {{Name}} {{{#如果lendee_编辑} {{else} {{Lendee}} {{/if}
  • {{/每个}} {{{#如果选择了列表}
  • &plus; {{{if list_adding} {{/if}
  • {{/if}

经过多次调试尝试并失败后,我修复了问题,问题出在服务器端这是原始代码:

Meteor.startup(function () {
    Meteor.publish("Categories", function() {
        return lists.find({owner:this.userId},{fields:{Category:1}});
    });
    Meteor.publish("listdetails", function(category_id){
        return lists.find({_id:category_id});
    });
});
这是固定代码:

Meteor.startup(function () {
    Meteor.publish("Categories", function() {
        return lists.find({owner:Meteor.userId},{fields:{Category:1}});
    });
    Meteor.publish("listdetails", function(category_id){
        return lists.find({_id:category_id});
    });
});

注意:更改是在第3行完成的,而不是所有者:this.userId-存在的内容我将其替换为Meteor.userId

在进行了大量调试尝试并失败后,我修复了问题,问题出现在服务器端这是原始代码:

Meteor.startup(function () {
    Meteor.publish("Categories", function() {
        return lists.find({owner:this.userId},{fields:{Category:1}});
    });
    Meteor.publish("listdetails", function(category_id){
        return lists.find({_id:category_id});
    });
});
这是固定代码:

Meteor.startup(function () {
    Meteor.publish("Categories", function() {
        return lists.find({owner:Meteor.userId},{fields:{Category:1}});
    });
    Meteor.publish("listdetails", function(category_id){
        return lists.find({_id:category_id});
    });
});

注意:更改是在第3行完成的,而不是所有者:this.userId-我将其替换为Meteor.userId

Meteor.userId
是一个函数,您确定不应该改为使用
Meteor.userId()
?但是这应该相当于
这个.userId
::我不知道为什么使用这个.userId时它不工作可能是个bug?我真的不知道,这个配偶相当于Meteor global obj,但它不是:我真的被卡住了,因为我试图在用户列表之间进行分类,目前它不起作用,它们相互影响,没有分类
Meteor。userId
是一个函数,确定你不应该改为使用
Meteor.userId()
?但是这应该相当于
这个.userId
::我不知道为什么使用这个.userId时它不工作可能是个bug?我真的不知道,这个配偶相当于流星全球obj,但它不是:我真的卡住了,因为我试图在用户列表之间建立一个速度,目前它不起作用,它们相互影响,没有速度
Meteor.startup(function () {
    Meteor.publish("Categories", function() {
        return lists.find({owner:Meteor.userId},{fields:{Category:1}});
    });
    Meteor.publish("listdetails", function(category_id){
        return lists.find({_id:category_id});
    });
});