在directus中的flow中无法在Collection中选择系统表 | 在flow的UI配置页面,默认只能访问自己创建的表 | 通过在选择Collection旁边下拉箭头,选择 Edit Raw Value ,输入系统表即可. Note that I've found you need to enter something in that field first. Otherwise your change won't take. I.e. select one of your non-system collections and then Save your changes. Then go back in and edit -- choosing "Edit Raw Value" , enter something like directus_users and save. |
在flow里使用三方库 | 需要导出才能访问 | 在.env里设置 FLOWS_EXEC_ALLOWED_MODULES |
Flow 配置webhook 后访问提示没有权限 { "errors": [ { "message": "You don't have permission to access this.", "extensions": { "code": "FORBIDDEN" } } ] } | 请求方式设置的get,但实际却用post请求 | 把请求类型改为post即可,但是diectus 的错误提示容易误导。 用forbidden是为了安全,防止嗅探API是否存在。 |
使用多对一更新数据无效,如在patch方法/items/province/13 传入修改 省份名字+新增一条武汉城市记录 { "name":"湖北", "city" : { "name":"武汉" } } 提示错误 { "errors": [ { "message": "Invalid payload. Invalid one-to-many update structure: "name" is not allowed.", "extensions": { "code": "INVALID_PAYLOAD", "reason": "Invalid one-to-many update structure: "name" is not allowed" } } ] } | { "name":"湖北", "city" : { "name":"武汉" } } 关联的city 应该用数组表达,同时 需要在city的表配置,一对多 province | 把请求参数调整为 { "name":"湖北", "city" : [ { "name":"武汉" } ] } ,但是上面也是有缺点,会把原来的其他在湖北下的城市都清空,建议改成 { "name":"湖北", "city" : { "create":[ { "name":"武汉" } ] } } |
在flow里面 新增一个 operation 的create data 报错提示 { "name": "TypeError", "message": "Cannot read properties of undefined (reading 'startsWith')" } | 在 operation 没有选择对应的collection | 在collection输入表名即可 |
保存flow时候,提示[RECORD_NOT_UNIQUE] Value for field "resolve" in collection "directus_operations" has to be unique. | flow中一次不能做多个operation的添加,删除和连接动作。 | 每次创建一个operation就保存一下,删除也保存一下,连接也保存一下 |
使用 { "name":"湖北", "city" : { "delete":[ 2 ] } } 同时修改 name 和 移除城市关联,但是city没有真正异常,需要单独调用city表删除 | directus 只做关联的处理,不做表的删除,尤其在多对多的关联关系表也只是断开关系 | 只能人为主动触发删除city的逻辑 |
当修改数据模型,如把字段user_id 修改为user,其他同事的调用flow读取字段还是使用之前的user_id | directus 每次启动的时候应该缓存了所有字段的定义,导致读取的不是最新的字段 | 有问题的电脑重启directus 即可 |
在directus配置 多对一关联表的时候,总是提示报错 { "errors": [ { "message": "alter table xxx表 add constraint xxxx_foreign foreign key (xxxx ) references xxxxx (id ) on delete SET NULL - UNKNOWN_CODE_PLEASE_REPORT: Referencing column 'xxxx' and referenced column 'id' in foreign key constraint 'xxxx_foreign' are incompatible.", "extensions": { "code": "INTERNAL_SERVER_ERROR" } } ] } | 开发环境的数据库早期使用的是jason的设置的utf8mb4_0900_ai_ci规则,而开发环境数据库使用的是utf8mb4_unicode_ci | 修改开发环境数据库为utf8mb4_0900_ai_ci规则,并且把有问题数据库导出,然后统一替换sql 的utf8mb4_unicode_ci为utf8mb4_0900_ai_ci 再倒入 |
在创建数据的operation里面 如果直接设置"{{exec_create_body.createList}}",创建的时候会变成一个大字符串 | 默认是自动把输入内容加上转意成 ""{{exec_create_body.createList}}"" | 点击上面的{} 模式,切换到编辑模式 |
directus 在flow调用另外一个互联网钩子缺失登录的用户数据 | header信息缺少token信息 | 在头部加入 [ { "value": "{{$trigger.headers.authorization}}", "header": "authorization" } ] |
directus 在flow调用另外一个互联网钩子 传入的JSON格式无效,如:{a:1} | 最终会变成字符串 "body": ""{"a":1}"" | 建议在前面新增一个运行脚本,输出对象,并定义名字如 exec_obj 在使用互联网钩子参数输入 {{exec_obj}} |
当日期格式使用timestamp时间戳,输入2099-12-30 会导致sql插入报错 | directus 计算出来的时间戳,超出数据库限制 | 把存数据库的字段类型修改为datetime 即可 |
在自己在数据库求和总数和directus查询不一样 | 由于directus 默认限制了查询的条数,查出153条超出限制 | 加上 "limit": 10000000000, 后续看有没有更好方案 |
直接想批量更新业务表的多条记录 直接使用 更新数据: [ { "id": "03a7d395-f26f-4e8c-8754-2775b5963bxx", "status": "publish", }, { "id": "03a7d395-f26f-4e8c-8754-2775b5963byy", "status": "publish", } ] | 虽然也返回修改的id,但是实际并没有真正修改到数据库里 | 由于业务表是用户创建的,所以批量更新可以借助用户表做更新, "collection": "user",然后输入"user_xxx": { "update": [ { "id": "03a7d395-f26f-4e8c-8754-2775b5963bxx", "status": "publish", }, { "id": "03a7d395-f26f-4e8c-8754-2775b5963byy", "status": "publish", } ] ] } |
在flow 里面触发另外一个flow 提示:{ "name": "SyntaxError", "message": "Missing "}}" in the template for the "{{" at position 0 within 1000 characters" } | 由于 flow调用另外一个的时候,下一个flow里面 有错误的代码,但是directus 又把提示方案上一个flow,如在update 表里面 写了错误的代码 虽然也返回修改的id,{ "filter": { "user": { "_eq": "{{$trigger.id]}" } } } 把 } 写成了 ] | 修复下一个flow的每一个operation的bug即可 |
在directus 里面新增 数据总是提示 { "message": "Cannot read properties of undefined (reading 'table_type')", "extensions": { "code": "INTERNAL_SERVER_ERROR" } } | 由于当前新增了一个flow ,里面设置是事件钩子,类型为过滤器,并且监听了item.create, 当前flow存在一些bug,会导致新增失败,目测directus filter类型会以事务方式监听 | 把类型改成 动作 action |
如何设置flow是事件钩子并且为action,添加了一个监听了item.create事件,只有在UI上新增生效,在flow的operation触发新增不生效 | 在触发的operation操作数据库时,没有勾选 发出事件 | 在触发的operation操作数据库时,勾选 发出事件 |
前端无法查询RESTFul 接口无法过滤多层接口 | 需要使用deep关键字过滤 | const bank_currency = ref() async function fetchBank(id: any) { const { data } = await useFetcher('/items/province', { watch: false, params: { fields: ['city..', '*'], filter: { id, status: 'published', }, deep: { bank_currency: { _filter: { city: { status: 'published', }, }, }, }, }, transform: (res: any) => res.data[0], }) console.log(data.value) } |
审核记录表的创建人,设置了系统新增自动创建,但在flow里面创建的时候却新增为空 | 在operation里面设置权限为full_access,由于设置了full_access后是找不到对应的当前操作用户 | 把full_access 改成 from trigger ,则flow里面会自动根据当前用户去做创建用户 |
在apifox发起单独触发内部的另外一个flow时,总是提示token无效,获取订单的data里的方法找不到 | 由于两个不同的flow直接把上一个完整的上下文包括trigger都打包传递给下一个flow,里面包含header信息,导致接受的flow的header被覆盖 | 1. 把apifox 里面请求的 hader 里面的token信息更新最新的token信息 |
在apifox发起单独触发内部的另外一个flow时,获取订单的data里的方法找不到 | 由于两个不同的flow直接把上一个完整的上下文包括trigger都打包传递给下一个flow, 而方法只能在上一个flow定义operation才能传递,使用apifox是无法传递方法解析的 | 在第一个触发flow里面添加operation,并且挂载全局data,则下一个flow能正常访问方法 |
当把flow的类型从 内部另一个flow切换为互联网钩子,参数body的参数会丢失 | 1. 内部另一个flow:参数用的是 trigger.xxx2.互联网钩子多了一个body:参数用的是trigger.body.xxx | 新增body属性即可 |
在directus后台,发现上账时,收到两条入账记录, 1个域名是 test-api.cn 2. 另外一个是localhost:8055 | 开发同事本地也启动了服务,由于启动了两个服务,都会收到上账中心下发的消息,导致有两条写入入账的记录 | 直接在创建入账的时候判断订单号是否重复 |
当在本地环境新增了数据,做了响应的flow 无法被正常触发 | 未确定 | 还是使用回开发环境新增,开发环境flow响应正常 |
定时flow 处理提醒时,添加了当天已经发送就不再重复发的判断,但实际情况 没有生效 | 使用的filter 的 "day(date_created)": { "_eq": "{{exec_obj.day}}" }, "year(date_created)": { "_eq": "{{exec_obj.year}}" }, "month(date_created)": { "_eq": "{{exec_obj.month}}" } 来过滤日期,没有+8小时处理 ,要到第二天8点才算第二天 | 不使用系统自带的date_created,另外新增一个server_date_created(字符串) 服务器创建的日期字段 |
使用 node:crypto' 库进行验签报错 提示 node: internal/crypto/sig:230 return this [kHandle].verify(data, format, type, passphrase, signature, Error: error: 1E08010C:DECODER routines: :unsupported | 刚开始在flow 在调用报错,单元测试没有问题,以为是环境问题,其实是自己flow用了不规范的测试数据造成,如使用了"1111" 这种数据做公钥 | 只需要传入正确的参数即可,不过如果对方的公钥前面包含多余的空格也会导致失败,记得做把数据做 xx.trim()处理 |
执行npm init directus-project example-project 创建失败 报Directus requires Node.js 18, specifically version 18.17 or higher (>=18.17 & <19).Please adjust your Node.js version and try again. | directus 不支持太高版本的node,当前是20的版本 | 使用nvm use 18.18.0 切换到低一点的版本 |
执行npm init directus-project example-project 创建失败 报npm ERR! gyp ERR! cwd /Users/jason.yang/Desktop/my-workspace/github/example-project/node_modules/isolated-vm npm ERR! gyp ERR! node -v v18.18.0 npm ERR! gyp ERR! node-gyp -v v8.4.1 npm ERR! gyp ERR! not ok | python版本和库缺失 | ```brew install python@3.10 ; echo 'export PATH="/opt/homebrew/opt/python@3.10/bin:$PATH"' >> ~/.zshrc ; source ~/.zshrc ; python3.10 -m ensurepip --upgrade ; python3.10 -m pip install setuptools # 如何还是不行可以试试 python3 -m venv myenv ; source myenv/bin ; activate; pip install setuptools # 以及安装对应脚手架 和 pnpm 安装 npm install @directus/cli```` |