首页 > 解决方案 > 将 Sequelize 查询中的数据保存为变量中的纯 JavaScript 对象?

问题描述

我正在编写一个节点 API,并希望将 Sequelize 查询的结果作为块的纯 JavaScript 对象保存在变量中findAll。我有一些有用的东西,但没有我想要的那么好。这是我所拥有的:

router.get('/', (req, res, next) => {

    models.User.findAll({
        attributes: ['id', 'name'],
        raw: true
    }).then(function (results) {

        console.log(results); // Plain JavaScript object, which is good

        // Do logic on results 

        //Return results
        res.status(200).json({
            results
        });
    });
});

但我真的不想将我的所有逻辑都保留在then()块中,特别是因为我可能想在这个之前或之后做一些其他的查询。我真的想要类似的东西(如果这是一件事):

router.get('/', (req, res, next) => {

    var users = models.User.findAll({
        attributes: ['id', 'name'],
        raw: true
    }).then(function (results) {            
        });
    });

    // Do logic on results

    // return results
    res.status(200).json({
        results
    });
});

我试图将 sequelize 查询保存在router.get()调用下方的函数中,并在结果是 JavaScript 对象时返回结果,但这不起作用。我对 JavaScript 很陌生,所以我很感激你的建议。

标签: node.jsexpresssequelize.js

解决方案


好吧,如果你不希望你的逻辑代码在then块中,你不妨使用async-await

router.get('/', async (req, res, next) => {

    var results = await models.User.findAll({
        attributes: ['id', 'name'],
        raw: true
    });

     // you've result variable available here, use it.
    // Do logic on results

    // return results
    res.status(200).json({
        results
    });
});

现在您不必在then块中编写代码,您可以results直接在函数中使用变量。


推荐阅读