首页
免费后端云服务
关于
推荐
免费图床源码
Search
1
小程序后端入门系列视频教程【一-微信开发工具介绍】
9,715 阅读
2
微信小程序三级联动之多列选择器
9,598 阅读
3
小程序开发免费后端之神秘利器分享
9,526 阅读
4
Golang-开发企业级资源权限管理【第一步表设计】-1
9,075 阅读
5
学会微信服务端开发第一步
8,972 阅读
日常记录
日常
随笔
Bmob后端云
从零开始学物联网
Serverless实战驾校小程序
心邮
Serverless
向量数据库
登录
Search
Magic
累计撰写
120
篇文章
累计收到
21
条评论
首页
栏目
日常记录
日常
随笔
Bmob后端云
从零开始学物联网
Serverless实战驾校小程序
心邮
Serverless
向量数据库
页面
免费后端云服务
关于
推荐
免费图床源码
搜索到
118
篇与
的结果
2020-05-31
腾讯-wepy开发小程序基础教程
有开发者问Bmob能否用wepy,我的答案是可以的,也已经有数十位基于Bmob sdk开发者使用wepy做的小程序上线了安装wepy以下安装都通过npm安装,首先电脑安装npm安装 wepy 命令行工具。npm install wepy-cli -g在开发目录生成开发DEMO。wepy new myproject切换至项目目录。cd myproject开发实时编译。wepy build --watch这是安装过程然后开发工具选择 dist 目录打开,默认情况下会报错,大家开启记得这个操作,不然会报上面的错误,微信开发者工具 --> 项目 --> 关闭ES6转ES5。然后就是建个文件引入Bmob了,跟之前引入Bmob并无差异。├── dist 微信开发者工具指定的目录(该目录由WePY的build指令自动编译生成,请不要直接修改该目录下的文件) ├── node_modules ├── src 代码编写的目录(该目录为使用WePY后的开发目录) | ├── components WePY组件目录(组件不属于完整页面,仅供完整页面或其他组件引用) | | ├── com_a.wpy 可复用的WePY组件a | | └── com_b.wpy 可复用的WePY组件b | ├── pages WePY页面目录(属于完整页面) | | ├── index.wpy index页面(经build后,会在dist目录下的pages目录生成index.js、index.json、index.wxml和index.wxss文件) | | └── other.wpy other页面(经build后,会在dist目录下的pages目录生成other.js、other.json、other.wxml和other.wxss文件) | └── app.wpy 小程序配置项(全局数据、样式、声明钩子等;经build后,会在dist目录下生成app.js、app.json和app.wxss文件) └── package.json 项目的package配置上面是项目目录结构说明,这里需要注意的是wepy引入js需要2份才不会报错,在目录src 下放一份BmobSDk , dist目录下面放一份。 小程序接下来就愉快的操作Bmob 云数据库了。
2020年05月31日
4,889 阅读
0 评论
24 点赞
2019-08-22
MongoDB卡住数据库,临时恢复业务
好久没更新mongo运维这块知识了,这次介绍 db.currentOp与db.killOp命令数据库优化方法有很多,但所有数据库优化都离不开慢查询优化。mysql、mongodb都可以开启慢查询,来对数据库查询进行分析。开启慢查询日志,对性能会有一定的影响。mongoDB 有时我们只想临时看下慢查询日志,应该如何处理。这时,我们可以用到mongdb的db.currentOp命令 ,他可以列出当前真正跑的op相关信息。1.查看目前正在执行的所有查询语句db.currentOp();2.查询所有操作xxx集合并且执行时间已超过3s的请求db.currentOp( { "active" : true, "secs_running" : { "$gt" : 3 }, "ns" : /^xxx\./ } )3. 当然,如果我当前db集群有非常多的集合,我也可以不限制xxx集合db.currentOp( { "active" : true, "secs_running" : { "$gt" : 3 } } )currentOp的过滤条件包括请求操作类型,insert、update、delete…请求对应的connectionId,threadId请求是否正在等待锁请求执行时间请求操作的DB或collection请求query的内容…等等返回结果如下{ "desc" : "conn44266", "threadId" : "140419266524928", "connectionId" : 44266, "client" : "10.10.68.209", "active" : true, "opid" : 4495651, "secs_running" : 25, "microsecs_running" : NumberLong(25459008), "op" : "command", "ns" : "xxxxx", "query" : { "count" : "c74dc2de71", "query" : { "video" : { "$exists" : true }, "_isdel" : 0, "deleted" : { "$ne" : true }, "verify" : { "$ne" : false } } }, "planSummary" : "IXSCAN { video: 1 }", "numYields" : 189, "locks" : { "Global" : "r", "Database" : "r", "Collection" : "r" }, "waitingForLock" : false, "lockStats" : { "Global" : { "acquireCount" : { "r" : NumberLong(380) } }, "Database" : { "acquireCount" : { "r" : NumberLong(190) } }, "Collection" : { "acquireCount" : { "r" : NumberLong(190) } } } }当我们知道某条语句是锁库的罪魁祸首的时候,我们就可以通过另一条语句,干掉对应的请求。killOp 停止正在执行的查询用法:db.killOp(opid)目前Mongodb手册,还未有一次清掉当前所有查询,文档地址:https://docs.mongodb.com/manual/reference/method/db.killOp/执行后返回{ "info" : "attempting to kill op", "ok" : 1 }db.killOp(opid)的实现原理如下每个连接对应的服务线程存储了一个killPending的字段,当发送killOp时,会将该字段置1;请求在执行过程中,可以通过不断的调用OperationContext::checkForInterrupt()来检查killPending是否被设置,如果被设置,则线程退出。一个请求要支持killOp,必须在请求的处理逻辑里加上checkForInterrupt()检查点才行,否则即使发送了killOp,也只能等待请求完全处理完毕线程才会退出。比如createIndex的处理逻辑里包含了类似如下的代码,在createIndex的循环过程中,一旦killPending被置1了,createIndex的执行可以在当前循环结束时退出。while (!createIndexFinished) { createIndexForOneElement(); checkForInterupt(); }所以发送killOp后,请求要执行到下一个『检查点』线程才会退出,MongoDB在很多可能耗时长的请求中,都加入了checkForInterrupt()检查点,如创建索引,repair database,mapreduce、aggregation等。批量一次清楚当前慢查询上面说还未有一次清掉当前所有查询, 不过我们可以通过手动写脚本实现。此脚本由diggzhang大神贡献。文章链接:http://yangcongchufang.com/kill-mongo-ops.html实现功能:传入自己的IP地址,强制关停自己的异常查询。打开家目录下的.mongorc.js拷贝下面的killMyRunningOps函数进去,重新打开mongoshell即可加载这个函数(mongoshell启动时会预读这个文件)。➜ ~ cat ~/.mongorc.jskillMyRunningOps = function (clientIp) { var currOp = db.currentOp(); for (op in currOp.inprog) { if (clientIp == currOp.inprog[op].client.split(":")[0]) { db.killOp(currentOp.inprog[op].opid) } } }用法很简单,知道自己IP后,调用这个函数:> killMyRunningOps("12.23.32.21")
2019年08月22日
1,152 阅读
0 评论
3 点赞
2019-07-24
小程序混合开发(1)准备工作
目标开发一款H5与小程序共用的一套代码,带后端并且可以提交给微信审核。简介:Bmob 最近推出了混合平台 JSSDK库,支持 Node.js 、微信小程序 、Weex 、React Native 、Quick App 和浏览器等,写一份js可以以上任意平台,如果前端UI相关用法可以相同,也就是一份代码可以在多个平台使用。就拿行业微信小程序来说,目前支持跨平台的框架有mpvue、与wepy,分别是美团与腾讯出的。mpvue 有跨平台示例、wepy背后有腾讯为靠山各有优势。混合数据SDK文档地址: https://bmob.github.io/hydrogen-js-sdk/#/?id=登陆这里使用的是Bmob后端云、如果使用自己的服务器,请求网络这块可以用Fly,同样是夸平台,具体请上github查看框架的选择由于mpvue官方有跨平台前端示例,这里为了少踩点坑,选择mpvue实战开始一:分析页面请求需要实现的页面从上图,我们可以看到这个页面,有2个数据来自后端,分表是广告图与列表数据。这里有2个接口,他们的数据结构分别是实战开始二:建立数据表广告图数据结构如下[ { "title": "1299元起,诺基亚X6正式发布", "image": "http://img.ithome.com/newsuploadfiles/focus/f3583ca6-9a52-461b-b2b2-0f649fab0516.jpg", "link": "/pages/news/detail?id=360077&title=1299元起,诺基亚X6正式发布" } ]我在后台建个表slides,导入数据/src/db/slides.json列表数据我在后台建个表newslist,导入数据/src/db/newslist.json,跟上一步一样的操作详细数据建立新闻内容表newscontent,导入数据/src/db/newscontent.json实战开始三:修改请求代码到数据库列表修改请求代码//api.js,getNewsList改为 getNewsList: (r) => { //返回一个异步对象 return new Promise((resolve, reject) => { //查询`newslist` 数据 const query = Bmob.Query('newslist') query.find().then(res => { //返回一个json数据 resolve({'newslist': res}) }).catch(err => { reject(err) }) }) },数据已经从Bmob数据库调用出来了广告图操作一样,具体代码看github点击一下连接查看Github开源代码这样就实现了,首页的广告、数据列表、内容展示功能,如果您的小程序只是一个展示功能,可以使用此代码进行修改。下一节我们再讲朋友圈的实现。
2019年07月24日
6,468 阅读
0 评论
32 点赞
2019-07-08
Quikapp快应用【小程序】开发入门教程二
[Quikapp快应用【小程序】开发入门教程二] 调试器入门1. 安装调试器简书新规则不能有二维码,这个地方是一张运行起来内网的二维码图片上一篇讲到二维码,显示出来后,手机应该安装调试器,教程网址https://doc.quickapp.cn/tools/debugging-tools.html2.扫描二维码遇到问题1: 扫描后手机没反应,用另外一台华为手机扫描没问题。解决方法:手机重新安装调试器,重启手机遇到问题2:使用实时编译,报错,错误1:npm run watch 命令执行后提示错误 ,错误2:命令执行成功,手机调试器提示安装失败。错误一:解决办法暂时没找到,过了几天,没动。命令就执行成功了,本环境为MAC。错误二:最终找到原因,这里需要2个进程,单独执行npm run watch 是没效果的,需要把npm run server 也执行起来。错误二提示截图:3.成功实现自动刷新调试npm run watch解决调试问题,接下来就可以具体开发应用了。 这里目前有个神奇的问题是chrome浏览器中的devtools工具 是否显示需要看运气的,而且只支持chrome,我执行了好多次运行命令npm run server 只有一次弹出了调试地址。http://192.168.1.38:12306/inspector/inspector.html?ws=192.168.1.43:42717/inspector&remoteFrontend=true&dockSide=undocked, 如果能拿到浏览器的调试地址,到这里就可以实现手机、电脑同步调试了。
2019年07月08日
2,207 阅读
0 评论
22 点赞
2019-03-22
微信小程序三级联动之多列选择器
有些时候,三级联动业务场景并不只是全国地区选择,可能还涉及到自定义分类的三级联动,这时就需要使用微信的多列选择器。如果只是一列字段,或者每次拖动一次都去服务端取,会比较容易。 如果想一次定义好json,关联数据相对比较复杂,此案例json结构如下:效果如下实现过程1.WXML(这是一段微信官方文档的代码)<view class="section"> <view class="section__title">普通选择器</view> <picker bindchange="bindPickerChange" value="{{index}}" range="{{array}}"> <view class="picker"> 当前选择:{{array[index]}} </view> </picker> <picker bindchange="bindPickerChange1" value="{{index}}" range="{{array}}"> <view class="picker"> 当前选择:{{array[index]}} </view> </picker> </view> 2.js 逻辑部分 // 第一步 data 定义数据 ssl:地区json //第二步 设置默认三级联动数据 Onload //获取省市区json var ssls = this.data.ssl; //定义对应变量 var sheng = []; var shi = []; var qu = []; for (var i in ssls) { sheng.push(ssls[i].p_name) if (i == 0) { for (var u in ssls[i].p_city) { // console.log(ssls[i].p_city[u].c_name) shi.push(ssls[i].p_city[u].c_name) for (var j in ssls[i].p_city[u].p_district) { // console.log(ssls[i].p_city[u].c_name) qu.push(ssls[i].p_city[u].p_district[j].d_name) } } } } console.log(sheng, shi); this.setData({ multiArray: [sheng, shi, qu] }); //第三步:选择对应的value值改变 bindMultiPickerChange: function (e) { console.log('picker发送选择改变,携带值为', e.detail.value) this.setData({ multiIndex: e.detail.value }) }, //第四步:下拉拖动选项事件(这里只需要处理第一栏,与第二栏【因为第三栏拖动的时候,没有第四栏关联变动了,关于此处讲的栏,请看代码后图1-3】) bindMultiPickerColumnChange: function (e) { console.log('修改的列为', e.detail.column, ',值为', e.detail.value); var data = { multiArray: this.data.multiArray, multiIndex: this.data.multiIndex }; data.multiIndex[e.detail.column] = e.detail.value; switch (e.detail.column) { case 0: this.setData({ thisSheng: e.detail.value }) //此处是拖动第一栏的时候处理 var row = this.getCity(e.detail.value); data.multiArray[1] = row[0]; data.multiArray[2] = row[1]; //此处默认选中第一项 data.multiIndex[1] = 0; data.multiIndex[2] = 0; break; case 1: //此处是拖动第二栏的时候处理 var row = this.getCity(this.data.thisSheng, e.detail.value); console.log(row); data.multiArray[2] = row[1]; data.multiIndex[2] = 0; console.log(data.multiIndex); break; } this.setData(data); },关键处理函数// 获取城市信息 getCity: function (x, y = 999, z = 999) { console.log("xy", x, y); var ssls = this.data.ssl; var shi = []; var qu = []; for (var i in ssls) { if (i == x) { for (var u in ssls[i].p_city) { shi.push(ssls[i].p_city[u].c_name) if (u == y) { for (var j in ssls[i].p_city[u].p_district) { qu.push(ssls[i].p_city[u].p_district[j].d_name) } break; } if (y == 999) { for (var j in ssls[i].p_city[u].p_district) { qu.push(ssls[i].p_city[u].p_district[j].d_name) } } } break; } } console.log(shi); return [shi, qu]; },代码下载地址:https://github.com/magic007/weApp/tree/master/multiSelector基本手动实现一次官方的全国地区选择功能,只是相比官方更灵活,能添加更多种类型。
2019年03月22日
9,598 阅读
4 评论
2 点赞
1
...
8
9
10
...
24