问题描述
我正在使用prisma upsert,并在尝试设置一个字段(一种数组类型,特别是*ngIf
)时遇到有关缺少必需值的错误。
我正在使用prisma版本2.6.0
除少数行外,所有数据都进入数据库,执行更新程序时,prisma在这些行上抛出错误。
我从pyramida收到的错误与我要设置的数组有关:
numeric[]
发生异常的对象具有以下值:
prismaClientKNownRequestError:
Invalid `prisma.node.upsert()` invocation in
/usr/development/project/dist/project-tsdx.cjs.development.js:604:46
Missing a required value at `Mutation.upsertOnenode.create.nodeCreateInput.temperature.nodeCreatetemperatureInput.set`
at prismaClientFetcher.request (/usr/development/project/node_modules/@prisma/client/runtime/index.js:1:227598)
at runMicrotasks (<anonymous>)
at processticksAndRejections (internal/process/task_queues.js:93:5)
at async Promise.all (index 3366) {
code: 'P2012',Meta: {
path: 'Mutation.upsertOnenode.create.nodeCreateInput.temperature.nodeCreatetemperatureInput.set'
}
}
我对Node模型的架构如下:
threw this node:
Node {
name: 'ahostname',state: 'NONE',cores: -1,busycpus: 0,queue: 'NONE',rack: 'NONE',jobs: '',temperature: [ -1 ],tempupdatetime: '1970-01-01T00:00:00.000Z',power: 0,powerupdatetime: '1970-01-01T00:00:00.000Z',uptime: 20,loadavg1: 0,loadavg5: 0.01,loadavg15: 0.05,cpuusage: 0.2,updatetime: '2020-09-01T17:29:02.000Z'
}
最后,我用来设置此数组的实际代码如下:
model node {
node String @id
state String
cores Int
busycpus Int
queue String
rack String
jobs String
temperature Float[]
tempupdatetime DateTime
power Float
powerupdatetime DateTime
uptime Int
loadavg1 Float
loadavg5 Float
loadavg15 Float
cpuusage Float
updatetime DateTime
}
所有抛出的import { prismaClient } from '@prisma/client'
import { NodeStats } from '../sources/nodeStats'
const prisma = new prismaClient()
export default async (nodes: NodeStats) => {
const { timestamp,...others } = nodes
//@ts-ignore
let currentNode
const promises = Object.keys(others).map(async nodeName => {
try {
const node = nodes[nodeName]
currentNode = node
let { temperature,name,...others } = node
if (temperature.length === 1 && temperature[0] === 0){
node.temperature = [-1]
temperature = [-1]
}
// if(!temperature) console.log(currentNode)
await prisma.node.upsert({
create: { ...others,node: name,temperature: {set: [...temperature]}},where: { node: nodeName },update: { ...others,temperature: { set: [...temperature] } },})
} catch (e) {
console.error("threw this node:",currentNode)
console.error(e)
}
})
return Promise.all(promises)
}
都有一个共同点,它们的Node
的值为temperature
。我试图将其更改为[0]
,但这并没有阻止错误的发生。真的很困惑这里发生了什么,任何提示将不胜感激。
解决方法
我写了一些笑话测试来确定其原因,结果证明这是由于传入[0,null]
引起的。修复数据集后,此问题得以解决。