sequelize 关联键在响应中大写

sequelize association key is uppercased in response

如何让 Music 成为`音乐?

{
  id: 4
  name: "playlist 1"
  created_at: "2015-04-21T21:43:07.000Z"
  updated_at: "2015-04-23T20:44:50.000Z"
  Music: [
    {
      id: 12
      name: "Deorro - Five Hours (Static Video) [LE7ELS]"
      video_id: "K_yBUfMGvzc"
      thumbnail: "https://i.ytimg.com/vi/K_yBUfMGvzc/default.jpg"
      created_at: "2015-04-22T21:46:21.000Z"
      updated_at: "2015-04-22T21:46:21.000Z"
      playlist_id: 4
    }
  ]
}

我的查询类似于:

.get(function (req, res) {
    db.Playlist.findAll({
      include: [db.Music]
    }).then(function (playlists) {
      if(!playlists) {
        res.status(404).json({message: 'No playlist found!'});
        return;
      }

      res.json(playlists)
    })
  })

播放列表模型:

module.exports = function(sequelize, DataType) {
  var Playlist = sequelize.define('Playlist', {
    name: DataType.STRING
  }, {
    classMethods: {
      associate: function(models) {
        Playlist.hasMany(models.Music, { foreignKey: 'playlist_id' });
      }
    },
    tableName:   'playlists',
    underscored: true
  });

  return Playlist;
};

音乐模特:

module.exports = function(sequelize, DataType) {
  var Music = sequelize.define('Music', {
    name: DataType.STRING,
    video_id:  DataType.STRING,
    thumbnail:  DataType.STRING
  }, {
    classMethods: {
      associate: function(models) {
        Music.belongsTo(models.Playlist);
      }
    },
    tableName:   'musics',
    underscored: true
  });

  return Music;
}

要么更改型号名称中的大小写:

sequelize.define('music', ...)

或者在关联中提供一个as键:

Playlist.hasMany(Music, { as: 'music' })

方便参考的工作代码:

播放列表模型:

module.exports = function(sequelize, DataType) {
  var Playlist = sequelize.define('Playlist', {
    name: DataType.STRING
  }, {
    classMethods: {
      associate: function(models) {
        Playlist.hasMany(models.Music, { as: 'music', foreignKey: 'playlist_id' });
      }
    },
    tableName:   'playlists',
    underscored: true
  });

  return Playlist;
};

音乐模型:不变

查询:

controller.route('/playlist')
  .get(function (req, res) {
    db.Playlist.findAll({
      include: [{ model: db.Music, as: 'music' }]
    }).then(function (playlists) {
      if(!playlists) {
        res.status(404).json({message: 'No playlist found!'});
        return;
      }

      res.json(playlists)
    })
  })