我正在编写一个节点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的新手,所以我很乐意提供建议。
答案 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}));
});