Apache 如何通过云代码访问解析服务器中的数据?

Apache 如何通过云代码访问解析服务器中的数据?,apache,parse-platform,xmlhttprequest,parse-cloud-code,Apache,Parse Platform,Xmlhttprequest,Parse Cloud Code,我尝试使用解析服务器的云代码功能进行查询。不幸的是,我们无法从数据库中检索任何数据。我们的代码如下所示: main.js: Parse.Cloud.define('test', function(request, response) { var user = request.user; var token = user.getSessionToken(); var query = new Parse.Query('Carpark'); query.first({ sessionToken: to

我尝试使用解析服务器的云代码功能进行查询。不幸的是,我们无法从数据库中检索任何数据。我们的代码如下所示:

main.js:

Parse.Cloud.define('test', function(request, response) {
var user = request.user;
var token = user.getSessionToken();
var query = new Parse.Query('Carpark');
query.first({ sessionToken: token }) // pass the session token to find()
.then(function(messages) {
response.success(messages);
}, function(error) {
response.error(error);
});
});
var express = require('express');
var ParseServer = require('parse-server').ParseServer;
var path = require('path');

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

var api = new ParseServer({
databaseURI: 'mongodb://parse-server:[...]@localhost:27017/[...]',
cloud: __dirname + '/cloud/main.js',
appId: '[...]',
masterKey: '[...], //Add your master key here. Keep it secret!
serverURL: 'https://backend.[...]/parse', // Don't forget to change to https if needed
publicServerURL: 'https://backend.[...]/parse', // Don't forget to change to https if needed
liveQuery: {
classNames: ["Posts", "Comments"] // List of classes to support for query subscriptions
}
});
// Client-keys like the javascript key or the .NET key are not necessary with parse-server
// If you wish you require them, you can set them as options in the initialization above:
// javascriptKey, restAPIKey, dotNetKey, clientKey

var app = express();

//var basicAuth = require('basic-auth-connect');
//app.use(basicAuth('triveme', 'triveme'));

app.use('/', express.static(path.join(__dirname, '/public')));
app.use('/parse', api);
app.get('/test', function(req, res) {
res.sendFile(path.join(__dirname, '/public/test.html'));
});

var port = 61004;
var httpServer = require('http').createServer(app);
httpServer.listen(port, function() {
console.log('parse-server-example running on port ' + port + '.');
});

// This will enable the Live Query real-time server
ParseServer.createLiveQueryServer(httpServer);
PFCloud.callFunction(inBackground: "test", withParameters: nil) {
(response, error) -> Void in
if let response = response {
let result = response
print("Cloud data:", result )
}
if error != nil {
print(error ?? "default cloud function error")
}
}
index.js:

Parse.Cloud.define('test', function(request, response) {
var user = request.user;
var token = user.getSessionToken();
var query = new Parse.Query('Carpark');
query.first({ sessionToken: token }) // pass the session token to find()
.then(function(messages) {
response.success(messages);
}, function(error) {
response.error(error);
});
});
var express = require('express');
var ParseServer = require('parse-server').ParseServer;
var path = require('path');

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

var api = new ParseServer({
databaseURI: 'mongodb://parse-server:[...]@localhost:27017/[...]',
cloud: __dirname + '/cloud/main.js',
appId: '[...]',
masterKey: '[...], //Add your master key here. Keep it secret!
serverURL: 'https://backend.[...]/parse', // Don't forget to change to https if needed
publicServerURL: 'https://backend.[...]/parse', // Don't forget to change to https if needed
liveQuery: {
classNames: ["Posts", "Comments"] // List of classes to support for query subscriptions
}
});
// Client-keys like the javascript key or the .NET key are not necessary with parse-server
// If you wish you require them, you can set them as options in the initialization above:
// javascriptKey, restAPIKey, dotNetKey, clientKey

var app = express();

//var basicAuth = require('basic-auth-connect');
//app.use(basicAuth('triveme', 'triveme'));

app.use('/', express.static(path.join(__dirname, '/public')));
app.use('/parse', api);
app.get('/test', function(req, res) {
res.sendFile(path.join(__dirname, '/public/test.html'));
});

var port = 61004;
var httpServer = require('http').createServer(app);
httpServer.listen(port, function() {
console.log('parse-server-example running on port ' + port + '.');
});

// This will enable the Live Query real-time server
ParseServer.createLiveQueryServer(httpServer);
PFCloud.callFunction(inBackground: "test", withParameters: nil) {
(response, error) -> Void in
if let response = response {
let result = response
print("Cloud data:", result )
}
if error != nil {
print(error ?? "default cloud function error")
}
}
来自iOS应用程序的请求示例:

Parse.Cloud.define('test', function(request, response) {
var user = request.user;
var token = user.getSessionToken();
var query = new Parse.Query('Carpark');
query.first({ sessionToken: token }) // pass the session token to find()
.then(function(messages) {
response.success(messages);
}, function(error) {
response.error(error);
});
});
var express = require('express');
var ParseServer = require('parse-server').ParseServer;
var path = require('path');

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

var api = new ParseServer({
databaseURI: 'mongodb://parse-server:[...]@localhost:27017/[...]',
cloud: __dirname + '/cloud/main.js',
appId: '[...]',
masterKey: '[...], //Add your master key here. Keep it secret!
serverURL: 'https://backend.[...]/parse', // Don't forget to change to https if needed
publicServerURL: 'https://backend.[...]/parse', // Don't forget to change to https if needed
liveQuery: {
classNames: ["Posts", "Comments"] // List of classes to support for query subscriptions
}
});
// Client-keys like the javascript key or the .NET key are not necessary with parse-server
// If you wish you require them, you can set them as options in the initialization above:
// javascriptKey, restAPIKey, dotNetKey, clientKey

var app = express();

//var basicAuth = require('basic-auth-connect');
//app.use(basicAuth('triveme', 'triveme'));

app.use('/', express.static(path.join(__dirname, '/public')));
app.use('/parse', api);
app.get('/test', function(req, res) {
res.sendFile(path.join(__dirname, '/public/test.html'));
});

var port = 61004;
var httpServer = require('http').createServer(app);
httpServer.listen(port, function() {
console.log('parse-server-example running on port ' + port + '.');
});

// This will enable the Live Query real-time server
ParseServer.createLiveQueryServer(httpServer);
PFCloud.callFunction(inBackground: "test", withParameters: nil) {
(response, error) -> Void in
if let response = response {
let result = response
print("Cloud data:", result )
}
if error != nil {
print(error ?? "default cloud function error")
}
}
我没有从服务器得到任何反馈(没有响应也没有错误)。我的问题可能有什么问题?

详细信息为1的日志请求:

REQUEST for [POST] /parse/functions/test: {} method=POST, url=/parse/functions/test, host=localhost:61004, accept=*/*, x-parse-session-token=[...], x-parse-application-id=[...].platform.dev2, x-parse-installation-id=[...], x-parse-os-version=10.2 (16D32), accept-language=en-us, accept-encoding=gzip, deflate, x-parse-client-version=i1.14.2, user-agent=trive.park/8 CFNetwork/808.2.16 Darwin/16.4.0, x-parse-app-build-version=8, x-parse-app-display-version=1.0, x-forwarded-for=[...], x-forwarded-host=backend.[...], x-forwarded-server=backend.[...], connection=Keep-Alive, content-length=0,
日志响应:

4|trive-pa | error: Failed running cloud function test for user nZ76ZimELw with:
4|trive-pa |   Input: {}
4|trive-pa |   Error: {"code":141,"message":{"code":100,"message":"XMLHttpRequest failed: \"Unable to connect to the Parse API\""}} functionName=test, code=141, code=100, message=XMLHttpRequest failed: "Unable to connect to the Parse API",  user=nZ76ZimELw
4|trive-pa | error: Error generating response. ParseError {
4|trive-pa |   code: 141,
4|trive-pa |   message: 
4|trive-pa |    ParseError {
4|trive-pa |      code: 100,
4|trive-pa |      message: 'XMLHttpRequest failed: "Unable to connect to the Parse API"' } } code=141, code=100, message=XMLHttpRequest failed: "Unable to connect to the Parse API"
4|trive-pa | [object Object]
解析服务器版本:2.2.23 在Apache服务器上自托管
MongoDB

您在本地运行的服务器上试用过吗?另外,您是否注意到您调用的函数名与您在main.js文件中声明的函数名不同?不同的函数名是一个复制粘贴错误,我修复了它。。。我还没有尝试在本地运行服务器。我建议在部署到云端之前运行服务器-您可能会发现调试要容易得多。请使用
VERBOSE=1
运行服务器以获得更好的日志,并在此处更新我们,以便我们能够帮助您。谢谢,日志输出已添加到问题中。两个问题可能会有所帮助:1)如果您使用
curl
调用函数,您是否得到任何反馈?2) 如果在
query.find()
回调中添加一些
console.log()
语句,您看到了什么吗?