- 云开发数据库,如何判断一个集合是否存在?
如题,前端会根据用户的输入,创建数据库。 但需要增加一下逻辑,来判断数据库是否已经存在。应该如何判断?谢谢
2022-05-31 - createSelectorQuery如何获取元素相对于父级的位置?
我希望获得指定元素相对于父级的位置(top,left)。 使用官方API的createSelectorQuery,经过测试,我发现只能获得相对于屏幕的位置,而不是相对于父级。 所以,如果我要获得元素相对于父级的位置(top,left),有什么办法?谢谢 tabsChange: function (e) { const { id } = e.currentTarget; const query = wx.createSelectorQuery().in(that); query.select('#' + id).boundingClientRect(); query.exec(function (res) { console.log('top', res[0].top) console.log('left', res[0].left) }) }
2022-05-22 - Aggregate.sort不生效?
我尝试使用Aggregate.sort对聚会结果进行排序,先看数据格式,如下图: (month是标准时间,phoneNumber是字符串) [图片] 我的代码是这样的: exports.main = async (event, context) => { const { date, department } = event, match = { class: '薪酬' }; if (date) { const start = new Date(date.start.time), end = new Date(date.end.time); match.month = _.and(_.gt(start), _.lt(end)) } if (department.department1 != '全部') match.department1 = department.department1; if (department.department2 != '全部') match.department2 = department.department2; // 查询并返回 const get = await db.collection('salary').aggregate() .match(match) .group({ _id: { month: '$month', department1: '$department1', department2: '$department2', name: '$name', phoneNumber: '$phoneNumber', paidInAmount: '$paidInAmount' } }) .sort({ phoneNumber: -1, }) .limit(1000) .end(); return get }; 结果,无论是对时间格式的字段(month),还是字符串格式的字段(phoneNumber),进行排序都不生效,输出如下: 即不能实现按时间先后顺序排序,或按字符串排序。 [图片] 请教各位大佬,我的代码哪里写错了?感谢
2022-05-20 - 时间文本如何转标准date?
数据库有个month字段,格式是标准的date。 现在我们有一个时间(格林威治),格式是文本,例如这样:'2022-01-01T16:00:00.000Z'。 我需要以这个作为条件,取出数据库的数据,但这个条件文本无法匹配上数据库中的date。 所以,我的问题是,像'2022-01-01T16:00:00.000Z'的文本,如何转化为标准date,以能匹配上数据库中的字段,请指教,谢谢。 exports.main = async (event, context) => { const { month } = event; // month = '2022-01-01T16:00:00.000Z' const salary = await db.collection('salary').where({ month }).get(); return salary };
2022-05-10 - 已上传到微信公众平台(已上线)的小程序源码,是否可以下载回来?
误操作,本地源码丢失,请了解一下已上传到微信公众平台(已上线)的小程序源码,是否可以下载回来?谢谢指教
2022-01-27 - 有什么办法实现app.js中onLaunch完成再执行页面js?
如题,我希望再app.js中做一些查询数据库、进行用户校验的操作,希望app.js中onLaunch的逻辑完成再执行页面js,有没有简单的方法实现?谢谢指教。 App({ onLaunch() { this.toLogin(); }, async toLogin() { let { code } = await wx.login(); console.log(code); setTimeout(() => { console.log("登录成功"); }, 5000); }, });
2022-01-05 - 小程序的用户登录逻辑怎么写?
写了一个主要是对内部员工开发的小程序,新用户通过短信验证,在数据库创建新的用户信息,其中包含了用户的OPENID,用于用户后续登录自动鉴权。 但希望实现每次打开小程序,在app.js中一次鉴权,所有页面直接调用。 但逻辑有点问题,请各位大佬指教,谢谢。 [图片]
2022-01-04 - 数据库查询,如何查询数组是否包含某值?
数据库中有个字段是用于保存手机号的,格式大概是这样: phoneNumber:["13553687298","18312610086","13800138000"] 我希望查询出phoneNumber字段包含18312610086的所有记录,应该用什么查询指令。 看了一遍文档,没找到想要的。 请指教,谢谢。
2021-12-19 - 列表渲染时,模板(template)传参的问题?
在做前端列表渲染时,首先我会将循环的项目用...item的方式传递给模板(template),渲染成功,没有问题; 为了控制全局焦点,我在this.data中有个nowFocu的变量,我希望同时传递给模板,应该这么写?我试图直接写nowFocu,但发现这样是不行的,求指教。 <view wx:for="{{form_newOrder}}" wx:key="index"> <template is="{{item.element}}" data="{{nowFocu:nowFocu,...item" /> </view>
2021-12-18 - 如何保障静态网站托管的云安全性?
已官方Demo中Todo List 应用为例,我们需要操作云数据库、云存储时,需要通过自建的环境ID(envId)初始云(tcb),后续可以直接通过db.collection或callFunction操作数据库。 问题来了,这个环境ID,我一般是明文写在前端的,是不是别人有了我的环境ID,随便可以通过db.collection操作我的数据库? 所以,这个安全性是如何保障的?请各位大佬指教,谢谢。 <html> <head> <meta charset="UTF-8"> <script src="https://acc.cloudbase.vip/todo/src/todo.js" charset="utf-8"></script> <script src="https://imgcache.qq.com/qcloud/tcbjs/1.10.8/tcb.js"></script> </head> <body> <div id="model"> <input id="text-in" type="text" placeholder="写下您的待办事项…"> <label id="file-in" for="file-input">上传附件</label> <input id="file-input" type="file" onchange="TODO.filechange(this)"> <ul id="todo-list"></ul> </div> <script> let uid = null; const app = tcb.init({ env: "${envId}" }) const auth = app.auth({ persistence: "local" }); const db = app.database(); window.onload = function () { sign(); TODO.init(); } function sign() { auth.anonymousAuthProvider().signIn().then(() => { uid = auth.hasLoginState().user.uid; db.collection('todo').doc(uid).get().then(res => { if (res.data.length == 0) { db.collection('todo').add({ _id: uid, list: TODO.todo, time: new Date() }).then(res => { console.log(res); watchtodo(); }) } else { console.log(res); TODO.todo = res.data[0].list; TODO.todoinit(); watchtodo(); } }); app.callFunction({ name:'todo_getNumber' }).then(res=>{ document.getElementById('model').innerHTML+=`<p class='bottom-des'>共${res.result}人使用云开发TODO</p>` }) }) } TODO.itemChange = function (id, type, des) { if (type === 'add') { if (des != null) { app.uploadFile({ cloudPath: `todo/${uid}/${TODO.todo[id].file}`, filePath: des }).then((result) => { console.log(result) TODO.todo[id].file = result.fileID updatetodo() }); } else { updatetodo() } } else if (type === 'delete') { if (TODO.todo[id].file != null) { app.deleteFile({ fileList: [TODO.todo[id].file] }).then((result) => { delete TODO.todo[id] console.log(result) updatetodo() }); } else { delete TODO.todo[id] updatetodo() } } else { updatetodo() } } TODO.downLoadfile = function (file) { app.downloadFile({ fileID: file }) } function updatetodo() { db.collection('todo').doc(uid).update({ list: db.command.set(TODO.todo), time: new Date() }).then(res => { }).catch(e => { console.log(e); }) } function watchtodo() { db.collection('todo').where({ _id: uid }).watch({ onChange: (snapshot) => { if (snapshot.msgType != "INIT_EVENT") { TODO.todo = snapshot.docs[0].list; TODO.todoinit(); } }, onError: (error) => { alert('远端数据库监听失败!'); } }); } </script> </body> </html>
2021-12-01