findByPrimary не является функцией - PullRequest
1 голос
/ 25 марта 2019

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, работали.

1 Ответ

1 голос
/ 25 марта 2019

Пожалуйста, используйте findByPk вместо findByPrimary См. Следующие документы: http://docs.sequelizejs.com/manual/models-usage.html

Users.findByPk(id)
...