获取Sequelize Promise的内容而不执行它

时间:2017-10-04 16:25:04

标签: javascript node.js express promise sequelize.js

我知道这可能是一个奇怪的问题,我很抱歉,因为现在。

让我们的形象像这样轻松。

let query = User.findAll({where: {name: 'something'}})

是否有办法允许我访问query的内容。而内容我指的是使用User.findAll生成的事实,我并不关心承诺.then()的结果。

1 个答案:

答案 0 :(得分:0)

尝试使用 options.logging 在运行查询时执行的函数,以记录sql。

Documentation Model.findAll

代码:

const promise = User.findAll({
      logging: (query, obj) => {
        console.log("QUERY: ", query, "\n\nOBJ: ", obj);
      },
      where: {
        name: 'something',
      },
    });

输出:

QUERY:  Executing (default): SELECT `id`, `name` FROM `users` AS `user` WHERE `user`.`name` = `something`;

OBJ:  { logging: [Function: logging],
  plain: false,
  raw: false,
  showWarnings: false,
  where: '`user`.`name` = `something`',
  hooks: true,
  rejectOnEmpty: false,
  attributes: [ 'id', 'name' ],
  tableNames: [ 'users' ],
  type: 'SELECT',
  model: user }

更新:[回复评论]

我不明白为什么,但你可以使用这样的东西:

import DB from 'sequelize-connector';

// this is middleware
// app.use(this middleware)
export default (req, res) => {
  const promise = DB.user.findAll({
    logging: (query, obj) => {
      // here all your staff with req or res
      // get something from req
      // req.next()
      // or res.send(something)
      // or throw new Error ...
      req.next();
    },
    where: {
      id: 1,
    },
  });
};