gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 00:03:40 26 4
gpt4 key购买 nike

我正在研究模拟数据库,因为我正在对 API 进行单元测试。对于模拟,我使用 sequelize-mock 库,对于模型,我使用 sequelize。当我调用 GET 请求时,函数 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 个参数,但只有第二个有效。它是一个包含 AssetMeter 默认值的对象。因此,第三个参数被忽略,因为它应该是 opts

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

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

如果您想要这 2 个对象,我认为最好的方法是使用 $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;

查看文档:https://sequelize-mock.readthedocs.io/en/stable/docs/mock-queries/#queued-results .

希望对您有所帮助!

关于node.js - 为什么 findAll() 不返回模型中的所有对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55412760/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com