Ошибка CORS при использовании Back4App Parse Cloud Code Function - PullRequest
0 голосов
/ 02 декабря 2018

Бэкэнд Parse работает на Back4App.У них есть возможность облачного кода, которая позволяет вам размещать NodeJ как функции, которые вы можете вызывать из JavaScript на своем сайте.Я не очень хорошо знаком с NodeJ, поэтому с синтаксисом моей функции может быть что-то не так.

Функция NodeJs должна вызывать REST API почтового пистолета, и я вызываю функцию облачного кода Parse из Coffee Script на моем сайте,Я создал свою функцию, получив вызов REST для mailgun, работающий на Postman, а затем с помощью генерации кода Postman для генерации функции NodeJ.

Проблема в том, что когда я вызываю функцию облачного кода Parse с моего сайта, я получаю следующееошибки:

[Error] Origin http://localhost:9000 is not allowed by Access-Control-Allow-Origin.
[Error] Failed to load resource: Origin http://localhost:9000 is not allowed by Access-Control-Allow-Origin. (sendemail, line 0)

Я получаю эту ошибку, будь то из моего локального сайта тестирования или из моего размещенного сайта тестирования.

Вот функция облачного кода на Back4Appсервер синтаксического анализа:

    Parse.Cloud.define("sendemail", function(request, response) {
    var request = require("request");

    var options = { method: 'POST',
      url: 'https://api.mailgun.net/v3/mg.mysite.com/messages',
      headers: 
      { 'Access-Control-Allow-Origin':'*',
        'Access-Control-Allow-Headers':'X-Requested-With',
        'Access-Control-Allow-Headers':'Content-Type',
        'Postman-Token': 'token',
        'cache-control': 'no-cache',
        Authorization: 'Basic <auth_token>',
        'Content-Type': 'application/x-www-form-urlencoded',
        'content-type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' },
      formData: 
      { from: 'MySite.com <quote@mysite.com>',
        to: 'myemail@gmail.com',
        subject: 'Email Test',
        text: 'Email Test' } };

    request(options, function (error, response, body) {
      if (error) throw new Error(error);

      console.log(body);
    });
});

Я вызываю эту функцию кода облака анализа с моего веб-сайта, используя следующий сценарий кофе:

   Parse.Cloud.run('sendemail', data, {
    success: () ->
      console.log(result)
      console.log("success")
    ,
    error: () ->
      console.log(error)
      console.log("fail")
  });

Похоже, что в Back4App есть настройка, что яотсутствует.Я искал во всех настройках Parse и не вижу места для указания Access-Control-Allow-Origin.Я искал документацию по API для Back4App и группы сообщества.Группа сообщества упоминает вопрос здесь , но на самом деле не дает ответа, кроме как связаться с community@back4app.com.Я сделал это, но мне скоро нужен ответ.

В Back4App также есть тестовая функция hello, которую я могу вызвать нормально и получить ответ 200.

Parse.Cloud.define("hello", function(request, response) {
  response.success("Hello world!");
});

1 Ответ

0 голосов
/ 06 декабря 2018

Я думаю, вы забыли {и}, чтобы определить функцию.Вы также должны использовать => вместо ->.

Попробуйте использовать «затем» и «поймать» из обещания.Вот два фрагмента, которые вы можете использовать для проверки:

  Parse.Cloud.run('sendemail', data).then(() => {
      console.log(result)
      console.log("success")
    }).catch((error) => {
      console.log(error)
      console.log("fail")
    });

или этот другой:

  Parse.Cloud.run('sendemail', data, {
    success: () => {
      console.log(result)
      console.log("success")
    },
    error: (error) => {
      console.log(error)
      console.log("fail")
    }
  });
...