【发布时间】:2016-04-05 05:55:51
【问题描述】:
我的流星应用程序有一个非常奇怪的问题,我无法弄清楚。我正在使用 Meteor v1.3 和 NodeJS v0.10.42。我只是想获取 HTML 表单的文本并通过电子邮件发送数据。当使用meteor 命令在我的本地计算机上运行时,它可以完美运行,但是当我执行meteor build 并将其部署到我的服务器时,它就不再起作用了。我已将 console.logs 留在我的代码中,以便向您展示它在哪里中断。
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@test.com',
from: 'anotheremail@test.com',
subject: 'Form Submission',
text: text
});
}
当我提交表单并将字段留空时,它将记录所有console.log 消息。但是如果我提交表单的所有部分,它只会记录“点击提交按钮”。我知道IF 语句有效,因为它在网页中正确发出警报。我也知道服务器方法工作得很好,因为我可以从其他任何地方调用它。如果我在客户端代码的else 中调用它,它也可以工作。它还从表单中正确捕获数据,因为我可以console.log 这些变量并且它们正确显示。我真的很困惑为什么这在我的本地工作完美,但在服务器上根本不起作用。
【问题讨论】:
标签: javascript node.js forms meteor build