【问题标题】:Meteor.call won't work after buildMeteor.call 在构建后将不起作用
【发布时间】: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


    【解决方案1】:

    我昨晚解决了。 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;
        }
      }
    });
    

    【讨论】:

      猜你喜欢
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      • 2014-05-15
      • 2018-02-07
      • 2015-09-15
      • 1970-01-01
      相关资源
      最近更新 更多