IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NodeJS Discussion :

seeder pour getter/setter dans sequelize mysql


Sujet :

NodeJS

  1. #1
    Membre du Club Avatar de arwin
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Points : 42
    Points
    42
    Par défaut seeder pour getter/setter dans sequelize mysql
    Bonjour,
    j'utilise seqeulize-cli et mysql pour implementer 2 tables : Users et Posts. J'ai réalisé les modèles, les relations, les migrations et les seeders. Cependant j'ai un soucis au niveau des likers/dislikers qui sont des tableaux contenant les utilisateurs qui ont "liké"/"disliké" le post. J'ai lu que le type DataTypes.Array n'existe que pour postgres et que pour mysql il faut utiliser une solution de contournement (à écrire dans le fichier migration) comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    favColors: {
    type: Sequelize.STRING,
    allowNull: false,
    get() {
        return this.getDataValue('favColors').split(';')
    },
    set(val) {
       this.setDataValue('favColors',val.join(';'));
    },
    J'ai donc 2 questions qui sont liées :
    1- qu'en est-il du fichier seeders ? Voici mes fichiers de migration et de seeder. Avez-vous une idée de la façon d'obtenir le tableau des likers et des dislikers dans le fichier seeder ?
    2- le code ci-dessous donne un résultat, ma base de données est remplie mais avec likers/dislikers qui sont des nombres, pas un tableau. Et lorsque j'utilise postman pour créer un nouveau Post, cela me donne une erreur :
    '(node:6148) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'split' of undefined'
    fichier de migration pour Users :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    'use strict';
     
    module.exports = {
        up: async(queryInterface, Sequelize) => {
            await queryInterface.createTable('Users', {
                id: {
                    allowNull: false,
                    autoIncrement: true,
                    primaryKey: true,
                    type: Sequelize.INTEGER
                },
                firstName: {
                    type: Sequelize.STRING
                },
                familyName: {
                    type: Sequelize.STRING
                },
                email: {
                    type: Sequelize.STRING
                },
                password: {
                    type: Sequelize.STRING
                },
                role: {
                    type: Sequelize.STRING
                },
                photoUrl: {
                    type: Sequelize.STRING
                },
                createdAt: {
                    allowNull: false,
                    type: Sequelize.DATE
                },
                updatedAt: {
                    allowNull: false,
                    type: Sequelize.DATE
                }
            });
        },
        down: async(queryInterface, Sequelize) => {
            await queryInterface.dropTable('Users');
        }
    };

    fichier de seeder pour Users :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    'use strict';
     
    const faker = require('faker');
    const bcrypt = require('bcrypt');
     
    module.exports = {
        up: async(queryInterface, Sequelize) => {
            let users = [];
            let roles = ['ADMIN', 'MODER', 'BASIC'];
     
            for (let i = 0; i < 25; i++) {
                let r = Math.random().toString(36).substring(7);
                let pwdHashed = await bcrypt.hash(r, 10);
                //let userRole = roles[(Math.random() * roles.length) | 0];
                let userRole = roles[Math.floor(Math.random() * roles.length)];
                users.push({
                    firstName: faker.name.firstName(),
                    familyName: faker.name.lastName(),
                    email: faker.internet.email(),
                    password: pwdHashed,
                    role: userRole,
                    photoUrl: faker.image.avatar(),
                    createdAt: new Date(),
                    updatedAt: new Date()
                });
            };
            await queryInterface.bulkInsert('Users', users, {})
        },
     
        down: async(queryInterface, Sequelize) => {
            await queryInterface.bulkDelete('Users', null, {});
        }
    };
    fichier migration pour Posts :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    'use strict';
    module.exports = {
        up: async(queryInterface, Sequelize) => {
            await queryInterface.createTable('Posts', {
                id: {
                    allowNull: false,
                    autoIncrement: true,
                    primaryKey: true,
                    type: Sequelize.INTEGER
                },
                posterId: {
                    type: Sequelize.UUID,
                    referes: {
                        model: "Users",
                        key: "id"
                    }
                },
                title: {
                    type: Sequelize.STRING
                },
                content: {
                    type: Sequelize.TEXT
                },
                imageUrl: {
                    type: Sequelize.STRING
                },
                videoUrl: {
                    type: Sequelize.STRING
                },
                likers: {
                    type: Sequelize.STRING,
                    get() {
                        return this.getDataValue('likers').split(';')
                    },
                    set(val) {
                        this.setDataValue('likers', val.join(';'));
                    },
                    required: true
                },
                dislikers: {
                    type: Sequelize.STRING,
                    get() {
                        return this.getDataValue('dislikers');
                    },
                    set(val) {
                        this.setDataValue('dislikers', dislikers.push(val));
                    },
                    required: true
                },
                likes: {
                    type: Sequelize.INTEGER,
                    default: 0
                },
                dislikes: {
                    type: Sequelize.INTEGER,
                    default: 0
                },
                createdAt: {
                    allowNull: false,
                    type: Sequelize.DATE
                },
                updatedAt: {
                    allowNull: false,
                    type: Sequelize.DATE
                }
            });
        },
        down: async(queryInterface, Sequelize) => {
            await queryInterface.dropTable('Posts');
        }
    };

    fichier seeder pour Posts :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    'use strict';
    const faker = require('faker');
     
    module.exports = {
        up: async(queryInterface, Sequelize) => {
            let posts = [];
            let fakeLikersDislikers = [];
     
            for (let i = 0; i < 25; i++) {
                posts.push({
                    posterId: faker.datatype.uuid(),
                    title: faker.lorem.sentence(),
                    content: faker.lorem.sentence(),
                    imageUrl: faker.image.city(),
                    videoURL: faker.image.nature(),
                    //videoURL: `${faker.image.nature()}?random=${Date.now()}`,
     
     
                    likers: fakeLikersDislikers.push(faker.name.findName()),
                    dislikers: fakeLikersDislikers.push(faker.name.findName()),
                    likes: faker.datatype.number(),
                    dislikes: faker.datatype.number(),
                    createdAt: new Date(),
                    updatedAt: new Date(),
                });
            };
            await queryInterface.bulkInsert('Posts', posts, {})
        },
     
        down: async(queryInterface, Sequelize) => {
            await queryInterface.bulkDelete('Posts', null, {});
        }
    };
    La requête post pour créer un nouveau Post avec Postman :
    Nom : Capture.png
Affichages : 121
Taille : 23,8 Ko

    mais je reçois cette erreur dans la console :
    (node:6148) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'split' of undefined'
    Merci d'avance

  2. #2
    Membre du Club Avatar de arwin
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Points : 42
    Points
    42
    Par défaut
    Après plusieurs essais j'ai réussi à utiliser postman mais j'ai toujours des problèmes avec les likers/dislikers .. je n'ai pas de tableau : juste un chiffre

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/05/2012, 12h22
  2. Templates javadoc pour getter/setter
    Par Righetto Dominique dans le forum NetBeans
    Réponses: 0
    Dernier message: 02/01/2009, 17h55
  3. Réponses: 1
    Dernier message: 31/01/2007, 12h59
  4. Réponses: 2
    Dernier message: 02/08/2006, 11h32
  5. [SGBD] Parser une variable pour mettre données dans bdd MySQL
    Par winnie82 dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 15/03/2006, 18h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo