Я пытался найти маршрут из моих учетных записей моделей базы данных и собак:
db.Accounts.findAll({
where: {
admin:true,
},
include: [db.Dogs]
}).then((dbAdminAcc) => res.json(dbAdminAcc));
});
Но когда я пытаюсь запустить приложение и маршруты, оно продолжает возвращаться как: TypeError: Cannot read property 'findAll' of undefined. Поэтому, сделав несколько журналов консоли в index.js для папки моделей, я обнаружил, что все модели выводятся в консоли, поскольку модель [функция (анонимно)] для всех трех моделей. Это делает невозможным для меня доступ к данным вообще.
}).forEach((file) => {
console.log('The file is', file)
console.log(path.join(__dirname, file))
const model = require(path.join(__dirname, file));
console.log('Model is', model) // This is showing a function (anonymous instead of a name like Accounts)
db[model.name] = model;
});
Object.keys(db).forEach((modelName) => {
console.log('DB with modelname:', (db[modelName]))
if(db[modelName].associate) {
db[modelName].associate(db);
} });
Я посмотрел, правильный ли синтаксис в моделях Dogs и Accounts, чтобы увидеть, отсутствуют ли возвраты, но обе модели, похоже, настроены правильно:
module.exports = (sequelize, DataTypes) => {
const Dogs = sequelize.define('Dogs', {
dog_name: {
type: DataTypes.STRING,
allowNull: false,
validate: {
len: [2,15],
},
},
breed: {
type: DataTypes.STRING,
allowNull: false,
validate: {
len: [2,15],
},
},
age: {
type: DataTypes.INTEGER,
allowNull: false,
validate: {
len: [2,35],
},
isNumeric: true,
isInt: true,
},
food_requirements: {
type: DataTypes.STRING,
allowNull: false,
validate: {
len: [2,200],
},
},
friendliness: {
type: DataTypes.INTEGER,
allowNull: false,
validate: {
len: [1,5],
},
isNumeric: true,
isInt: true,
},
});
Dogs.associate = (models) => {
// a Dogs must belong inside the Admin Account
// Dogs cannot be created without a petId (username)
Dogs.belongsTo(models.Accounts, {
foreignKey: {
allowNull: false,
},
});
};
return Dogs;
};
const bcrypt = require("bcryptjs");
module.exports = (sequelize, DataTypes) => {
const Accounts = sequelize.define('Accounts', {
username: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
isUserName: true
}
},
// The password cannot be null
password: {
type: DataTypes.STRING,
allowNull: false
},
//this true or false
admin: {
type: DataTypes.BOOLEAN,
defaultValue: false,
}
});
Accounts.associate = (models) => {
Accounts.hasMany(models.Dogs, {
onDelete: 'cascade'
});
};
Accounts.prototype.validPassword = function(password) {
return bcrypt.compareSync(password, this.password);
};
Accounts.addHook("beforeCreate", function(accounts) {
Accounts.password = bcrypt.hashSync(accounts.password, bcrypt.genSaltSync(10), null);
});
return Accounts;
};
Я в недоумении, что попробовать дальше. Кто-нибудь знает, почему это происходит и как это исправить? Любая помощь будет принята с благодарностью. Спасибо
const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
. - person Abhishek Shah   schedule 02.03.2021