findByPrimary不是函数

时间:2019-03-25 06:31:12

标签: javascript sqlite sequelize.js discord discord.js

TL; DR

使用Sequelize时发现findByPrimary不是一个函数时出现错误。

我一直在this tutorial上关注如何使用Sequelize和SQLite 3为Discord机器人制作货币系统。但是,每当我在模型上使用findByPrimary时,都会出现以下错误:

(node:9182) UnhandledPromiseRejectionWarning: TypeError: Users.findByPrimary is not a function

Usersmodels/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');

我的代码与上述教程之间的唯一区别是我使用的是command handler

所有其他的Sequelize函数,例如findAll都在起作用。

1 个答案:

答案 0 :(得分:1)

请使用 findByPk 代替 findByPrimary 请参见对文档进行排序:http://docs.sequelizejs.com/manual/models-usage.html

Users.findByPk(id)