2014-12-01 5 views
1

방문을 저장하려면 lib/collections/visits.jsvisitInsert 기능이 있습니다. 또한 로그인 한 사용자의 userId를 추가하지만 현재 방문은 올바르게 저장되지만 mongo 데이터베이스를 보면 userId을 저장하지 않았습니다. 다음은 visitInsert 함수입니다.userID가 저장되지 않습니다.

Meteor.methods({ 
    visitInsert: function(visitAttributes) { 
    check(Meteor.userId(), String); 
    check(visitAttributes, { 
     visit_date: String, 
     name: String 
    }); 

    var properties = { 
     userId: this.userId 
    }; 

    var visit = _.extend(visitAttributes, properties); 
    var visitId = Visits.insert(visit); 
    return { 
     _id: visitId 
    }; 
    } 
}); 

그래서 무엇이 잘못 되었나요?

업데이트 :

console.log(visit); 
console.log(visit.userId); 
var visitId = Visits.insert(visit); 

모두 visitvisit.userId이 현재의 ID와 함께 있도록, 올바른 값으로 채워진다 : lib/collections/visits.js에서

나는 값이 무엇인지 볼 수있는 몇 가지 CONSOLE.LOG을 추가했습니다 로그인 한 사용자. 그러나 Visits.insert으로 데이터베이스에 저장하면 방문이 저장되지만 userId ??? 이 방법에서 호출 때문에이 문제가 allow 콜백 무관했다 :

추가 visits.js에서 allow 콜백 :

Visits.allow({ 
    insert: function (userId, visit) { return !! userId; }, 
    update: function(userId, visit) { return ownsDocument(userId, visit); }, 
    remove: function(userId, visit) { return ownsDocument(userId, visit); } 
}); 

솔루션

2 업데이트되었습니다. 나는 aldeed:collection2 패키지를 사용하고 있기 때문에 모든 속성을 명시 적으로 검사해야한다는 것을 알았습니다. 양식에서 오는 것뿐만 아니라 삽입 방법에 추가하는 것도 있습니다.

var properties = { 
    userId: Meteor.userId() 
} 

함수가 이상한 것 같다 수 : 키스 니콜라스 사용 말했듯이

+0

삽입은 실제로 정의되지 않은 값을 반환합니다. 내가 아는 한. – MurWade

+0

아니요, –

+0

http : //docs.meteor ID를 반환합니다.co.kr/#/basic/Mongo-Collection-insert first line :) –

답변

-1

var properties = { 
    userId: Meteor.userId() 
} 
+0

아니요, 방문은 데이터베이스에 있지만''userId' '가 없으면''userId : Meteor.userId()''로 변경됩니다. – John

0

사용해보십시오. 다음과 같이 설정합니다.

// check if user is owner of object 
ownsObject = function (userId, obj) { 
    return obj && obj.userId === userId; 
}; 

Visits.allow({ 
    insert: ownsObject, 
    update: ownsObject, 
    remove: ownsObject 
}); 

또한 사용중인 항목이 명확하지 않습니다. 정의한 visitInsert 메서드를 사용하고 있습니까? 그렇다면 클라이언트에서 Meteor.call ('visitInsert', function() {})을 호출하는 경우 허용을 정의하지 않아도됩니다. Meteor.userId()가 서버 측에 없기 때문에 Meteor.userId()를 매개 변수로 전달해야합니다.

요약하면, "visitAttributes"클라이언트 측을 Meteor.userId()로 빌드하는 것이 좋습니다. 그리고 속성과 Visits.insert (visitAttributes) 만 검사하는 서버 측 메서드를 호출하면됩니다.

더 나은 :

클라이언트 측 :

var visit = { 
    visit_date: getYourDate, 
    name: getYourName, 
    userId: Meteor.userId() 
} 

Meteor.call("visitInsert", visit, function(err, res){ 
    if(!err){ 
    Console.log("Visit inserted!"); 
    } 
}); 

서버 측 :

Meteor.methods({ 
    visitInsert: function(visit) { 
    check(visit.userId, String); 
    check(visit, { 
     visit_date: String, 
     name: String 
    }); 

    return Visits.insert(visit); 
    } 
}); 

건배,

삽입하고 통화를 할 객체 "방문"을 만들
+0

고마워, 오늘 밤 이걸 시험해보고 너에게 돌아올거야 – John

+0

내 문제를 찾았습니다. – John

관련 문제