gpt4 book ai didi

node.js - 序列化 findOne 返回的实例。 Row 位于 dataValues 中,但实例上的直接属性未定义

转载 作者:太空宇宙 更新时间:2023-11-03 23:14:15 24 4
gpt4 key购买 nike

上下文:我正在数据库中测试一个简单的模型。这不是真正的测试,它是某些集成测试的先驱。使用SequelizefindOne

问题:返回的模型实例上的直接数据,即 email.ulid、email.address、email.isVerified 未定义。

我的问题:为什么它们未定义?

Sequelize: 5.15.0
Typescript: 3.5.3
mysql Ver 15.1 Distrib 10.4.6-MariaDB

记录到数据库:

await testingDatabase.sync({
force: true
}).then(async () => {
await Email.create({
ulid: the_ulid.bytes,
address: "dave@world.com",
isVerified: false
})
})

取回记录:

await Email.findOne({
where: {
address: "dave@world.com"
}
, rejectOnEmpty: true //to shut typescript up
}).then( emailData => {
console.log("Email: ", email)
})
email 实例的

Console.log:

    Email:  Email {                                                                                                                                                      
dataValues: {
ulid: <Buffer 01 6c a3 36 11 9c 1e 9b a6 ce 60 b7 33 3e e7 21>,
address: 'dave@world.com',
isVerified: false,
deletedAt: null,
createdAt: 2019-08-18T05:32:05.000Z,
updatedAt: 2019-08-18T05:32:05.000Z
},
...,
isNewRecord: false,
ulid: undefined,
address: undefined,
isVerified: undefined,
createdAt: undefined,
updatedAt: undefined,
deletedAt: undefined
}

^^^ 很明显,在上面,实例上的所有直接属性均为 null。

以下方法有效,但副作用是 isVerified 返回为 0 而不是 false 随后无法与原始数据进行直接比较。此外,我失去了模型实例的其他功能,这些功能在更复杂的模型上会派上用场:

Email.findOne({
where: { address: "dave@world.com" }
, raw: true
, rejectOnEmpty: true
})

这些也有效,但结果是 Typescript 提示返回的对象没有我随后访问的属性(尽管它们确实存在并且测试有效):

.then( emailData => {
console.log("All getters: ", emailData.get())
// AND
console.log("All getters(plain): ", emailData.get({plain: true}))
// AND
console.log("toJSON: ", emailData.toJSON())
})

下一个(由 Vivek 建议),只要数据可用即可工作,但 JSON.parse 无法正确处理缓冲区:

const dataOnly = JSON.parse(JSON.stringify(emailData))

其他人提示( SE answer )console.log 在某种程度上错误地打印了实例,但我访问这些属性的所有其他方式它们仍然是未定义的。

最佳答案

我遇到了同样的问题,但背景略有不同。

我的解决方案是在 tsconfig.json 中使用 ESNext 目标。使用 ES2021 或任何其他目标解决了该问题。

关于node.js - 序列化 findOne 返回的实例。 Row 位于 dataValues 中,但实例上的直接属性未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57542074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com