This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Проблема ORM Sequelize

Brabus7

Участник портала
14 Окт 2021
32
6
65
Подключил Sequelize (СУБД MySQL)
Создал модель accounts в которой есть 3 поля.

JavaScript:
module.exports = (Sequelize, DataTypes) => {
    const accounts = Sequelize.define('accounts', {
        id: {
            type: DataTypes.INTEGER,
            autoIncrement : true,
            primaryKey : true,
            allowNull : false         
        },

        login: {
            type:  DataTypes.STRING,
            allowNull : false
        },

        pass: {
            type:  DataTypes.STRING,
            allowNull : false
        }
    }, {});
    return accounts;
}

После чего добавил команду (для теста) в которой создал .create

JavaScript:
db.Accounts.create({
        login: login,
        pass: password,
    });

Но при запуске сервера получаю

cannot read property 'create' of undefined
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28
Но ведь ты определяешь const accounts, а используешь .Accounts, разве не в этом ошибка? Переменные accounts от Accounts отличаются и Accounts у тебя не существует.
 

Brabus7

Участник портала
14 Окт 2021
32
6
65
Пробовал я уже и accounts, и без db.
Еще будут идеи почему .create не находит?
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28
Пробовал я уже и accounts, и без db.
Еще будут идеи почему .create не находит?
Не находит не .create, а ты обращаешься к undefined. Оно не видит твою переменную, то есть либо db = undefined, либо db.accounts = undefined. Ищи проблему до .create, где ты обозначаешь db, сверяй его.
 

Brabus7

Участник портала
14 Окт 2021
32
6
65
я уй его знает как это подключить, ну его науй буду без ОРМ.
Спустя 4 часа **** методов тыка.
 

Brabus7

Участник портала
14 Окт 2021
32
6
65
Берешь из гайдов, ниуя, решил взять уже с готового сервера пример, там еще больше блть зависимостей.
 

kurlikmurlik

Участник портала
18 Сен 2021
91
12
53
Ты экспортируешь функцию и вообще в принципе делаешь всё не особо правильно.
ORM да, говно, не используй удобные библиотеки, которые упрощают разработку. Говно говно
 

Brabus7

Участник портала
14 Окт 2021
32
6
65
Я вижу ты гуру в этом, написал бы пару полезных функций. Диванных мидлов на форуме хватает.
 

Brabus7

Участник портала
14 Окт 2021
32
6
65
Покажи как ты определяешь переменную db.

В index.js
JavaScript:
global.db = require('./db.js');

JavaScript:
"use strict";

const Sequelize = require('sequelize');
const fs = require("fs");
let path = require('path');
global.Op = Sequelize.Op;

module.exports = {
    sequelize: null,
    Models: {},
    connect: function(callback) {
        console.log("[DATABASE] db connect...");
        this.sequelize = new Sequelize(mp.config.dbName, mp.config.dbUser, mp.config.dbPassword, {
            host: mp.config.dbHost,
            dialect: 'mysql',
            logging: false,
        });
        this.loadModels();
        callback();
    },
    loadModels: function() {
        console.log("[DATABASE] load models...");
        fs.readdirSync(path.dirname(__dirname)).forEach(dir => {
            if (dir != 'base' && !ignoreModules.includes(dir) && fs.existsSync(path.dirname(__dirname)+ "/" + dir + '/db')) {
                console.log(`[DATABASE] --${dir}`);
                fs.readdirSync(path.dirname(__dirname)+ "/" + dir + '/db').forEach(file => {
                    console.log(`[DATABASE] -----${file}`);
                    let model = require(path.dirname(__dirname)+ "/" + dir + '/db/' + file);
                    this.Models[model.name] = model;
                });
            }
        });
        for (var name in this.Models) {
            var model = this.Models[name];
            if (model.associate) model.associate(this.Models);
        }
        this.sequelize.sync();
        console.log("[DATABASE] loaded.");
    }
};

JavaScript:
"use strict";
const Sequelize = require('sequelize');

/// Модель аккаунта игрока
module.exports = (sequelize, DataTypes) => {
    const model = sequelize.define("Account", {
        id: {
            type: DataTypes.INTEGER(64),
            primaryKey: true,
            autoIncrement: true
        },
        login: {
            type: DataTypes.STRING(64),
            allowNull: false
        },
        pass: {
            type: DataTypes.STRING(64),
            allowNull: false
        },
    },
    {
        timestamps: false
    });
    return model;
};


JavaScript:
db.Models.Account.create({
        login: login,
        pass: password
    });
 

Brabus7

Участник портала
14 Окт 2021
32
6
65
Способ выше переписан с классика, но все равно имеет такую же ошибку.

JavaScript:
cannot read property 'create' of undefined
 

kurlikmurlik

Участник портала
18 Сен 2021
91
12
53
Мидлы работают за деньги. А решать за тебя полностью проблему я не хочу, вкратце написал, что у тебя всё говно.
 

Brabus7

Участник портала
14 Окт 2021
32
6
65
Я тебя прекрасно понимаю. Я вкратце написал что ты как человек говно. Ибо в твоих сообщениях на форуме только высмеивание. ЧСВ свой погаси и станешь человеком может.
 

Brabus7

Участник портала
14 Окт 2021
32
6
65
Ты видишь в темы есть префикс, проблема, если ты заходишь сюда написать что у него всё говно, при этом не дав никаких подсказок, стоит задуматься что у тебя в голове тоже самое.
 

UchihaMadara

Старожил
FrontEnd developer
27 Окт 2020
572
212
121
@Brabus7 проблема в том, что ты не видишь, что импортируется и что экспортируется.
Ты экспортируешь не объект, а функцию, которая вернет объект
 

kurlikmurlik

Участник портала
18 Сен 2021
91
12
53
У меня нет чсв. Я помогаю людям и делаю это за просто так. А когда я человеку сказал в чём у него проблема, а он вместо этого в ответ начинает оперировать тем, что вообще не относится к сути делу, я понимаю, что там, на другой стороне, сидит школьник-мамкин-программист, который вместо изучения доков и гугления, сидит на форуме и задаёт тупые вопросы, и я начинаю ему отвечать рофлами. Прости, но ты дурачелла.