TL; DR
Я получаю сообщение об ошибке, в котором говорится, что findByPrimary не является функцией при использовании Sequelize.
Я следовал этому учебнику о том, как создать валютную систему для бота Discord, используя Sequelize и SQLite 3. Однако всякий раз, когда я использую findByPrimary
в модели, я получаю следующую ошибку:
(node:9182) UnhandledPromiseRejectionWarning: TypeError: Users.findByPrimary is not a function
Users
определено в models/Users.js
:
module.exports = (sequelize, DataTypes) => {
return sequelize.define('users', {
userId: {
type: DataTypes.STRING,
primaryKey: true
},
balance: {
type: DataTypes.INTEGER,
defaultValue: 0,
allowNull: false
}
}, {
timestamps: false
});
};
который упоминается в dbObjects.js
:
//modules
const Sequelize = require('sequelize');
//sequelize connection info
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'sqlite',
logging: false,
storage: 'database.sqlite'
});
//models
const Users = sequelize.import('models/Users');
//export
module.exports = {Users};
, который импортируется в server.js
и используется в качестве одного из аргументов в execute
в командном файле:
const {Users} = require('./dbObjects');
//command is a file (in this case commands/inventory.js and commands/buy.js)
command.execute(message, Users);
, который используется в командах, которые не работают:
commands/inventory.js
module.exports = {
execute: async (message, Users) => {
const target = message.mentions.users.first() || message.author;
const user = await Users.findByPrimary(target.id);
}
};
commands/buy.js
module.exports = {
execute: async (message, Users) => {
const user = await Users.findByPrimary(message.author.id);
}
};
Я пытался использовать findById
, но это приводит к тому же сообщению об ошибке. Я также попытался добавить следующий код в функцию execute в командных файлах:
const Sequelize = require('sequelize);
const SQLite = require('sqlite3');
Единственное различие между моим кодом и вышеупомянутым учебником состоит в том, что я использую обработчик команд .
Все остальные функции Sequelize, такие как findAll
, работали.