【问题标题】:Specifying date range params for $http GET request to Parse DB为 Parse DB 的 $http GET 请求指定日期范围参数
【发布时间】:2015-08-16 11:57:29
【问题描述】:

以下是我向 Parse.com 的 RESTful API 发出的GET 请求。我想将请求构造为仅检索今天收到的记录。

$http({
    method: "GET",
    url: "https://api.parse.com/1/classes/Order",
    headers: {
        "X-Parse-Application-Id": PARSE_CREDENTIALS.APP_ID,
        "X-Parse-REST-API-Key": PARSE_CREDENTIALS.REST_API_KEY,
        "Content-Type": "application/json"
    },
    params: {
        // WHAT DO I PUT HERE?
        createdAt: /* greater than 8am today, less than or equal to current time */
    }
})

阅读有关查询约束的 Parse API 文档后,我修改了 $http GET。但是,它仍然返回所有订单。

var startDate = new Date();
var currentTime = new Date().getTime();
startDate.setHours(8);//set time to 8 am.
$http({ method: "GET",
    url: "https://api.parse.com/1/classes/Order",
    headers: {
        "X-Parse-Application-Id": PARSE_CREDENTIALS.APP_ID,
        "X-Parse-REST-API-Key": PARSE_CREDENTIALS.REST_API_KEY,
        "Content-Type": "application/json"
    },
    params: {
        where: {
            "createdAt": { "$gte": startDate, "$lte": currentTime }
        }
    }
})

编辑 1: 在构造我的 get 请求时:我收到 400 HTTP 错误,包含以下内容:

code: 107
error: "invalid date {1.433264918052e+12}"

编辑 2(已解决):我已经解决了这个问题。在解析了 params 属性的结构后,我了解到 Parse API 需要一个 ISO 格式的 DateTime。所以,我的最终版本是这样的:

var startDate = new Date().toISOString();
var currentTime = new Date().getTime().toISOString();
startDate.setHours(8);//set time to 8 am.
var deferred = $q.defer();
$http({ method: "GET",
    url: "https://api.parse.com/1/classes/Order",
    headers: {
        "X-Parse-Application-Id": PARSE_CREDENTIALS.APP_ID,
        "X-Parse-REST-API-Key": PARSE_CREDENTIALS.REST_API_KEY,
        "Content-Type": "application/json"
    },
    params: {
        where: {
            "createdAt": { "$gte": startDate, "$lte": currentTime }
        }
    }
})

如果有人想借此机会给出详尽的解释,我很乐意为他们提供答案(例如,Parse 在标准 Unix 纪元时间上使用 ISO 有什么好处?)。

【问题讨论】:

  • 对于那些不熟悉的人,这个 REST 端点的文档在这里:parse.com/docs/rest/guide#queries
  • @ShotgunNinja 所以我使用查询约束添加了参数。我将添加参数以显示我所做的。但是还是不行……

标签: angularjs rest parse-platform angularjs-service


【解决方案1】:

您可以传递从和到日期时间戳来传递一个日期范围。试试这样的。

var startDate = new Date();
startDate.setHours(8);//set time to 8 am.

$http({
    method: "GET",
    url: "https://api.parse.com/1/classes/Order",
    headers: {
        "X-Parse-Application-Id": PARSE_CREDENTIALS.APP_ID,
        "X-Parse-REST-API-Key": PARSE_CREDENTIALS.REST_API_KEY,
        "Content-Type": "application/json"
    },
    params: {
        createdFrom: startDate.getTime(),
        createdTo: new Date().getTime()
    }
});

在服务器端,您可以将时间戳转换为日期对象,以将其传递给数据库存储过程或查询。

【讨论】:

  • 这是调用云函数的好建议,但 OP 询问的是 REST api,这需要按照此处所述指定约束:parse.com/docs/rest/guide#queries
  • 我不知道这个 api。谢谢教育我:)
【解决方案2】:

意识到我很久以前就在问题中发布了答案。用官方答案更新此内容以供后代使用。

我已经解决了这个问题。在解析了 params 属性的结构后,我了解到 Parse API 需要一个 ISO 格式的 DateTime。所以,我的最终版本是这样的:

var startDate = new Date().toISOString();
var currentTime = new Date().getTime().toISOString();
startDate.setHours(8);//set time to 8 am.
var deferred = $q.defer();
$http({ method: "GET",
    url: "https://api.parse.com/1/classes/Order",
    headers: {
        "X-Parse-Application-Id": PARSE_CREDENTIALS.APP_ID,
        "X-Parse-REST-API-Key": PARSE_CREDENTIALS.REST_API_KEY,
        "Content-Type": "application/json"
    },
    params: {
        where: {
            "createdAt": { "$gte": startDate, "$lte": currentTime }
        }
    }
})

【讨论】:

    猜你喜欢
    • 2013-08-17
    • 1970-01-01
    • 2015-02-02
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    相关资源
    最近更新 更多