node.jssequelize.js

Error("No Sequelize instance passed") No Sequelize instance passed


Hello can somebody help me with this ? I was doing my controllers and I can access to my model like this "const { User } = require("../models/User");" but than when I send my request I had this message "TypeError: Cannot read property 'create' of undefined" so something was missing. So I change my call model to this "const { User } = require("../models");". And I went on my model index.js (so connection sequelize) and I add fs function and Objectif.key. After all those changes I have the error "No Sequelize instance passed".

So maybe somebody can help with this because I don't see the problem

So this is my model index.js

//sequelize importe
const fs = require("fs");
const path = require("path");
const Sequelize = require("sequelize");
const db = {};
const basename = path.basename(__filename);

let sequelize = new Sequelize("groupomania", "root", "root", {
  host: "localhost",
  dialect: "mysql",
});

sequelize
  .authenticate()
  .then(() => {
   console.log("Connection has been established successfully!");
  })
  .catch((err) => {
    console.log("Can't establish database connection:\n" + err);
  });


fs.readdirSync(__dirname)
  .filter((file) => {
    console.log( file.indexOf(".") !== 0 && file !== basename && file.slice(-3) === ".js");
    return (
      file.indexOf(".") !== 0 && file !== basename && file.slice(-3) === ".js"
    );
  })
  .forEach(file => {
    const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
    db[model.name] = model;
  });

Object.keys(db).forEach((modelName) => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

This is my model User.js

const { Model } = require("sequelize");

module.exports = (Sequelize, DataTypes) => {
  class User extends Model {
    toJSON() {
      return {
        ...this.get(),
        password: undefined,
      };
    }
  }
  User.init(
    {
      id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4 },
      nom: { type: DataTypes.STRING, allowNull: false },
      prenom: { type: DataTypes.STRING, allowNull: false },
      email: {
        type: DataTypes.STRING,
        allowNull: false,
        validate: { notNull: true, notEmpty: true, isEmail: true },
      },
      status: { type: DataTypes.STRING, allowNull: false },
      password: { type: DataTypes.STRING, required: true },
    },
    { Sequelize, tableName: "users", modelName: "User" }
  );
  return User;
};

My controllers/user.js

/*const bcrypt = require("bcrypt");
const jwt = require("jsonwebtoken");*/
const { User } = require("../models/User");

module.exports.signup = async (req, res) => {
  try {
    const user = await User.create({
      nom: "Jp",
      prenom: "remy",
      email: "remy@gmail.fr",
      password: "motdepasse",
    });
    res.status(200);
    throw Error("erreur est survenu");
  } catch (erreur) {
    console.log(erreur);
    res.status(200).json({ erreur });
  }
};

My route user

const express = require("express");
const router = express.Router();
const userCtrl = require("../controllers/user");

router.post("/signup", userCtrl.signup);
/*router.post("/login", userCtrl.login);*/

module.exports = router;

Thank you for any help! :)


Solution

  • The answer was that on my model user the "S" of sequelize must have an s minus