在 Parse.com Cloud 代码 beforeSave 函数中访问原始字段

2024-02-23

最终目标是使用以下方法检测现有 Parse 对象和传入更新之间的更改beforeSave云代码中的函数。

从 parse.com 提供的 Cloud Code 日志中,我们可以看到以下内容的输入:beforeSave包含一个名为original另一个叫update.

云代码日志:

Input: {"original": { ... }, "update":{...}

我想知道我们是否以及如何访问原始字段以便在保存之前检测更改的字段。

请注意,我已经尝试了多种方法来解决此问题,但没有成功:

  • 使用 (object).changedAttributes()
  • 使用 (object).previousAttributes()
  • 在使用新数据更新现有对象之前获取现有对象

Note on request.object.changedAttributes(): 回报false在 beforeSave 和 afterSave 中使用时 - 请参阅下文了解更多详细信息:

Log for before_save-- 为便于阅读而总结:

Input: { original: {units: '10'}, update: {units: '11'} }
Result: Update changed to { units: '11' }
[timestamp] false <--- console.log(request.object.changedAttributes())

对应的日志after_save:

[timestamp] false <--- console.log(request.object.changedAttributes())

There is有问题changedAttributes()。它似乎总是回答错误——或者至少在beforeSave,在合理需要的地方。 (看here https://www.parse.com/questions/how-to-get-the-changed-attribute-value-beforesave,以及其他类似的帖子)

这是一个通用的解决方法,可以完成 ChangedAttributes 应该做的事情。

// use underscore for _.map() since its great to have underscore anyway
// or use JS map if you prefer...

var _ = require('underscore');

function changesOn(object, klass) {
    var query = new Parse.Query(klass);
    return query.get(object.id).then(function(savedObject) {
        return _.map(object.dirtyKeys(), function(key) {
            return { oldValue: savedObject.get(key), newValue: object.get(key) }
        });
    });
}

// my mre beforeSave looks like this
Parse.Cloud.beforeSave("Dummy", function(request, response) {
    var object = request.object;
    var changedAttributes = object.changedAttributes();
    console.log("changed attributes = " + JSON.stringify(changedAttributes));  // null indeed!

    changesOn(object, "Dummy").then(function(changes) {
        console.log("DIY changed attributes = " + JSON.stringify(changes));
        response.success();
    }, function(error) {
        response.error(error);
    });
});

当我改变时someAttribute(a 上的数字列Dummy通过客户端代码或数据浏览器从 32 到 1222 实例),日志显示如下:

I2015-06-30T20:22:39.886Z]更改属性 = false

I2015-06-30T20:22:39.988Z]DIY改变属性= [{“oldValue”:32,“newValue”:1222}]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Parse.com Cloud 代码 beforeSave 函数中访问原始字段 的相关文章

