如何在本地运行Parse后台作业

时间:2015-12-04 22:22:32

标签: javascript parse-platform cloud-code

我尝试在本地运行Parse后台作业而不是Parse云。我需要Node SDK,因为浏览器SDK不支持使用此作业所需的主密钥。

以下是我在本地运行作业所尝试的内容:

var Parse = require('parse-cloud-express').Parse;

Parse.Cloud.job("myBackgroundJob", function(request, status) {

    status.success("Hello world!");

});

我有两个问题:

  1. 我不知道如何实际完成这项工作。我认为Parse.Cloud.job调用仅注册它。我可能需要以某种方式初始化SDK(使用API​​密钥),但我不知道如何。
  2. 当我运行此代码时,它输出Running jobs is not supported in parse-cloud-express,这让我相信我可能无法以这种方式工作。

1 个答案:

答案 0 :(得分:1)

事实证明这比我想象的容易得多。我仍然会发布我的解决方案,以防有人帮助。

为了使其正常工作,您需要在myBackgroundJob文件中注册名为myBackgroundJobFile.js的作业。您还需要一个包含作业参数的params.json文件。

我正在使用eval()而不是require,因为它允许我按原样使用该文件(意味着此文件也可以在Parse上使用而无需修改)。

var fs = require('fs');
var Parse = require('parse/node').Parse;
var BackgroundJobs = {}

var JobRequest = function (params) {
    this.params = params;
};
var JobStatus = function () {};
JobStatus.prototype.error = function () {};
JobStatus.prototype.message = function () {};
JobStatus.prototype.success = function () {};

Parse.Cloud.job = function (jobName, jobCall) {
    BackgroundJobs[jobName] = jobCall;
};
function callBackgroundJob(jobName, params) {
    var jobCall = BackgroundJobs[jobName];
    if (!jobCall) {
        console.error("There is no registered background job named `" + jobName + "`.");
        return Parse.Promise.error();
    } else {
        var request = new JobRequest(params);
        var status = new JobStatus();
        return jobCall(request, status);
    }
}

eval(fs.readFileSync('myBackgroundJobFile.js').toString());

Parse._initialize("APPLICATION_ID", "JAVASCRIPT_KEY", "MASTER_KEY");
Parse.Cloud.useMasterKey();

var params = JSON.parse(fs.readFileSync('params.json', 'utf8'));
callBackgroundJob("myBackgroundJob", params);