gpt4 book ai didi

node.js - Node JS & Sequelize : . findByPk 返回一个函数而不是一个对象

转载 作者:行者123 更新时间:2023-12-03 22:34:36 26 4
gpt4 key购买 nike

我正在使用最新版本的 Sequelize、Node 和 Express。
我有一个名为“Producers”的模型,表名中的 eventProducers 具有以下列:

"id"
"name"
"email"
"url"
"description"
"createdAt"
"updatedAt"
"deletedAt"
我正在尝试使用此函数构建对象的 View :
export async function renderViewProducer(req, res) {
try {
const producer = await Producer.findByPk(req.params.id).toJSON;
if (producer) {
console.log('Producer: ', producer);
console.log('id: ', producer.id);
res.render('components/producers/view-producer', {producer});
} else {
req.flash('error_msg', 'La Productora que intenta ver no existe');
res.redirect('/producers');
}
} catch (error) {
console.log(error);
req.flash('error_msg', 'Ha ocurrido un error interno, por favor contacte al administrador');
res.redirect('/producers');
}
};
我正在使用 try/catch 而不是 Then 函数,也许我在那里遇到了问题。
我仍然对 Promises 有点困惑。
这是我在文档中发现的:
public static async findByPk(param: number | string | Buffer, options: object): Promise<Model>
我确定问题一定在这里,我没有得到模型。不知道为什么
这是我的控制台日志:
Producer:  [Function]
id: undefined
Executing (default): SELECT "id", "name", "email", "url", "description", "createdAt", "updatedAt", "deletedAt" FROM "eventProducers" AS "eventProducer" WHERE ("eventProducer"."deletedAt" IS NULL AND "eventProducer"."id" = 'bac1ce11-0cb9-4d8c-88b3-558c168b8cbd');
我已经在 PGAdmin 上复制并粘贴了查询并且工作正常。
我将 Producer 作为函数获取,而 Id 未定义。
我做错了什么?
提前致谢!
看待。

最佳答案

toJSON 是一个函数,你应该在收到模型的实例后调用它:

export async function renderViewProducer(req, res) {
try {
const producerModel = await Producer.findByPk(req.params.id);
const producer = producerModel.toJSON();
if (producer) {
console.log('Producer: ', producer);
console.log('id: ', producer.id);
res.render('components/producers/view-producer', {producer});
} else {
req.flash('error_msg', 'La Productora que intenta ver no existe');
res.redirect('/producers');
}
} catch (error) {
console.log(error);
req.flash('error_msg', 'Ha ocurrido un error interno, por favor contacte al administrador');
res.redirect('/producers');
}
};
我唯一不明白的是你为什么在这段代码中使用 toJSON 方法。
如果你想得到一个普通对象,而不是一个模型实例,那么你需要使用 producerModel.get({plain: true}) :
export async function renderViewProducer(req, res) {
try {
const producerModel = await Producer.findByPk(req.params.id);
const producer = producerModel.get({plain: true});
if (producer) {
console.log('Producer: ', producer);
console.log('id: ', producer.id);
res.render('components/producers/view-producer', {producer});
} else {
req.flash('error_msg', 'La Productora que intenta ver no existe');
res.redirect('/producers');
}
} catch (error) {
console.log(error);
req.flash('error_msg', 'Ha ocurrido un error interno, por favor contacte al administrador');
res.redirect('/producers');
}
};

关于node.js - Node JS & Sequelize : . findByPk 返回一个函数而不是一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62563864/

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