解析服务器云代码不响应任何查询
Parse server cloud code not responding on any query
我最近将 parseserver 迁移到了 heroku,除了我的 Cloud Code 之外,一切似乎都运行良好 Parse.Query 似乎从未响应过。
我可以 运行 自定义云代码,但是任何时候我需要 运行 一个 Parse.Query 请求超时。
这是我的代码:
Parse.Cloud.define("get_remaining_minutes", function(request, response) {
var config_name = "RWMTrialMinutes";
var minutesForPeriod = 120;
var isTrial = true;
var periodStartDate = new Date("01/01/2015");
var minutesUsed = 0;
console.log("userId=" + request.params.userId);
var userQuery = new Parse.Query(Parse.User);
userQuery.get({ useMasterKey: true }).then(request.params.userId, {
success: function(user) {
console.log("success");
response.success(100);
},
error: function(object, error) {
console.log("failed");
response.error(error);
}
});
});
然后我打电话给:
curl -X POST -H "X-Parse-Application-Id: xxx" https://xxx.herokuapp.com/parse/functions/get_remaining_minutes?userId=dMbBrRGD1y
并获得超时
2016-10-13T17:21:21.858269+00:00 heroku[路由器]: at=info method=POST path="/classes/_User" host=xxx.herokuapp.com request_id=xxx fwd="xxx" dyno=web.1 connect=0ms service=7ms status=404 bytes=225
2016-10-13T17:21:21.788404+00:00 app[web.1]: userId=dMbBrRGD1y
2016-10-13T17:21:51.759088+00:00 heroku[路由器]: at=error code=H12 desc="Request timeout" method=POST path="/parse/functions/get_remaining_minutes?userId=dMbBrRGD1y " host=xxxx.herokuapp.com request_id=xxx fwd="xxx" dyno=web.1 connect=1ms service=30000ms status=503 bytes=0
我试过很多不同的查询方式——试过.first、.get、.find,似乎都在做同样的事情——超时。如果我跳过 .get 调用,该函数工作正常,我可以 response.success 正确。但是,我显然需要查询才能使我的代码正常工作。
我觉得我缺少一些基本的东西,比如需求或者路径设置不正确。
我还会提到我运行正在同一个 Heroku 应用程序上连接解析服务器和仪表板,如果您认为这对云代码失败的原因有影响的话。
有什么想法吗?
编辑:添加我的 index.js 代码以启动解析服务器和仪表板
var express = require('express');
var ParseServer = require('parse-server').ParseServer;
var ParseDashboard = require('parse-dashboard');
var path = require('path');
var allowInsecureHTTP = true;
var databaseUri = process.env.DATABASE_URI || process.env.MONGODB_URI;
var api = new ParseServer({
databaseURI: databaseUri || 'mongodb://localhost:27017/dev',
cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
appId: process.env.APP_ID || 'xxx',
masterKey: process.env.MASTER_KEY || '',
serverURL: process.env.SERVER_URL || 'xxx.herokuapp.com/parse',
restAPIKey: 'xxx',
push:{
ios:{
pfx: 'Push.p12',
bundleId: 'xxx',
production: true
}
}
}, allowInsecureHTTP);
var dashboard = new ParseDashboard({
users: [{
user: 'admin',
pass: 'xxx'
}],
apps: [
{
serverURL: process.env.SERVER_URL + process.env.PARSE_MOUNT || 'https://xxx.herokuapp.com/',
appId: process.env.APP_ID || 'myAppId',
masterKey: process.env.MASTER_KEY || '',
appName: process.env.APP_NAME || 'StoryTime',
iconName: 'Icon-60.png'
}
],
"iconsFolder": "icons"
}, allowInsecureHTTP);
var app = express();
app.use('/public', express.static(path.join(__dirname, '/public')));
var mountPath = process.env.PARSE_MOUNT || '/parse';
app.use(mountPath, api);
//start the dashboard
app.use('/dashboard', dashboard);
app.get('/', function(req, res) {
res.status(200).send('I dream of being a website. Please star the parse- server repo on GitHub!');
});
var port = process.env.PORT || 1337;
var httpServer = require('http').createServer(app);
httpServer.listen(port, function() {
console.log('parse-server-example running on port ' + port + '.');
});
原来有两个问题 - 首先是服务器配置不正确。 SERVER_URL 上没有 /parse - 因为 PARSE_MOUNT 属性 被用来在 express 中路由,所以我错过了它。其次, .get() 的 useMasterKey 语法需要像这样——我从网上的某个地方复制了代码,但它不正确。
userQuery.get(request.params.userId, { useMasterKey:true, success: function(user)....
我最近将 parseserver 迁移到了 heroku,除了我的 Cloud Code 之外,一切似乎都运行良好 Parse.Query 似乎从未响应过。
我可以 运行 自定义云代码,但是任何时候我需要 运行 一个 Parse.Query 请求超时。
这是我的代码:
Parse.Cloud.define("get_remaining_minutes", function(request, response) {
var config_name = "RWMTrialMinutes";
var minutesForPeriod = 120;
var isTrial = true;
var periodStartDate = new Date("01/01/2015");
var minutesUsed = 0;
console.log("userId=" + request.params.userId);
var userQuery = new Parse.Query(Parse.User);
userQuery.get({ useMasterKey: true }).then(request.params.userId, {
success: function(user) {
console.log("success");
response.success(100);
},
error: function(object, error) {
console.log("failed");
response.error(error);
}
});
});
然后我打电话给: curl -X POST -H "X-Parse-Application-Id: xxx" https://xxx.herokuapp.com/parse/functions/get_remaining_minutes?userId=dMbBrRGD1y
并获得超时
2016-10-13T17:21:21.858269+00:00 heroku[路由器]: at=info method=POST path="/classes/_User" host=xxx.herokuapp.com request_id=xxx fwd="xxx" dyno=web.1 connect=0ms service=7ms status=404 bytes=225 2016-10-13T17:21:21.788404+00:00 app[web.1]: userId=dMbBrRGD1y 2016-10-13T17:21:51.759088+00:00 heroku[路由器]: at=error code=H12 desc="Request timeout" method=POST path="/parse/functions/get_remaining_minutes?userId=dMbBrRGD1y " host=xxxx.herokuapp.com request_id=xxx fwd="xxx" dyno=web.1 connect=1ms service=30000ms status=503 bytes=0
我试过很多不同的查询方式——试过.first、.get、.find,似乎都在做同样的事情——超时。如果我跳过 .get 调用,该函数工作正常,我可以 response.success 正确。但是,我显然需要查询才能使我的代码正常工作。
我觉得我缺少一些基本的东西,比如需求或者路径设置不正确。
我还会提到我运行正在同一个 Heroku 应用程序上连接解析服务器和仪表板,如果您认为这对云代码失败的原因有影响的话。
有什么想法吗?
编辑:添加我的 index.js 代码以启动解析服务器和仪表板
var express = require('express');
var ParseServer = require('parse-server').ParseServer;
var ParseDashboard = require('parse-dashboard');
var path = require('path');
var allowInsecureHTTP = true;
var databaseUri = process.env.DATABASE_URI || process.env.MONGODB_URI;
var api = new ParseServer({
databaseURI: databaseUri || 'mongodb://localhost:27017/dev',
cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
appId: process.env.APP_ID || 'xxx',
masterKey: process.env.MASTER_KEY || '',
serverURL: process.env.SERVER_URL || 'xxx.herokuapp.com/parse',
restAPIKey: 'xxx',
push:{
ios:{
pfx: 'Push.p12',
bundleId: 'xxx',
production: true
}
}
}, allowInsecureHTTP);
var dashboard = new ParseDashboard({
users: [{
user: 'admin',
pass: 'xxx'
}],
apps: [
{
serverURL: process.env.SERVER_URL + process.env.PARSE_MOUNT || 'https://xxx.herokuapp.com/',
appId: process.env.APP_ID || 'myAppId',
masterKey: process.env.MASTER_KEY || '',
appName: process.env.APP_NAME || 'StoryTime',
iconName: 'Icon-60.png'
}
],
"iconsFolder": "icons"
}, allowInsecureHTTP);
var app = express();
app.use('/public', express.static(path.join(__dirname, '/public')));
var mountPath = process.env.PARSE_MOUNT || '/parse';
app.use(mountPath, api);
//start the dashboard
app.use('/dashboard', dashboard);
app.get('/', function(req, res) {
res.status(200).send('I dream of being a website. Please star the parse- server repo on GitHub!');
});
var port = process.env.PORT || 1337;
var httpServer = require('http').createServer(app);
httpServer.listen(port, function() {
console.log('parse-server-example running on port ' + port + '.');
});
原来有两个问题 - 首先是服务器配置不正确。 SERVER_URL 上没有 /parse - 因为 PARSE_MOUNT 属性 被用来在 express 中路由,所以我错过了它。其次, .get() 的 useMasterKey 语法需要像这样——我从网上的某个地方复制了代码,但它不正确。
userQuery.get(request.params.userId, { useMasterKey:true, success: function(user)....