将来自Sequelize查询的数据保存为变量中的普通JavaScript对象吗?

时间:2018-08-05 02:44:07

标签: node.js express sequelize.js

我正在编写一个节点API,并希望将Sequelize查询的结果保存在变量中,作为findAll块的普通JavaScript对象 之外。我有一些有效的方法,但是没有达到我想要的效果。这是我所拥有的:

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的新手,所以我很乐意提供建议。

2 个答案:

答案 0 :(得分:2)

好吧,如果您不想在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

答案 1 :(得分:0)

我的朋友很容易在结果上进行逻辑运算,就像在我修改的代码中检索数据一样。

router.get('/', (req, res, next) => {
     var users = models.User.findAll({
            attributes: ['id', 'name'],
            raw: true
        }).then((results) => {            
            //here do you logic with results 
              //after
                res.status(200).json({data : result});
        }).catch(error => res.status(400).json({error}));
});