#Problema con Sequelize y ES Modules

1 messages · Page 1 of 1 (latest)

worthy flower
#
/**
 * import { Permission } from '../../models/index.js'; ---->>> De ésta manera falla
 * Error en terminal:
 * import { Permission } from '../../models/index.js';
            ^^^^^^^^^^
 *  SyntaxError: The requested module '../../models/index.js' does not provide an export named 'Permission'
 */

import Models from '../../models/index.js';
async function getPermissions() {
  return await Models.Permission.findAndCountAll({
    order: [['name', 'ASC']]
  });
}

export default {
  getPermissions
};
#

El archivo ../models/index.js es el siguiente

import fs from 'fs';
import path from 'path';
import Sequelize from 'sequelize';
import Config from '../config/index.js';
import { fileURLToPath } from 'url';
import { dirname } from 'path';

const { database, username, password } = Config.db;
const sequelize = new Sequelize(database, username, password, Config.db);

const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

const basename = path.basename(__filename);
const db = {};

fs.readdirSync(__dirname)
  .filter((file) => {
    return (
      file.indexOf('.') !== 0 &&
      file !== basename &&
      file.slice(-3) === '.js' &&
      file.indexOf('.test.js') === -1
    );
  })
  .forEach((file) => {
    import(path.join(__dirname, file))
      .then((module) => {
        const model = module.default(sequelize, Sequelize.DataTypes);
        db[model.name] = model;
      })
      .catch((error) => {
        console.error(`Error al importar el módulo ${file}: ${error}`);
      });
  });

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

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

export default db;

#

// Archivo ./models/Permission.js

import { Model } from 'sequelize';

export default (sequelize, DataTypes) => {
  class Permission extends Model {
    static associate(models) {}
  }
  Permission.init(
    {
      code: {
        allowNull: false,
        primaryKey: true,
        type: DataTypes.STRING,
        validate: {
          notContains: ' '
        }
      },
      name: {
        allowNull: false,
        type: DataTypes.STRING
      }
    },
    {
      sequelize,
      tableName: 'permission',
      underscored: true
    }
  );
  return Permission;
};

#

Lo que me dsconcierta es que si importo Models puedo acceder a Models.Permission, pero si lo hago utilizando {Permission} larga el error mensionado