Soy nuevo para expresar.
Quiero importar archivos para secuenciar y declarado:
const model = sequelize.import(path.join(__dirname, file)) ^Devolvió el siguiente tipo de error
TypeError: sequelize.import is not a functionY luego, código editado para
var model = require(path.join(__dirname, file))(sequelize, Sequelize); ^Entonces el error es:
TypeError: require(...) is not a functionCreo que es el error al importar cosas....
Aquí está mi código de archivo completo:
const fs = require('fs'); const path = require('path'); const Sequelize = require('sequelize'); const config = require('../config/config'); const db = {} var __dirname = path.resolve(); const sequelize = new Sequelize( config.db.database, config.db.user, config.db.password, config.db.options ) fs .readdirSync(__dirname) .filter((file) => file !== 'index.js' ) .forEach((file) => { //const model = sequelize.import(path.join(__dirname, file)) var model = require(path.join(__dirname, file))(sequelize, Sequelize); db[model.name] = model }) db.sequelize = sequelize db.Sequelize = Sequelize module.exports = dbEn cualquier caso, como el mío, tenía archivos vacíos en mi directorio de modelos. require(...) no es una función simplemente porque la lógica del índice itera e importa archivos que no exportan nada del directorio de modelos.
en mi caso reemplacé este código
const model = require(path.join(__dirname, file))(secuela, Sequelize.DataTypes);
con este :
const model = require(path.join(__dirname, file)).default(sequelize, Sequelize.DataTypes);
Las personas que dicen que la degradación no funcionó: ¡Cuidado con su archivo index.js!
Para mí, bajando a ^ 5.22.3 y cambiando
module.exports = (sequelize, DataTypes) => { sequelize.define('User', { email: { type: DataTypes.STRING, unique: true }, password: { type: DataTypes.STRING } }) }para
module.exports = (sequelize, DataTypes) => sequelize.define('User', { email: { type: DataTypes.STRING, unique: true }, password: DataTypes.STRING })trabajó. Ese fue el problema para mí.
Esto podría ayudar a alguien más, en la versión 6.6.5 está en desuso y debe reemplazarlo con sequelize.define .
A partir de ahora, pude solucionar el problema degradando la versión del módulo de secuenciación en su paquete.json a "sequelize": "^5.22.3", . hazme saber si también está arreglado en tu lado.
Editar: cualquier versión de secuela en < 6.0.0 debería funcionar normalmente
El error se debe al uso del objeto de importación secuencial. En su lugar, debe usar la función de solicitud require incorporada de Node. Así que cambie esta línea en sus models/index.js :
const model = sequelize['import'](path.join(__dirname, file))para:
const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes) También puede simplemente regenerar el directorio de models y leer sus modelos sin el antiguo index.js si lo encuentra más fácil:
mv models models.bak && sequelize init:models && mv models.bak/index.js models.bak/index.js.bak && mv models.bak/* models/ && rm models.bakEse trazador de líneas solucionará su problema si tiene instalado globalmente Sequelize-cli. Si no lo haces, puedes usar este:
npm i --save-dev sequelize-cli && mv models models.bak && npx sequelize init:models && mv models.bak/index.js models.bak/index.js.bak && mv models.bak/* models/ && rm models.bak Es posible que también deba actualizar su carpeta de configuración. Utilizo una configuración de JavaScript para inyectar ENV, por lo que tuve que agregar para cambiar mi línea const config = require(... para reflejar eso. Si usó uno de mis revestimientos, su antiguo archivo models/index.js ahora está en el índice .js.bak si necesita obtener elementos personalizados de él.
Compruebe si ha exportado el modelo utilizando la antigua sintaxis de JavaScript.
En mi caso bastó con cambiar el código de:
export default (sequelize, DataTypes) => { ... }para
module.exports = (sequelize, DataTypes) => { ... }