Recursive parse date in cloud function (#2014)
* Recursive parse date in cloud function * Use _.mapValues
This commit is contained in:
@@ -316,6 +316,63 @@ describe('Cloud Code', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('test cloud function request params types', function(done) {
|
||||||
|
Parse.Cloud.define('params', function(req, res) {
|
||||||
|
expect(req.params.date instanceof Date).toBe(true);
|
||||||
|
expect(req.params.date.getTime()).toBe(1463907600000);
|
||||||
|
expect(req.params.dateList[0] instanceof Date).toBe(true);
|
||||||
|
expect(req.params.dateList[0].getTime()).toBe(1463907600000);
|
||||||
|
expect(req.params.complexStructure.date[0] instanceof Date).toBe(true);
|
||||||
|
expect(req.params.complexStructure.date[0].getTime()).toBe(1463907600000);
|
||||||
|
expect(req.params.complexStructure.deepDate.date[0] instanceof Date).toBe(true);
|
||||||
|
expect(req.params.complexStructure.deepDate.date[0].getTime()).toBe(1463907600000);
|
||||||
|
expect(req.params.complexStructure.deepDate2[0].date instanceof Date).toBe(true);
|
||||||
|
expect(req.params.complexStructure.deepDate2[0].date.getTime()).toBe(1463907600000);
|
||||||
|
return res.success({});
|
||||||
|
});
|
||||||
|
|
||||||
|
let params = {
|
||||||
|
'date': {
|
||||||
|
'__type': 'Date',
|
||||||
|
'iso': '2016-05-22T09:00:00.000Z'
|
||||||
|
},
|
||||||
|
'dateList': [
|
||||||
|
{
|
||||||
|
'__type': 'Date',
|
||||||
|
'iso': '2016-05-22T09:00:00.000Z'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'lol': 'hello',
|
||||||
|
'complexStructure': {
|
||||||
|
'date': [
|
||||||
|
{
|
||||||
|
'__type': 'Date',
|
||||||
|
'iso': '2016-05-22T09:00:00.000Z'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'deepDate': {
|
||||||
|
'date': [
|
||||||
|
{
|
||||||
|
'__type': 'Date',
|
||||||
|
'iso': '2016-05-22T09:00:00.000Z'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
'deepDate2': [
|
||||||
|
{
|
||||||
|
'date': {
|
||||||
|
'__type': 'Date',
|
||||||
|
'iso': '2016-05-22T09:00:00.000Z'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Parse.Cloud.run('params', params).then((result) => {
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('test cloud function should echo keys', function(done) {
|
it('test cloud function should echo keys', function(done) {
|
||||||
Parse.Cloud.define('echoKeys', function(req, res){
|
Parse.Cloud.define('echoKeys', function(req, res){
|
||||||
return res.success({
|
return res.success({
|
||||||
|
|||||||
@@ -5,6 +5,29 @@ var express = require('express'),
|
|||||||
triggers = require('../triggers');
|
triggers = require('../triggers');
|
||||||
|
|
||||||
import PromiseRouter from '../PromiseRouter';
|
import PromiseRouter from '../PromiseRouter';
|
||||||
|
import _ from 'lodash';
|
||||||
|
|
||||||
|
function parseDate(params) {
|
||||||
|
return _.mapValues(params, (obj) => {
|
||||||
|
if (Array.isArray(obj)) {
|
||||||
|
return obj.map((item) => {
|
||||||
|
if (item && item.__type == 'Date') {
|
||||||
|
return new Date(item.iso);
|
||||||
|
} else if (item && typeof item === 'object') {
|
||||||
|
return parseDate(item);
|
||||||
|
} else {
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (obj && obj.__type == 'Date') {
|
||||||
|
return new Date(obj.iso);
|
||||||
|
} else if (obj && typeof obj === 'object') {
|
||||||
|
return parseDate(obj);
|
||||||
|
} else {
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
export class FunctionsRouter extends PromiseRouter {
|
export class FunctionsRouter extends PromiseRouter {
|
||||||
|
|
||||||
@@ -36,15 +59,8 @@ export class FunctionsRouter extends PromiseRouter {
|
|||||||
var theFunction = triggers.getFunction(req.params.functionName, applicationId);
|
var theFunction = triggers.getFunction(req.params.functionName, applicationId);
|
||||||
var theValidator = triggers.getValidator(req.params.functionName, applicationId);
|
var theValidator = triggers.getValidator(req.params.functionName, applicationId);
|
||||||
if (theFunction) {
|
if (theFunction) {
|
||||||
const params = Object.assign({}, req.body, req.query);
|
let params = Object.assign({}, req.body, req.query);
|
||||||
for (var key in params) {
|
params = parseDate(params);
|
||||||
if (params.hasOwnProperty(key)) {
|
|
||||||
var value = params[key];
|
|
||||||
if (value && value.__type == 'Date') {
|
|
||||||
params[key] = new Date(value.iso);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var request = {
|
var request = {
|
||||||
params: params,
|
params: params,
|
||||||
master: req.auth && req.auth.isMaster,
|
master: req.auth && req.auth.isMaster,
|
||||||
@@ -73,4 +89,3 @@ export class FunctionsRouter extends PromiseRouter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user