私の知っている流星のアプリには非常に奇妙な問題があります。私は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
これらの変数を正しく表示することができるので、フォームからデータを正しく取得することもできます。私は本当になぜこれが私のローカルでは完璧に動作するのか分かりませんが、サーバ上ではまったく動作しません。