2016-04-05 3 views
0

私の知っている流星のアプリには非常に奇妙な問題があります。私はMeteor v1.3とNodeJS v0.10.42を使用しています。私は単にHTMLフォームのテキストを取ってデータを電子メールで送信しようとしています。 meteorコマンドを使用してローカルマシン上で実行すると完全に動作しますが、私がmeteor buildを実行してそれを私のサーバーにデプロイすると、もう動作しません。私はあなたの壊れた場所を示すために私のコードにconsole.logsを残しました。Meteor.callはビルド後に動作しません

HTMLフォーム:

<form id="contactForm"> 
    Name: 
    <input type="text" id="name" placeholder="Name" autocorrect="off" autocapitalize="words"> 
    Email: 
    <input type="email" id="email" placeholder="Email"> 
    Message: 
    <textarea id="message"></textarea> 
    <input type="submit" value="Send"> 
</form> 

クライアントコード:

Template.contact.events({ 
    'submit form#contactForm':function(e){ 
     console.log("Submit Button Clicked"); 
     var name = e.target.name.value; 
     var email = e.target.email.value; 
     var message = e.target.message.value; 
     var namel = name.length; 
     var emaill = email.length; 
     var messagel = message.length; 

    if(namel > 0 && emaill > 0 && messagel > 0){ 
     var text = "Message from: " + name + " \rEmail: " + email + "\rContent:" + message; 
     Meteor.call('sendEmail', text); 
     console.log("Just called sendEmail method"); 
     alert('Message sent! Thank you', 'success'); 
    }else{ 
     console.log("Not all fields were filled out, and the form wasn't submitted."); 
     alert('An error occurred. Please make sure you have filled in all the fields.', 'error'); 
     return false; 
    } 
    } 
}); 

サーバコード:

'sendEmail': function (text) { 
    this.unblock(); 
    Email.send({ 
     to: '[email protected]', 
     from: '[email protected]', 
     subject: 'Form Submission', 
     text: text 
    }); 
    } 

私はフォームを送信し、フィールドを空白のままにすると、それはすべてのconsole.logを記録しますメッセージ。しかし、フォームのすべての部分を提出すれば、「Submit Button Clicked」だけが記録されます。 IFのステートメントは、ウェブページで適切に警告されるため、このステートメントは機能します。私はどこからでも呼び出すことができるので、サーバーメソッドはうまく動作することも知っています。また、クライアントコードのelseで呼び出すと動作します。私はconsole.logこれらの変数を正しく表示することができるので、フォームからデータを正しく取得することもできます。私は本当になぜこれが私のローカルでは完璧に動作するのか分かりませんが、サーバ上ではまったく動作しません。

答えて

0

私は昨夜それを解決しました。 HTMLフォームのデフォルトのアクションは、送信後にリフレッシュすることで、コードを破ることになります。なぜ私のローカルマシン上で動作し、私が展開したときではないのです。しかし、代わりに私はフォームのフィールドをクリアしました。ここで私はそれを働かせるためにしたものです。

クライアントコード:

Template.contact.events({ 
    'submit form#contactForm':function(e){ 
     console.log("Submit Button Clicked"); 
     var name = e.target.name.value; 
     var email = e.target.email.value; 
     var message = e.target.message.value; 
     var namel = name.length; 
     var emaill = email.length; 
     var messagel = message.length; 

    if(namel > 0 && emaill > 0 && messagel > 0){ 
     var text = "Message from: " + name + " \rEmail: " + email + "\rContent:" + message; 
     Meteor.call('sendEmail', text); 
     console.log("Just called sendEmail method"); 
     alert('Message sent! Thank you', 'success'); 
     e.currentTarget.reset(); 
     return false; 
    }else{ 
     console.log("Not all fields were filled out, and the form wasn't submitted."); 
     alert('An error occurred. Please make sure you have filled in all the fields.', 'error'); 
     return false; 
    } 
    } 
}); 
関連する問題