香港专业教育学院从未使用过云代码/ javascript,我正在尝试编写一些解析云代码来查找使用传递给云功能的objectId的用户,然后更新持有朋友的用户关系,最后保存该用户.
以下是我使用的函数:
Parse.Cloud.define("addFriendToFriendsRelation", function(request, response) {
Parse.Cloud.useMasterKey();
var fromUserObjectId = request.params.fromUserObjectId;
var acceptingUser = request.params.user;
var query = new Parse.Query(Parse.User);
// find the user the request was from using the objectId
query.get(fromUserObjectId, {
success: function(user) {
var fromUser = user
var relation = fromUser.relation("friends");
relation.add(acceptingUser);
fromUser.save({
success: function() {
response.success("Successfully saved the users relation")
},
error: function() {
response.error("Save failed");
}
});
},
error: function() {
response.error("Save failed");
}
});
});
Run Code Online (Sandbox Code Playgroud)
我设法使用Parse文档将它拼凑在一起.但我真的没跟好它.从未使用过javascript,我发现语法令人困惑.
然后即时调用函数
//fromUser is a PFUser object defined …Run Code Online (Sandbox Code Playgroud) 我在User模型上存储了一些永远不应由用户自己编辑的字段,而应仅由后端更新.所以我在beforeSave上做了验证:
// import all models
var Models = require('cloud/models/index');
// Models.User is a subclass of Parse.User
Parse.Cloud.beforeSave(Models.User, function (request, response) {
var user = request.object;
// prevent numberOfApples from being modified on clients
if(user.existed()) {
if(user.dirty('numberOfApples')) {
response.error('User is not allowed to modify numberOfApples.');
return;
}
}
response.success();
});
Run Code Online (Sandbox Code Playgroud)
所以我检查之前是否存在模型,这很重要,所以这些东西不会在注册时触发.但后来我尝试从Parse仪表板手动更新该字段,它会引发错误.如何确保只允许用户编辑此字段,而仪表板或后端可以这样做(显然使用主密钥时).
我正在尝试从名为的表中获取数据Book.里面Book有一个Pointer<ParseUser>保存一个用户的指针.在ParseUser具有所谓的另一个指针Pais(这意味着Country在西班牙语).所以我想从任何地方获取每一个信息Book:
var query = new Parse.Query("Book");
query.include("user");
query.include("user.pais");
query.find({
success: function(books) {
response.success(books);
},
error: function(error) {
response.error({'resp': error.code, 'message': error.message});
}
});
Run Code Online (Sandbox Code Playgroud)
我没有得到对象,只是指针:
为什么?我知道当我在iOS或Android中使用include(String key)或调用它时,它可以正常工作includeKey: NSString* key.
为什么它不能用于Javascript?
先感谢您.
问候.
拉斐尔.
编辑:
哦,我忘记了......我试过:
query.include(["user"]);
和
query.include(["user", "user.pais"]);
我见过开发人员使用它的一些例子.
第二次编辑:
我用过的最后一件事fetch就像:
Parse.Object.fetchAll(books, {
success: function(list) {
response.success(list);
},
error: function(error2) {
response.error({'resp': error2.code, 'message': error2.message});
},
});
Run Code Online (Sandbox Code Playgroud)
但也没有用.
这开始吓坏了我.
我们 的解决方法: …
我在从查询内部引用“User”对象时遇到问题。我有以下代码:
Parse.Cloud.define("getTabsBadges", function(request, response) {
var UserObject = Parse.Object.extend('User');
var user = new UserObject();
user.id = request.params.userId;
// Count all the locked messages sent to the user
var receivedMessagesQuery = new Parse.Query('Message');
receivedMessagesQuery.equalTo('status', 'L');
receivedMessagesQuery.equalTo('toUser', user); // THIS LINE GENERATES THE ERROR
receivedMessagesQuery.count({
// more code here
});
});
Run Code Online (Sandbox Code Playgroud)
我使用 CURL 调用该函数,但总是收到以下错误:
{"code":141,"error":"Error: Cannot create a pointer to an unsaved
ParseObject\n at n.value (Parse.js:14:4389)\n at n
(Parse.js:16:1219)\n at r.default (Parse.js:16:2422)\n at e.a.value
(Parse.js:15:1931)\n at main.js:9:25"}
Run Code Online (Sandbox Code Playgroud)
我在另一个项目中使用完全相同的代码,唯一的区别是我没有计算对象,而是找到它们并且它工作正常。我还验证了这两个项目中的表的列类型Pointer<_User>。是什么导致了这个问题?
当我尝试运行计数功能时,我得到
错误:此处不允许解析对象
E2015-11-09T12:36:10.778Z]v184 Ran cloud function count with:
Input: {}
Result: Error: Parse Objects not allowed here
at n (Parse.js:16:1063)
at Parse.js:16:1927
at Array.map (native)
at n (Parse.js:16:1904)
at n (Parse.js:16:1995)
at r.default (Parse.js:16:2422)
at Object.o.default.setCloudController.run (Parse.js:13:2159)
at Object.n [as run] (Parse.js:13:1730)
at e.query.find.success (main.js:10:19)
at e.<anonymous> (Parse.js:14:28224)
Run Code Online (Sandbox Code Playgroud)
搜索结果引导我解决这个问题,但所有教程都提到以这种方式发送参数。这段代码曾经运行良好。
计数功能:
Parse.Cloud.define('count', function(request, response) {
var query = new Parse.Query('MyS');
query.equalTo("Notify", true);
query.notEqualTo ("MainEventCode", '5');
query.find({
success: function(results) {
Parse.Cloud.run('http', {params : results}).then(
function(result) {
console.log('httpResponse is : ' …Run Code Online (Sandbox Code Playgroud) 我已根据Parse博客上的迁移指南将我的Parse应用程序迁移到Heroku.除了在我的云代码中运行查询之外,事情似乎工作正常.这是我的代码:
Parse.Cloud.afterSave("Item", function(request) {
//Parse.Cloud.useMasterKey(); //Uncomenting this line yields the same error
var query = new Parse.Query(Parse.User);
var prevAssigneeId = request.object.get("prevAssignee").id;
var assigneeId = request.object.get("assignee").id;
query.get(prevAssigneeId, { // <-- Results in an error
success: function(prevAssignee) {
console.log("Fetch prevAssignee: Success");
query.get(assigneeId, {
success: function(assignee) {
console.log("Fetch assignee: Success");
// Do something with the fetched users!
},
error: function(object, error) {
console.log("Query for assignee: ");
console.log(error);
}
});
},
error: function(object, error) {
console.log("Query for prevAssignee: ");
console.log(error); //<-- Error is logged …Run Code Online (Sandbox Code Playgroud) 我刚刚迁移了一个Parse Server,一切正常,除了云代码.我已经明白这是因为在我的main.js中我需要库"Underscore".
这是我的云代码功能:
Parse.Cloud.define("ReadyUp", function(request, response) {
var _ = require('underscore');
var fbid = request.user.get("fbid");
var query = new Parse.Query("Spel");
query.equalTo("lobby", fbid);
query.find().then(function(results) {
_.each(results, function(spel) {
spel.addUnique("ready", fbid);
});
return Parse.Object.saveAll(results);
}).then(function(result) {
response.success(result);
}, function(error) {
response.error(error);
});
});
Run Code Online (Sandbox Code Playgroud)
迁移前代码没有错误.我猜测要求找不到合适的文件夹.为了给你文件夹结构,它看起来像这样:
Cloudcode位置:mainfolder-> cloud-> main.js
下划线库:mainfolder-> node_modules->下划线(文件夹)
代码有问题还是文件夹结构有问题?
提前致谢!
/马丁
在afterSave Cloud Code函数中如下:
Parse.Cloud.afterSave("Post", function (request) {
var post = request.object;
if (post.has('author')) {
var author = post.get('author');
// author is a Link to a specific Parse.User
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试获取Post的作者字段指向的Parse用户的电子邮件.
在上面的示例中,author最终包含以下内容:
{
"__type":"Pointer",
"className":"_User",
"objectId":"413wgL9vf1"
}
Run Code Online (Sandbox Code Playgroud)
本质上,我想读取email指针指向的用户的属性.
我尝试过author.get('email'),但失败了,说"未定义".电子邮件在数据库中设置.
这样做的正确方法是什么?我应该使用链接中的objectId编写针对User类的查询,还是有更简单的方法?
我刚刚创建了一个用于在 Cloud9 上学习的解析服务器部署,当我使用 PostMan 使用 REST API 访问它时,一切正常。我现在正在尝试云功能。
我的 cloud.js 文件中有以下代码,
Parse.Cloud.define('hello', function(request, response) {
var query = new Parse.Query("Test");
query.find({
success: function(data){
response.success(query);
},
error: function(err){
response.error(err);
}
})
});
Run Code Online (Sandbox Code Playgroud)
在响应中我收到以下错误,
{
"code": 141,
"error": {
"message": "unauthorized"
}
}
Run Code Online (Sandbox Code Playgroud)
我对 PostMan 的请求看起来像这样,
只要我不尝试查询并发送简单的响应(例如 ),响应就可以response.success("OK")。
这是 Parse 的问题还是我错过了与授权相关的内容?
我有一个Cloud Code脚本,可以从服务中提取一些JSON.该JSON包含一组对象.我想将它们保存到Parse,但使用特定的Parse类.我该怎么做?
这是我的代码.
Parse.Cloud.httpRequest({
url: 'http://myservicehost.com',
headers: {
'Authorization': 'XXX'
},
success: function(httpResponse) {
console.log("Success!");
var json = JSON.parse(httpResponse.text);
var recipes = json.results;
for(int i=0; i<recipes.length; i++) {
var Recipe = Parse.Object.extend("Recipe");
var recipeFromJSON = recipes[i];
// how do i save recipeFromJSON into Recipe without setting all the fields one by one?
}
}
});
Run Code Online (Sandbox Code Playgroud) parse-cloud-code ×10
javascript ×7
heroku ×2
node.js ×2
ios ×1
json ×1
migration ×1
parse-server ×1
rest ×1