Closed wachunei closed 7 years ago
El archivo src/models/index.js
es muy de configuración de la DB, y exporta el db
. Debería ir en src/db/index.js
También importarlo en src/app.js
Esos son los primeros comentarios que se me vienen a la mente
Y evitar tanto callback 😟
Lo que pasa es que sequelize lo genera así al hacer sequelize init
, y lo genera ahí porque ahí le dije (en el .sequelizerc
) que models
era el folder de los modelos. Y sobre los callback: así los genera sequelize, casi todos los cambios hasta ahora son generados por sequelize. 🤷♂️
@wachunei primer comentario que se me viene a la cabeza: "invocar a @raulmt para que nos cuente cómo se usa"? Yo jamás en la vida he usado sequelize :) ya… ahora miraré el resto…
respecto a models/index.js… es cierto que tiene mezcladas la conexión de BD junto a carga de modelos… pero como dijo @wachunei es como sequelize genera el archivo… y es más, es parte de cómo ellos proponen que se use sequelize con express. Quizá, después de todo, nuestra carpeta db
es más de viudos de Rails que de otra cosa… porque efectivamente es raro tener una carpeta db y luego iniciar la conexión de db en el index de otra carpeta. Una opción sería seguir algo más cercano a lo que hacen en ese repo y tener models, migrations y seeds directamente en src. Quizá la config de la base de datos podría estar en src/config/database.js, pues igual me molesta que sólo tenga config de database y se llame simplemente "config"…
Me gusta lo último que dijo @raulmt, matar la carpeta db
Apliqué los cambios que mencioné en la revisión, pero no agregué koa-orm, pues es medio chanta ese package. En lugar de esto último, dejé el setup con sequelize directo como lo estaba haciendo @wachunei y agregué una property orm
al ctx
con un pequeño middleware.
Además, hice la config un poco más amigable, con un js que carga los datos de env variables.
Ojo que creo que necesitaremos hacer un fork de sequelize-cli y usar nuestro fork, pues la versión actual genera cosas de una forma que no se alínea ni con nuestro linter y, peor aún, ni con la versión de sequelize que estamos usando (v4), pues crea modelos con un atributo classMethods que ya no es soportado en sequelize v4. Pero creo que eso queda para otro PR :\
Hola, en la rama feature-sequelize estuve jugando con sequelize, les quiero hacer un resumen de lo que aprendí en este rato:
sequelize-cli
se instala globalmente solamente por conveniencia (se podría ejecutar todo igual connode_modules/.bin/sequelize
.sequelizerc
es leído porsequelize-cli
, para saber dónde buscar las migraciones, crear los modelos, etc.Uno debe iniciar el ambiente con
sequelize init
, esto genera un archivo base de configuración (según lo especificado en el punto anterior) y además sobre escribe el archivo donde se definieron los modelos (models/index.js
) con algo así (versión antigua):En el fondo lee los modelos y los agrega a un objeto
db
(que al final es exportado), junto con ejecutar la funciónassociate()
que aún no investigo que hace.El punto importante acá es que también deja la instancia de
Sequelize
en la propiedadsequelize
que se exporta (junto con el constructorSequelize
enSequelize
), por lo que me surgió la duda si es esa instancia la que usaremos a lo largo de la app. Por ejemplo, modifiqué el script inicial para que solamente partiera si tenía conexión con la dbAcá invoco a @raulmt para que nos cuente cómo se usa.
Esto genera la migración y el archivo
models/entry.js
correspondiente.