Node.js 为什么findAll()不返回模型中的所有对象?

Node.js 为什么findAll()不返回模型中的所有对象?,node.js,mocha.js,sequelize.js,Node.js,Mocha.js,Sequelize.js,我正在模拟数据库,因为我正在进行单元测试API。对于模拟,我使用sequelize模拟库,对于模型,我使用sequelize。当我调用GET request时,函数getAll()只返回该数组中的第一个元素 我的模拟模型: const assetmeter = (sequelize) => { const AssetMeter = sequelize.define('assetmeter', { id: 1, assetId: 1, sequence: null

我正在模拟数据库,因为我正在进行单元测试API。对于模拟,我使用sequelize模拟库,对于模型,我使用sequelize。当我调用GET request时,函数getAll()只返回该数组中的第一个元素

我的模拟模型:

const assetmeter = (sequelize) => {
  const AssetMeter = sequelize.define('assetmeter', {
    id: 1,
    assetId: 1,
    sequence: null,
    meterName: 'BAD',
    measureUnit: 'km',
    meterType: 'CHARACTERISTIC', 
    description: 'test description', 
    active: true,
  },{
    id: 2,
    assetId: 2,
    sequence: null,
    meterName: 'TEST',
    measureUnit: 'TEST',
    meterType: 'TEST', 
    description: 'TEST', 
    active: true,
  });

  return AssetMeter;
}

module.exports = assetmeter;
获取所有功能:

import { AssetMeter } from '../../models';
import paginate from '../../utils/paginate';

export default async (req, res) => {
  let assetMeters = [];
  try {
    assetMeters = await AssetMeter.findAndCountAll({
      limit: req.pagination.limit, 
      offset: req.pagination.offset
    });
    console.log(assetMeters);
  } catch (err) {
    console.log(err);
    return res.status(500).send({ error: 'Internal server error' });
  }
  const links = paginate(req.protocol, req.hostname, req.baseUrl, req.pagination, assetMeters.count);
  if (links) {
    res.set('Link', links);
  }
  return res.set('X-Total-Count', assetMeters.count).send(assetMeters.rows);
}; 
我期望的输出是它将返回数组中的两个对象。 当前结果:

[ { id: 1,
    assetId: 1,
    sequence: null,
    meterName: 'BAD',
    measureUnit: 'km',
    meterType: 'CHARACTERISTIC',
    description: 'test description',
    active: true,
    createdAt: '2019-03-29T07:33:02.812Z',
    updatedAt: '2019-03-29T07:33:02.812Z' } ]

恐怕这是预期的结果,我认为您使用的
define
方法错误。有两件事

首先,方法签名是:

define(name, [obj={}], [opts]) -> Model
您正在传递3个参数,但只有第2个参数有效。它是一个对象,包含
AssetMeter
的默认值。因此,第三个参数被忽略,因为它应该是
opts

其次,您试图用许多
AssetMeter
填充您的mock,但为此您需要插入(创建)它们。同样,第二个参数是
AssetMeter
(id、assetId等)属性的默认值

这就是为什么
findAll
只返回一个结果,它是一个具有此类默认值的对象

如果需要这两个对象,我认为最好的方法是使用
$queueResults
模拟查询:

const DEFAULT_VALUE: { /*...*/ };

const assetmeter = (sequelize) => {

  const AssetMeter = sequelize.define('assetmeter', DEFAULT_VALUE);

  AssetMeter.$queueResult([UserMock.build(), UserMock.build(), /* ... */]);

  return AssetMeter;
}

module.exports = assetmeter;
请看以下文档:


我希望这有帮助

req.pagination.limit
req.pagination.offset
的值是多少?@bird pagination的值是100,offset是0请共享findAndCountAll生成的sql命令。添加选项“log:console.log”,就像限制偏移量选项一样。@RohitDalal我什么也没得到,sequelize没有这个功能,我想日志将在您的sql查询终端中生成