首页 > 解决方案 > 为什么 sequelize 只返回一个结果?

问题描述

我在编写代码时遇到了一些问题,这里有一些信息: 模型:

'use strict';
    module.exports = (sequelize, DataTypes) => {
      const news = sequelize.define('news', {
        id: {
          allowNull: false,
          autoIncrement: true,
          primaryKey: true,
          type: DataTypes.INTEGER
        },
        title: DataTypes.STRING,
        slug: {
          type: DataTypes.STRING(64),
          unique: true
        },
        body: DataTypes.STRING,
        postedBy: DataTypes.INTEGER
      }, {});
      news.associate = function(models) {
        models.news.hasMany(models.news_ratings, {  
          as: 'rate',
          foreignKey: models.news_ratings.newsId
        })
      };
      return news;
    };
    ///////////////
    'use strict';
    module.exports = (sequelize, DataTypes) => {
      const news_rating = sequelize.define('news_ratings', {
        id: {
          allowNull: false,
          autoIncrement: true,
          primaryKey: true,
          type: DataTypes.INTEGER
        },
        user: DataTypes.INTEGER,
        rating: DataTypes.INTEGER,
        newsId: DataTypes.INTEGER
      }, {});
      news_rating.associate = function(models) {
        models.news_ratings.belongsTo(models.news, {
          foreignKey: models.news.id
        })
      };
      return news_rating;
    };

控制器:

router.get('/news/:from/:count', (req, res, next) => {
    if (Number.isInteger(Number(req.params.from)) && Number.isInteger(Number(req.params.count))) {
        models.news.findAll({
            offset: Number(req.params.from),
            limit: Number(req.params.count),
            include: [{
                as: 'rate',
                model: models.news_ratings,
                attributes: [
                    [sequelize.fn('AVG', sequelize.col('rating')), 'rate']
                ]
            }]
        })
        .then(response => {
            console.log(response)
            res.json(response)
        })
        .catch(err => {
            console.error(err)

            res.status(500).end()
        }) 
    } else next()
})

此代码返回此结果(然后获取 /news/0/1):

[{
    "id": 1,
    "title": "First new",
    "slug": "demo:first_new",
    "body": "New 1. This is demo ^=^",
    "postedBy": 0,
    "createdAt": "2020-07-22T13:53:48.000Z",
    "updatedAt": "2020-07-22T13:53:48.000Z",
    "rate": [
        {
            "rate": "-0.3333"
        }
    ]
}]

但我的数据库中有 5 条新闻!...然后我获取 /news/0/5,我得到了这个:

[
    {
        "id": 1,
        "title": "First new",
        "slug": "demo:first_new",
        "body": "New 1. This is demo ^=^",
        "postedBy": 0,
        "createdAt": "2020-07-22T13:53:48.000Z",
        "updatedAt": "2020-07-22T13:53:48.000Z",
        "rate": [
            {
                "rate": "0.0000"
            }
        ]
    }
]

看,汇率无效!它应该是-0.3333!

有人可以解释一下,为什么会发生这种情况以及如何解决这个问题?

标签: node.jssequelize.js

解决方案


推荐阅读