【问题标题】:Node JS & Sequelize: .findByPk returns me a function instead an objectNode JS & Sequelize:.findByPk 返回一个函数而不是一个对象
【发布时间】:2020-06-26 03:22:49
【问题描述】:

我正在使用最新版本的 Sequelize、Node 和 Express。

我有一个名为“Producers”的模型,表名中的 eventProducers 具有以下列:

"id"
"name"
"email"
"url"
"description"
"createdAt"
"updatedAt"
"deletedAt"

我正在尝试使用此函数构建对象的视图:

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 未定义。 我做错了什么?

提前致谢! 请注意。

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    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');
        }
    };
    

    【讨论】:

    • 非常感谢@rustam,你为我节省了很多时间!
    【解决方案2】:

    我已经有 3 年没有写代码了,所以我觉得有点生疏了。 你只用两条简单的线就解决了我的问题。

    我开始使用toJSON(),因为我试图列出所有生产者,但遇到了“访问已被拒绝解析属性“...”,因为它不是“自己的属性”它的父级。” GitHub 我从该帖子中获取了解决方案,所以这是我的功能:

    export async function renderProducers(req, res) {
        try {
            let producers = await Producer.findAll();
            res.render('components/producers/all-producers', {
                producers: producers.map(producers => producers.toJSON())
            });
        } catch (error) {
            req.flash('error_msg', 'Algo falló al mostrar las productoras');
        }
    };
    

    我想我需要使用 Model.get({plain: true}) 而不是那个。

    【讨论】:

      猜你喜欢
      • 2020-05-06
      • 1970-01-01
      • 2021-08-12
      • 2015-11-26
      • 1970-01-01
      • 2020-10-07
      • 2011-11-13
      • 2011-12-26
      • 1970-01-01
      相关资源
      最近更新 更多