2013-12-17 5 views
3

등록 양식이 있습니다. 사용자가 제출 버튼을 클릭하면 모든 텍스트 상자의 값이 서버로 전송되어 해당 데이터를 삽입하고 true/false를 반환합니다.Meteor는 클라이언트에서 서버로 데이터를 전달합니다.

클라이언트 :

Template.cust_register.events({ 
    'click button': function(){ 
      var email = $('#tbxCustEmail').val(); 
      var msg = $('#tbxCustMsg').val(); 
      var isSuccess = insertMsg(email,msg); 
      if(isSuccess){ 
      alert("Success"); 
      }else alert("Try again"); 
    } 
}); 

서버 :

이 작동하지로 밝혀졌다
function insertMsg(email,msg){ 
    Messages.insert({Email:email,Message:msg}); 
    return true; 
} 

. 어떻게 해결할 수 있습니까? 많은 사람들이 "게시/구독 사용"이라고 말했지만 사용법을 이해하지 못합니다.

+1

게시/구독 모델을 실제로 연구해야합니다. 그것은 Meteor의 기본적인 아이디어입니다. Meteor를 사용한다는 것이 무엇을 의미하는지 이해하지 못한다면, 매우 거칠 것입니다. – JJJ

답변

4

먼저 introductory screencast을보고 문서의 Data and security 섹션을 읽으십시오.

과 같을 것이다 게시/구독 모델에 대한 여러분의 코드 :

공통을 :

Messages = new Meteor.Collection('messages'); 

클라이언트 :

Meteor.subscribe("messages"); 

Template.cust_register.events({ 
    'click button': function(){ 
      var email = $('#tbxCustEmail').val(); 
      var msg = $('#tbxCustMsg').val(); 
      Messages.insert({Email:email,Message:msg}); 
    } 
}); 

서버 :

Meteor.publish("messages", function() { 
    return Messages.find(); 
}); 
+0

Meteor에서 우리는 클라이언트 쪽에서 삽입을 할 수 있습니까? 와우는 위험하다. ( – yozawiratama

+1

초기 프로토 타이핑을 한 후,'meteor remove insecure'를 콜렉션에 대한 액세스 규칙을 정의해야한다. – rzymek

+2

@yozawiratama 서버에 삽입되기 전에 허용 규칙을 사용하여 허용 규칙을 확인하는 것은 위험하지 않다. 그것의 사용 권한을 가지고있는 것 같아요. – Akshat

4

다른 해결책은 클라이언트에서 Meteor.call('yourMethodName')을 사용하는 것입니다.

그런 다음 서버에, 당신은

Meteor.methods({ 
    yourMethodName: function() { /* validate input + return some data */ } 
}); 

당신은 반환 값에 세션 변수를 설정하는 것이 좋습니다 수 있습니다 할 수 있습니다.

Meteor.call('yourMethodName', function (err, data) { 
    if (!err) { 
     Session.set('myData', data); 
    } 
}); 

그리고 일부 일부 템플릿 ...

Template.whatever.helpers({ 
    messages: function() { 
     return Session.get('myData'); 
    } 
}); 

왜이 모든합니까?

1) You can explicitly deny all direct `insert/update/find` queries from the client, and force usage of pre-defined Meteor methods. 

2) You can manually determine when certain data is "refreshed". 

물론,이 방법은 구독/출판 모델의 가치를 훼손하고, 단지 실시간 데이터가 필요하지 않은 경우에 사용한다.

관련 문제