Сбой функции Parse.cloud.run в граничном браузере (пытается перенаправить страницу) - PullRequest
0 голосов
/ 30 августа 2018

Страница представляет собой небольшой опрос (12 вопросов), выполненный с помощью Angular 2+, и окончательную форму с именем - ввод электронной почты, кнопка проверки и кнопка для отправки результатов. Кнопка вызывает функцию Parse.cloud.run, которая создает PDF и возвращает его в base64, затем мы сохраняем данные и отправляем электронное письмо с другой функцией parse.cloud. Ну, эта страница отлично работает в Chrome и Firefox. В Microsoft Edge это никогда не работает. В Safari работает практически каждый раз (только в одном imac у нас та же проблема, что и в Edge).

Проблема в том, что при вызове этой функции Parse.cloud браузер пытается перенаправить вас на URL-адрес с входными данными в качестве параметров (пример: url+inputNameN=dsfdsf&inputEmailN=pepe@pepe.es&inputCheckN=on) и завершается. в ошибке 404 Not Found (очевидно, страница не существует).

После нескольких исследований я ничего не нашел в этом отношении. Я не понимаю это поведение и причины его возникновения.

Это сокращенный код, когда он попадает в строку "Parse.Cloud.run ('create-pdf', formData)", когда происходит ошибка.

onSend(): void {    
if (!this.inputName  || this.inputName.length==0) {
  //code
} 
if (!this.inputEmail || this.inputEmail.length==0) {
  //code
} 
if (!this.inputCheck) {
  //code
} 

var email = this.inputEmail.toLowerCase();
var emailRegEx1 = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/i;
var emailRegEx2 = /^.+@.+\.[a-z]{2,4}$/i;
var validEmail=emailRegEx1.test(email) && emailRegEx2.test(email);

if (!validEmail) {
  //code 
}

var formData = {
  "text1" : this.temporalTitle, 
  "text2" : this.temporalBody, 
  "text3" : this.interlude, 
  "firstAnswer" : this.firstAnswer, 
  "secondAnswer" : this.secondAnswer, 
  "thirdAnswer" : this.thirdAnswer, 
  "fourthAnswer" : this.fourthAnswer, 
  "fifthAnswer" : this.fifthAnswer, 
  "sixthAnswer" : this.sixthAnswer, 
  "seventhAnswer" : this.seventhAnswer, 
  "eigthAnswer" : this.eigthAnswer, 
  "ninthAnswer" : this.ninthAnswer, 
  "tenthAnswer" : this.tenthAnswer,            
  "higth": this.resultado,
  "left": this.leftResult,
  "rigth": this.rightResult,
  "on": 1
}
Parse.Cloud.run('create-pdf', formData)
.then((data)=> {
  if (!data.error) { 
    var base64data = {
      base64: data.message.base64
    };
    var d = new Date();
    var name = "_resultado_cuestionario" + d.getTime() + ".pdf";
    var parseFile = new Parse.File(name, base64data);
    parseFile.save().then((p)=> {
 let result = Parse.Object.extend("Results");
 let myResult = new result();
 myResult.set("answer1",this.answer1);
 myResult.set("answer2",this.answer2);
 myResult.set("answer3",this.answer3);
 myResult.set("answer4",this.answer4);
 myResult.set("answer5",this.answer5);
 myResult.set("answer6",this.answer6);
 myResult.set("answer7",this.answer7);
 myResult.set("answer8",this.answer8);
 myResult.set("answer9",this.answer9);
 myResult.set("answer10",this.answer10);
 myResult.set("answer11",this.answer11);
 myResult.set("answer12",this.answer12);
 myResult.set("sum",this.resultado);
 myResult.set("email",this.inputEmail);
 myResult.set("name",this.inputName);
 myResult.set("pdf",parseFile);    
 myResult.save()
.then((ok)=>{      
  var formData = {

      "mail": this.inputEmail,
      "subject": "Envío de informe RMG (en pruebas)",
      "message": this.informe,
      "urlFile": ok.attributes.pdf._url
  }
Parse.Cloud.run('send-mail', formData)
.then((data)=> {
  if (data.success) {  
    //code
  }
  else {
    //code
  }
  });
})
.catch((error)=>{
  console.log(error);
})            
    }, function(error) {
        console.log('error en la imagen 2' + error)
    });   

  }
  else {
    //swal("Error!!", data.message, "error");        
  }
  });     

}

Это HTML-часть:

<div class="container">
        <div class="row">              
          <div class="col">
            <h4>Para recibir su informacion gratuita rellene los siguientes campos:</h4>
            <br>
            <form #mailForm="ngForm">
              <div class="form-group">
                <label for="exampleInputName1">Nombre Empresa</label>
                <input type="text" class="form-control" id="exampleInputName1" [(ngModel)]="inputName" name="inputNameN" placeholder="nombre empresa">
              </div>
              <div class="form-group">
                <label for="exampleInputEmail1">Mail</label>
                <input type="email" class="form-control" id="exampleInputEmail1" [(ngModel)]="inputEmail" name="inputEmailN" aria-describedby="emailHelp" placeholder="mail">
                <small id="emailHelp" class="form-text text-muted">Nunca compartiremos su mail con nadie.</small>
              </div>
              <div class="form-group form-check">
                <input type="checkbox" class="form-check-input" id="exampleCheck1" [(ngModel)]="inputCheck" name="inputCheckN">
                <label class="form-check-label" for="exampleCheck1">Check me out</label>
              </div>
              <button type="submit" class="btn btn-primary" (click)="onSend()" ng-disabled="sending">Enviar</button>
            </form>
          </div>          
        </div>
 </div>  

Это функция parse.cloud в бэкэнде

Parse.Cloud.define('create-pdf', function (req, res) { 

let object = pdfConf.validate(req.params.text1, req.params.text2,req.params.text3,
    req.params.firstAnswer,req.params.secondAnswer,req.params.thirdAnswer,req.params.fourthAnswer,req.params.fifthAnswer,
    req.params.sixthAnswer,req.params.seventhAnswer,req.params.eigthAnswer,req.params.ninthAnswer,req.params.tenthAnswer,
    req.params.higth, req.params.left, req.params.rigth, req.params.on);

  if (object.error) {
    res.error( { error: object.error, message: object.message } );
    return;
  }

  let pdf = pdfConf.createPdf(object)
  .then((success) => {
    res.success( success );
  })
  .catch((e) => {
    res.error( e );
  });

});

Если хотите, вы можете попробовать эту страницу здесь: https://rmg.aratech.org. Как я уже сказал, это опрос с 12 вопросами и окончательной формой, выберите любые ответы и поставьте фальшивое имя и фальшивые письма в конце.

Любая помощь будет оценена.

...