前端向后端传递db.command条件的问题?
发布于 3 年前 作者 yonglong 930 次浏览 来自 问答

出于权限、数据查询条数限制、数据库安全等考虑,寡人一直都只通过云函数对数据库进行增查改操作。也就是在前端把data、where等条件传到云函数完成操作。

问题来了,前端到后端的无法直接传递db.command这种数据。

一开始我想到一个折衷的方法,前端这样写:

val1: 'command="thisIsOpenid"'
val2: 'command=db.serverDate()'
val3: 'command=new Date(new Date("1984-09-03 18:19:08").setHours(firstDate.getHours() - 8))'

后端再递归遍历过来(这种情况下Key与val的层次比较正常):

// 递归遍历并替换指定值
async function funForIn(data, OPENID) {
  for (let i in data) {
    if (typeof data[i] == 'object') {
      funForIn(data[i])
    } else {

      // 替换OPENID
      if (String(data[i]).includes('thisIsOpenid')) {
        data[i] = data[i].replace(/thisIsOpenid/g, OPENID)
      }

      if (String(data[i]).slice(0, 8) == 'command=') {
        // 查询指令
        data[i] = eval(data[i].slice(8))
      } else if (String(data[i]).slice(0, 7) == 'regExp=') {
        // 正则Get
        data[i] = db.RegExp({
          regexp: String(data[i].slice(7)),
          options: 'i',
        })
      }

    }
  }
}

基本上可以解决大部分的需求,但问题来了,对于Key与val层次另类的,类似这种,就无能为力了。

db.collection('todo').where(_.or([
  {
    progress: _.gt(80)
  },
  {
    done: true
  }
]))

所以,为了实现前端向后端传db.command条件,各位大佬有什么好的办法?谢谢。

1 回复

没有办法。

传参数,在云函数里重新构建_.xxx吧

回到顶部