随机推荐

  • Mongodb 将重音字符匹配为基础字符

    在 MongoDB db foo find 语法中 我如何告诉它匹配所有字母及其重音版本 例如 如果我的数据库中有一个姓名列表 Jo o弗朗索瓦 Jes s 我如何允许搜索字符串 Joao Francois 或 Jesus 来匹配给定的名称
  • 如何在AWS中创建新用户

    我试图弄清楚如何使用适用于 Java 的 AWS API 创建新用户 但我不知道我需要做什么 到目前为止 我设法编写了这段代码 它为我提供了一个 CreateUserRequest 一个 CreateAccessKeyRequest 和一个
  • 连接字符串中的允许用户变量 - SQL Server Express

    我正在尝试在连接字符串中添加 AllowUserVariables true 以使用 C 访问 SQL Server Express 但一个Keyword not supported allowuservariables 抛出异常 我该如何
  • 在布局 xml 中使用 onClick 属性会导致 Android 对话框中出现 NoSuchMethodException

    我创建了一个自定义对话框和一个布局 xml
  • ExpressJS / NodeJS 重定向图像

    可以吗 img具有 src 值并重定向到另一个页面 看来 我有img img src images fileName 在app js中 app get images fileName subject image 这是我的路线 exports
  • apache httpclient 未设置基本身份验证凭据

    看一下下面的代码 DefaultHttpClient http new DefaultHttpClient http getCredentialsProvider setCredentials new AuthScope AuthScope
  • 列不允许 DBNull.Value - 禁止 KeepNulls - 正确的列映射

    我正在使用 c 和 NET 4 5 2 推送到 SQL Server 2017 14 0 1000 169 在我的数据库中 我有一个带有 DateAdded 字段的表 其类型为DateTimeOffset 我正在尝试使用以下代码进行批量复制
  • C# 和 JavaScript 之间的时间跨度差异说明

    这是基于在 C 中计算 1970 年以来的毫秒数会产生与 JavaScript 不同的日期 https stackoverflow com q 22081128 1346943 and Javascript Date getTime 的 C
  • 简单游戏的 Canvas 与 SVG

    如果我想构建一个简单的游戏 贪吃蛇 西洋跳棋 吃豆人或其他游戏 什么是更好的方法 SVG 还是 Canvas 我感兴趣的事情 易于实施 Canvas 与 SVG 的学习曲线 例如 如果 SVG 的教程和社区支持明显减少 这对我来说至关重要
  • 从 jQuery 加载 symfony 2 目录中的 php 文件

    我在捆绑包内的树枝文件中有这行代码 jQuery BundleDir Bundle views mapname index html twig datacount load getDataCount php 我的问题是我需要将 getDat
  • 如何使用 jquery 操作查询字符串

    我有一个选择下拉列表 其中 id 映射到值 在 onChange 事件中 我想重定向到相同的 url 但将 id value 附加到查询字符串 如何检查此 id 选项是否已存在于查询字符串中 我不需要多个值 并根据需要替换 附加 我如何检查
  • 使用带有用户名和密码的 http 进行 Git 克隆

    我尝试使用 git 克隆http 用户 电子邮件受保护 http user password host com但我在添加用户或密码时遇到一些问题 因为用户使用的电子邮件包含其他 而密码使用感叹号 该命令看起来像http 电子邮件受保护 电子
  • PharData extractTo方法在linux环境下提取.tar.gz失败

    我想将 tar gz 文件提取到特定文件夹中 我使用 cURL 从 MailChimp 批量操作下载 tar gz 文件 我使用下面的代码来提取 tar 文件 phar new PharData upload test tar gz pha
  • 如果调用者返回太早,则异步 AWS Lambda 不会执行

    我正在尝试调用异步 lambda 函数within另一个 lambda 函数 我发现如果调用函数退出得太快 它就不会被执行 换句话说 以下内容永远不会起作用 LambdaFunction2 永远不会被调用 function lambdaFu
  • 在 OpenCV 中更新 Mat 的子矩阵

    我正在使用 OpenCV 和 C 我有一个像这样的矩阵 X Mat X Mat zeros 13 6 CV 32FC1 我只想更新它的一个 4x3 子矩阵 但我对如何有效地访问该矩阵存有疑问 Mat mat43 Mat eye 4 3 CV
  • 恢复备份mysql

    我在 mysql 中有一个 250MB 的数据库备份 如何将其恢复到另一台服务器上的新数据库中 或者只是使用php我的管理员为了恢复海豚
  • 分组数据框中日期范围重叠

    我如何知道两行的日期范围是否重叠 输入数据框 A B Start End Timestamp A1 B1 2022 01 15 2022 02 15 2021 05 17 A1 B1 2021 07 15 2021 10 17 2021 0
  • 在 Excel 中设置文本字符串列表的格式

    我正在尝试将 Excel 中出现的单词列表的字体变成红色 到目前为止 我能够找到一个单词 但我需要搜索整个数组 我是 VBA 新手 正在苦苦挣扎 到目前为止 我已经找到了一个解决方案 但它涉及查找单个字符串 F1 Sub test4Stri
  • 获取隐藏元素的偏移量

    如何获取隐藏元素的坐标 offset 不支持使用隐藏元素 有什么提示吗 如果你的元素有 hide 调用它 或者如果它有display none在CSS中 浏览器根本不费心去渲染它 在这种情况下 答案不是直接的 在最近的jQueries中 你
  • 在 Parse.com Cloud 代码 beforeSave 函数中访问原始字段

    最终目标是使用以下方法检测现有 Parse 对象和传入更新之间的更改beforeSave云代码中的函数 从 parse com 提供的 Cloud Code 日志中 我们可以看到以下内容的输入 beforeSave包含一个名为origina