云函数常见问题 - 图1 - 文档首页
-
- 数据服务
- Android SDK
- iOS SDK
- 小程序
- Cocos2D-X
- C# SDK
- GO
- JavaScript
- PHP
- RESTful
-
- 云函数
- Android SDK
- iOS SDK
- Java 云函数
- JavaScript
- C#
- PHP
- RESTful
- Web
-
- 支付服务
- Android SDK
- iOS SDK
- RESTful
-
- 短信服务
- Android SDK
- iOS SDK
- JavaScript
- PHP
- RESTful
-
- IM服务
- Android SDK
- iOS SDK
-
- 推送服务
- Android SDK
- iOS SDK
- JavaScript
- PHP
- RESTful
-
- 其他
- 常见问题
- 错误码
- 数据安全
- BQL
- 知识库
- 下载
- 搜索
常见问题 - 平台常见问题
- 数据服务
- 数据服务Android
- 数据服务iOS
- 数据服务Cocos2d-X
- 数据服务C#
- 数据服务JavaScript
- 数据服务PHP
- 数据服务RESTful
- 云函数
- 云函数常见问题
- 云函数iOS
- IM服务
- IM服务Android
- IM服务iOS
- 推送服务
- 推送服务Android
- 推送服务iOS
- 支付服务
- 推送服务Android
- 短信服务
- 短信服务
# 云函数常见问题 Q:使用云函数需要掌握什么语言 A:Javascript,因为云函数是用Nodejs部署架构的。 - - - Q:云函数能做什么事情 A:云函数的推出是为了给大家解决更多后端业务逻辑的问题,让大家尽可能把更多的业务逻辑挪到云端,实现更快的更新迭代。目前,云函数除可以自由操作云端数据库外,还提供了邮件模块HTTP模块事件模块等,方便大家自由发挥。 - - - Q:云函数能上传文件吗 A:暂不支持。 - - - Q:如何调试云函数 A: - Bmob在Web端(当前云函数的下边)为大家提供最简单的云函数的调试工具。 - 云函数本地化调试工具:https://github.com/bmob/bmob-cloud-tool 。 - - - Q:云函数或者android上update能否不用objectid用组合条件 A:只能根据objectid来,在查询返回的结果集中有objectid - - - Q:云函数,可以把消息发给IMSDK吗 A:目前不可以。 - - - Q:url转码怎么转 A: encodeURI(url) - - - Q:如何使用同步的ohttp.post请求 A:用eventproxy - - - Q:相同的代码,在Local中可以返回正确的结果,在Server中返回错误。请问如何解决? A:把本地的nodejs版本改成和云端一样,然后调试通过就可以了 - - - Q:bmob的短信服务端验证接口云函数怎么做?要发送一个post请求 A:使用云函数发送http请求即可 - - - Q:生成新应用时云函数没有复制到新应用 A:可使用云函数的本地调试工具可以运行后可以直接导入 - - - Q:云函数能否实现 WebSocket ? A:云函数无法使用第三方库 - - - Q:往表中添加基本类型的数据是调用数据库对象的insert方法,而添加关联关系对象是用add方法??那我的表里有这两种数据类型,该怎么添加数据 A:分别存储 - - - Q:保存一个Object类型字段的值为null的时候会报错 A:保存为这样{} - - - Q:如何实现一个签到的逻辑 A:在用户表添加一个字段—签到时间,当用户发送请求的时候,更新这个签到时间,如果签到时间为今天,说明已经签到 - - - Q:where语句如何查询24小时之前创建的记录? A:查询createdAt在24小时之前的记录就可以了 - - - Q:删除数据库记录只能用objectId吗?不能用where条件吗 A:只能用objectId,where条件用于查询,查询后的结果集中会有ObjectId的。 - - - Q:云函数怎么设定where条件 A:
  1. "where":{
  2. "updatedAt":{
  3. "$lt":{"type":"Date","iso":"2014-01-29 11:33:53"}
  4. }
- - - Q:在查找数据库的回调里面再查找,不能收到回调消息
  1. db.find(
  2. {
  3. "table":strTableName,
  4. "count":1,
  5. "limit":0,
  6. },
  7. function(err1,data1)
  8. {
  9. var searchNum = data1; //表的总行数,用sql语句获得
  10. var limitnum=1000; //默认最多返回1000条记录
  11. var runcount= parseInt(searchNum/1000);
  12. var strOutID = '';
  13. //分多次获取记录,因为每次只能获取1000条
  14. var i = 0;
  15. for(i = 0;i !== runcount; i++){
  16. var skipNum= 1000*i;
  17. if( i==runcount ) {
  18. limitnum=searchNum-skipNum;
  19. } else {
  20. limitnum=1000;
  21. }
  22. //能执行到这里,
  23. //response.send('data1');
  24. db.find(
  25. {
  26. "table":strTableName,
  27. "count":1,
  28. "limit":0,
  29. },
  30. function(err2,data2)
  31. {
  32. //这里执行不到
  33. response.send('data2');
  34. }
  35. );
  36. }
  37. }
  38. );
A:不能这样取,只能取一次,然后再取一次,不能在里面for循环 - - - Q:云函数可以查询支付订单吗?返回订单结果和数额之类的,有相关函数吗 A:可以使用云函数去调用restful接口来查询 - - - Q:云函数可以实现抓取别的网页信息吗 比如说,我客户端去请求云函数,让云函数实现抓取某个咨询网站的信息 A:可以,使用云函数的http请求抓取即可。 - - - Q:请问云函数可以发送短信吗? A:可以通过云函数调用restful接口来实现。 - - - Q:云函数更新用户表错误 但是最后返回的err包含错误信息 {"code":206,"message":"User cannot be altered without sessionToken Error."} A:必须先登录才能更新 - - - Q:请问云函数怎么返回JSON数据 A:
  1. var data = { dir: 'kunhony', param: 'archive' };
  2. var str = JSON.stringify(data);
  3. response.end(str);
- - - Q:如何在云端请求微信 A:http://docs.bmob.cn/cloudcode/WEB/d_cloudcodeweixin/doc/index.html - - - Q:Bmob中如何支持Cookie?用于将SessionID分配给浏览器 A:不支持set-cookie的方法。 - - - Q:请问云函数如何返回错误? A:如下,代码一般为这种形式,如果错误,返回response.send(err);
  1. function onRequest(request, response, modules) {
  2. var functions = modules.oFunctions;
  3. functions.run({
  4. "name": "test",
  5. "data":{"content":"你好","address":"guangzhou"}
  6. },function(err,data){
  7. //回调函数
  8. if(err){
  9. response.send(err);
  10. }else {
  11. response.send(data);
  12. }
  13. });
  14. }
- - - Q:开发公众号可以获取微信的openid吗 A:可以 - - - Q:云函数如何进行模糊查询 A:调用restful的模糊查询接口 - - - Q:云函数能引入第三方模块吗?如underscore A:不可以,如要使用第三方模块,可考虑使用窗口服务。 - - - Q:我有一个云函数,客户端访问的时候查看一条数据库对象,如果不存在,则创建、返回,如果存在则直接返回。所有客户端的访问都是查看同一个对象,如何保证多个客户端同时访问的时候不会同时创建多个对象? A:目前这个无法做到。 - - - Q:bql不支持 delete语句吗 A:目前bql只支持查询语句。 - - - Q:表设置了 ACL, 我想用 master key 或 用户的 token 去更新表,在云端用批量更新模块,如何传入master key 或 用户的 token ? A:目前不支持 - - - Q:云函数怎么延迟执行一个操作 A:目前并无该项功能 - - - Q:云函数中不同的模块中经常出现相同代码 有没有办法把这些代码提取到公共区域来复用 A:云函数之间是可以相互调用的,具体查看云函数云对象章节。 - - - Q:如何清空某个数据表? A:需要先将表的所有值查询下来,然后遍历去删除,具体参考文档的查询及删除对象章节 - - - Q:怎么在云端调用 获取短信验证码、验证短信验证码 A:使用云函数进行http请求,请求RESTful接口即可 - - - Q:云端如何自定义返回数据 A:定义好格式后以JSON形式返回 - - - Q:云函数MD5加密中文,结果怎么和PHP的不一样? A:编码问题,https://cnodejs.org/topic/54ad4e40ce87bace2444cc49 - - - Q:BMOB云端数据库导入需手动导入CSV格式,如何做到自动抓取我本地CSV文件传入云端数据库 A:Bmob导入数据,只可以从web后台手动导入。如果你要自动从本地传入数据库的话,可以自己写代码(程序)实现,用Bmob提供的SDK或基于RestApi来插入数据到云端数据库中。 - - - Q:云端数据库更新需上传CSV文件,如何实现自动云端更新 A:云端数据库与你本地数据库的结构可能会有区别,需要你针对自己的数据库特点,读取本地数据库,转换后再进行上传 - - - Q:用云端查询db.find,查询到表里的数据,返回的字段名也是表的列名,有没有像sql里面as的方式修改这个名字 A:目前还没有这个功能 - - - Q:如果一个字段里没有值,查询后返回的内容也没有这个字段,如果才能让这个字段也出现在返回的内容里。 A:由于后台使用的是MongoDB,是无模式的,没有初始值,因此只有显示地给该字段赋值才会有内容返回。 - - - Q:写云函数的时候,只能通过objectId来查询符合条件的一行数据?我想用表中的其他字段当做查询条件怎么写? A:可以使用条件查询,具体查看数据库对象中的查询多条数据小节。 - - - Q:用skip和limit来实现分页查询的话,如果表里的数据更新的很快的话,会不会查询出重复的数据? A:会出现重复数据,因此,一般您在查询时可以加上限制,比如,查询第一页时的时间为A,那您可以约束查询创建时间在A之前的数据,在那之后的数据不查询,这样就不会有重复了。 - - - Q:该如何实现类似乐观锁的功能 A:目前并没有提供该类型的接口 - - - Q:连上vpn没有数据返回 A:可以在连上VPN时ping https://api.bmob.cn/看看能否ping通,有可能是VPN屏蔽了 - - - Q:云函数中where条件怎么表示!=? A:您好,可以参考restful文档中的查询数据中的条件查询,大概的形式为"type":{"$ne":"delete"} - - - Q:如何更新1000条以上的记录 A:可以采用分页,先取1000条数据进行更新,再取1000条之后的数据接着更新 - - - Q:请问云函数请求HTTP时如何获取cookies和带cookies访问? A:将var http = modules.oHttp; 改成var http = modules.oHttp.defaults({jar: true}); 即可使用全局cookie,后面的链接就不需要手动输入cookie了。 - - - Q:JavaScript能调用云函数吗(xx平台能调用云函数) A:只要支持https请求就可以通过restful来调用云函数,部分sdk直接封装了调用云函数的接口,具体可以查看云函数文档。 - - - Q:请问云端new Date()如何获取和createTime里面一样的时间 A:createAt这个属性是特殊字段,为了节约HTTP流量,我们没有进行特殊字段类型处理,直接返回string类型。你在云函数里面new Date()获取的是一样的时间,因为服务器的时间是保持一致的。至于两者的数据格式问题,你可以自行处理。 - - - Q:云函数数据库可以返回多少条记录? A:一次最多只能返回1000次数据,如果要获取的数据大于整个数目,必须要分多次查询 - - - Q:云函数只能添加方法吗 我想在云函数中添加一个功能模块,但是发现云函数中的每个文件都是独立的,而且只能是方法,我想问一下能不能实现。 A:完全可以在方法内声明方法或者类的,这个不影响,而且可以通过间接调用的方式调用其他云函数的执行。 - - - Q:webstorm在本地搭好服务器,在不联网的情况下,使用ios调用运行在本地的服务端代码,能不能利用这样的方式测试? A:不可以,数据保存在云端,不联网无法操作数据,本地调试过程中不需要客户端的参与。 - - - Q:云函数执行console.log无输出 A:在真正的云函数上,不支持console.log这种输出,只能使用res.end() - - - Q:云端怎么实现 var wpwp = require('wpwp')('YOUR-KEY'); A:云函数进行了封装,无法加载非官方模块。 - - - Q:如何更新数据表中Date的数据 A:
  1. var userData = dataObject.results[0];
  2. var checkDate = userData.checkDate.iso;
  3. var lastDate = new Date(checkDate.toString());
  4. var nowDate = new Date();
  5. db.setHeader({"x-bmob-session-token":request.body.sessionToken.toString()});
  6. userData.checkDate.iso=nowDate;
  7. db.updateUserByObjectId({"objectId":request.body.objectId.toString() ,data: {"checkDate":userData.checkDate,"diamond":parseInt(userData.diamond)+10}},function(err,data)
  8. {
  9. })
- - - Q:containedIn在云函数里面是什么指令 A:对应为 http://docs.bmob.cn/data/Restful/b_developdoc/doc/index.html#查询 里面的 $in 查询,你可以参考restful文档,在where条件中使用就可以了。 - - - Q:如何在云函数中计算两个时间的时间差 A:
  1. var lastDate;//一定要是Date哦
  2. var nowDate = new Date(data);
  3. Date.parse(nowDate) - Date.parse(lastDate)
  4. //注意:单位是毫秒级的哦
- - - Q:批量操作对象中 "path": "/1/classes/GameScore" ,其中的 "/1/class/ "是什么来的?怎么确定下来的? A:/1/classse/ 是系统规定的路径,其中1是系统内部的版本号,classes表示接下来要操作的是数据表。 - - - Q:云函数能不能实现函数递归调用 A:可以,但要注意不能过于复杂,5s内无回调会提示超时。 - - - Q:我想用云函数修改user表中的数组,要如何设置?如何先获取表中的数组呢?获取了之后又要如何用arr.addUnique更新?求示例。 A:要修改User表中的数据需要注意: 1. 要么你有登录用户的sessionToken信息(也就是权限),这样可以修改用户信息; 2. 要么你用masterKey(也就是超级权限)来修改用户信息。 获取表中的信息非常简单,你直接Get就可以了,获取之后,你直接用类似如下的方法解决:
  1. var arr = modules.oArray;
  2. arr.addUnique({
  3. "table":"_User",
  4. "objectId":"j4w2DDDT", //这个对应是这个用户的objectId
  5. "data":{"skills":{"op":"AddUnique","objects":["flying","kungfu"]}}
  6. },function(err,data){
  7. //回调函数
  8. });
- - - Q:云函数比较复杂的时候,很难找出根本原因 1. 能否支持加入日志,通过查看日志来debug? 2. 能否有类似IDE的断点,或者是报错信息更明确一点在哪里出错? A:可以借助我们开发的这个云函数本地化调试工具来调试: https://github.com/bmob/bmob-cloud-tool - - - Q:对于设置了ACL为用户只读的数据,如何在云函数里将其全部读出? A:使用masterKey 云函数设置masterkey的方法:
  1. function onRequest(request, response, modules) {
  2. var db = modules.oData;
  3. db.setHeader({"X-Bmob-Master-Key":"这里填写Master Key信息"});
  4. db.updateUserByObjectId({"objectId":"这里是需要更新的用户ObjectId信息" ,data:{"username":"123"}},function(err,data){
  5. response.end("更新成功");
  6. });
  7. }
- - - Q:如果把代码放在云端,本地JS调用时,是否需要输入Application ID、REST API Key才能进行调用呢? A:只需要在初始化js sdk的时候传人Application ID、REST API Key就行了,在js调用云函数的时候不需要传入 - - - Q:云函数里如何获取当前时间 A:云函数是运行在nodejs的环境中,所以js的函数能用在云函数上。 获取时间: var now = new Date(); - - - Q:调用云函数,能否获取调用者的真实IP,想用IP来做排行榜的地理位置统计 A:云函数打印headers
  1. function onRequest(request, response, modules) {
  2. response.send(request.headers);
  3. }
结果:
  1. Response Body
  2. {
  3. "code": 200,
  4. "msg":
  5. {
  6. "x-real-ip": "114.114.114.114",
  7. "x-forwarded-for": "114.114.114.114",
  8. "host": "cloud.bmob.cn",
  9. "x-nginx-proxy": "true",
  10. "connection": "close",
  11. "accept": "/",
  12. "a": "",
  13. "content-length": "7",
  14. "content-type": "application/x-www-form-urlencoded"
  15. }
  16. }
x-real-ip就是用户的真实ip的 - - - Q:请问怎么查询用户当前排名 比如:我有个GameScore 表 字段有:username,score 现在排行榜里面数据有5000多条,我知道某个用户objectId,如果快速找出排名位置呢? A:解决方案: 根据order排名,把所有排名按次序放到一个数组中,然后根据objectId查找到某个用户名,用户名在这个数组中的位置即是他的排名。 RestAPI查询条件如下: 第一步:先查询到某个用户的用户名:
  1. curl -X GET \
  2. -H "X-Bmob-Application-Id: Your Application ID" \
  3. -H "X-Bmob-REST-API-Key: Your REST API Key" \
  4. -G \
  5. data-urlencode 'keys=username' \
  6. https://api.bmob.cn/1/users/某个用户的objectId
第二步:score降序获取前1000名的用户的用户名:
  1. curl -X GET \
  2. -H "X-Bmob-Application-Id: Your Application ID" \
  3. -H "X-Bmob-REST-API-Key: Your REST API Key" \
  4. -G \
  5. data-urlencode 'keys=username&order=-score&count=true&limit=1000&skip=0' \
  6. https://api.bmob.cn/1/classes/GameScore
返回前1000名的用户名,判断前一个查询的用户名是否在这个数组的哪个位置,如果没有找到,继续第二步, skip设为1000,直到找到为止。 优化方案: GameScore应该添加Pointer类型指向某个用户,然后在GameScore添加一个排名的列,更新score的时候更新排名,这样就可以直接根据用户的objectId一条查询就出来了。 Copyright © 2017 Bmob, Maintained by the Bmob Support.

搜索

请输入您要搜索的内容

Keyboard Shortcuts

Keys Action
? Open this help
Previous page
Next page
s Search

[返回

旧版](https://docs.bmob.cn/data/Android/a_faststart/doc/index.html)