Sequelize错误:必须使用'as'关键字来指定要包括的关联的别名 -node.js

问题描述

我正在制作一个类似于“ Twitter”的Web应用程序。

我运行服务器时,

'user与用户多次关联。为了确定正确的关联, 您必须使用'as'关键字来指定要包含的关联的别名。

我为“关注者”和“关注者”之间的关系应用了“ as”关键字。 但是错误消息不断出现。

我确定我在某种程度上做错了,但我无法弄清楚到底是什么。 有人可以帮我吗?

  1. models / index.js

    'use strict';

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};

let sequelize;
if (config.use_env_variable) {
    sequelize = new Sequelize(process.env[config.use_env_variable],config);
  } else {
      sequelize = new Sequelize(config.database,config.username,config.password,config);
  }

fs
  .readdirsync(__dirname)
  .filter(file => {
    return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
  })
  .forEach(file => {
    const model = require(path.join(__dirname,file))(sequelize,Sequelize.DataTypes);
    db[model.name] = model;
  });

Object.keys(db).forEach(modelName => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;
db.User = require('./user')(sequelize,Sequelize);
db.Post = require('./post')(sequelize,Sequelize);
db.Hashtag = require('./hashtag')(sequelize,Sequelize);

db.User.hasMany(db.Post); //1 : n
db.Post.belongsTo(db.User); 
// m: n
db.Post.belongsToMany(db.Hashtag,{ through: 'PostHashtag' });
db.Hashtag.belongsToMany(db.Post,{ through: 'PostHashtag' });

// I use alias here *****
db.User.belongsToMany(db.User,{
  foreignKey: 'followingId',as: 'Followers',through: 'Follow',});

db.User.belongsToMany(db.User,{
  foreignKey: 'followerId',as: 'Followings',});

module.exports = db; 

  1. models / user.js
    module.exports = (sequelize,DataTypes) => (
  sequelize.define('user',{
    email: {
      type: DataTypes.STRING(40),allowNull: true,unique: true,},nick: {
      type: DataTypes.STRING(15),allowNull: false,password: {
      type: DataTypes.STRING(100),provider: {
      type: DataTypes.STRING(10),defaultValue: 'local',snsId: {
      type: DataTypes.STRING(30),{
    timestamps: true,paranoid: true,})
);


  1. models / post.js
module.exports = (sequelize,})
);

  1. models / hashtag.js

module.exports = (sequelize,DataTypes) => (
    sequelize.define('hashtag',{
        title: {
            type: DataTypes.STRING(15),{
        timestamps: true,})
); 

解决方法

我认为这将解决您的问题,您必须创建一个表follower,然后将其与具有关注和关注者别名的用户表相关联,并使用它来查询关注者和关注者

关注者模型

module.exports =   (sequelize,datatypes) => {
     sequelize.define('follower',{
        _id: {
            type: datatypes.integer,allownull: false,primarykey: true,autoincrement: true
        },userid: {
            type: datatypes.integer,allownull: false
        },followingid: {
            type: datatypes.integer,allownull: false
        }
    });
} 

关联

db.follower.belongsTo(db.user,{
    as: 'following',foreignkey: 'followingid'
});

db.follower.belongsto(db.user,{
    as: 'follower',foreignkey: 'userid'
});

查询以获取关注者

follower.findall({
    where: {
        followingid: userid
    },attributes: ['_id'],include: [{
        model: user,attributes:
            ['fullname','username','_id','picture'],as: 'follower'
    }]
})