使用Back4App解析云代码功能

时间:2018-12-02 20:12:52

标签: cors coffeescript cloud-code back4app

我有一个在Back4App上运行的Parse后端。它们具有云代码功能,可让您将NodeJ像可以从站点上的javascript调用的函数一样放置。我对NodeJ不太熟悉,所以我的函数语法可能有问题。

NodeJs函数需要调用mailgun REST API,我从站点上的Coffee Script调用了Parse云代码函数。我通过对在Postman上工作的mailgun进行REST调用,然后使用Postman的代码生成来生成NodeJs函数来创建函数。

问题是,当我从网站调用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的位置。我搜索了Back4App和社区组的API文档。社区小组提到了问题here,但除了联系community@back4app.com并没有给出其他答案。我已经做到了,但是我很快需要一个答案。

Back4App上还有一个名为hello的测试功能,可以正常调用并获得200响应。

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

1 个答案:

答案 0 :(得分:1)

我认为您忘记了{和}来定义函数。您还必须使用=>代替->。

尝试使用promise中的“ then”和“ catch”。您可以使用以下两个片段进行测试:

  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")
    }
  });