7***@qq.com
7***@qq.com
  • 发布:2022-12-29 16:00
  • 更新:2022-12-29 16:03
  • 阅读:306

【报Bug】unicloud使用了数据库触发器就报错

分类:uniCloud

产品分类: uniCloud/App

示例代码:
module.exports = {     
    trigger: {  
        afterRead: async function ({  
              collection,  
              operation,  
              where,  
              field,  
			  result  
            } = {}) {//如果这里的 = {} 去掉也不行  
				console.log(result,'拦截read资源')  
            }  
    }  
}

操作步骤:

unicloud使用了数据库触发器就报错

预期结果:

正确执行

实际结果:

报错

bug描述:

按下面代码应该不会对jql查询有任何影响吧,但却读请求报错了

2022-12-29 16:00 负责人:无 分享
已邀请:
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

错误信息是什么,贴出来看下

  • 7***@qq.com (作者)

    [gd-sys/ac1cc2f81672300507320175432/332ms/ERROR] Unexpected token u in JSON at position 0

    Error: Unexpected token u in JSON at position 0

    at _callCloudFunction (/tmp/function/@common_modules/uni-cloud-jql/index.js:1:6047)

    at processTicksAndRejections (internal/process/task_queues.js:97:5)

    at getResourceList (/tmp/function/__index.js:380:18)

    at exports.main (/tmp/function/__index.js:789:15)

    at Z (/tmp/function/index.js:1:23891)

    at ee (/tmp/function/index.js:1:24095)

    at runUserFunction (/code/index.js:98:271586)

    at (/code/index.js:98:266752)

    请求响应状态: fail


    2022-12-29 16:10

  • DCloud_uniCloud_WYQ

    回复 7***@qq.com: getResourceList 里面怎么写的?


    2022-12-29 17:25

  • DCloud_uniCloud_WYQ

    回复 7***@qq.com: 调用了setUser方法吗?如果是的话可以把角色权限uid都写在setUser内看看正常不正常


    2022-12-29 17:31

  • 7***@qq.com (作者)

    回复 DCloud_uniCloud_WYQ: const dbRes = await dbJql.collection('gd_sys_resource').get();console.log(dbRes,'=====资源拦截后');主要是这句,加了数据库触发器后下面的console就打印不出了


    2022-12-29 17:33

  • DCloud_uniCloud_WYQ

    回复 7***@qq.com: 有没有在执行查询前调用dbJql的setUser方法


    2022-12-29 17:40

  • 7***@qq.com (作者)

    回复 DCloud_uniCloud_WYQ: 这个没有哎


    2022-12-30 08:41

  • DCloud_uniCloud_WYQ

    回复 7***@qq.com: 可以发我你的云函数或者云对象吗?


    2022-12-30 11:23

  • 7***@qq.com (作者)

    回复 DCloud_uniCloud_WYQ: 我的云函数里面其它业务的代码很多哎,都发你太多了,我先只执行const dbRes = await dbJql.collection('gd_sys_resource').get();console.log(dbRes,'=====资源拦截后');这两句的云函数先试一下,看会不会报错。主要我这边不加触发器一点问题都没有,加了触发器就报错。


    2022-12-30 12:32

  • DCloud_uniCloud_WYQ

    回复 7***@qq.com: 我这边测试只有调用setUser且不传permission才会报错。可以整理一个简单的demo发我吗


    2022-12-30 13:16

  • 7***@qq.com (作者)

    回复 DCloud_uniCloud_WYQ: 哦,我好像调用了setUser,那为啥不能用呀


    2022-12-30 13:32

  • 7***@qq.com (作者)

    回复 DCloud_uniCloud_WYQ: 怎么样正确传参才能使用 setUser 呢?我希望jql有admin的权限,请问怎么操作呢?


    2022-12-30 14:06

  • DCloud_uniCloud_WYQ

    回复 7***@qq.com: setUser的时候传({role: ['admin'], permission:[]})


    2022-12-30 14:23

  • DCloud_uniCloud_WYQ

    回复 7***@qq.com: 这个问题后续会修复


    2022-12-30 14:23

  • 7***@qq.com (作者)

    回复 DCloud_uniCloud_WYQ: 好的


    2022-12-30 14:46

  • 7***@qq.com (作者)

    回复 DCloud_uniCloud_WYQ: 再问个问题哈,请问能否定义一个所有数据库都会触发的触发器,而不是一个表定义一个,因为我想用触发器实现自增主键,但每个表都要加一个触发器感觉不方便


    2022-12-30 15:36

  • DCloud_uniCloud_WYQ

    回复 7***@qq.com: 这个不支持


    2022-12-30 15:39

  • 7***@qq.com (作者)

    回复 DCloud_uniCloud_WYQ: 希望能支持下,或提供一个自增主键的方案,这样unicloud数据库能兼容市面上的mysql等数据库的主键策略。能兼容主流后端项目迁移到unicloud。


    2022-12-30 16:15

要回复问题请先登录注册