收藏
回答

前端向后端传递db.command条件的问题?

出于权限、数据查询条数限制、数据库安全等考虑,寡人一直都只通过云函数对数据库进行增查改操作。也就是在前端把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条件,各位大佬有什么好的办法?谢谢。




回答关注问题邀请回答
收藏

2 个回答

  • 老张
    老张
    2021-10-17

    没有办法。

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

    2021-10-17
    有用 1
    回复
  • Larry
    Larry
    2021-12-13

    前端传代码字符串,后端eval('代码')执行,不过可能安全性不太好

    2021-12-13
    有用
    回复
登录 后发表内容