我有一个在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!");
});
答案 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")
}
});