Mon application express.js est sur un dyno heroku. J'ai créé quelques endpoints rest api pour les opérations crud (connecté à heroku-postgres db) et vérifié qu'ils fonctionnent avec Postman.
Mes problèmes ont commencé après avoir essayé d'incorporer des migrations. Je ne suis qu'un jeune développeur, alors faites-moi savoir si je suis en train d'examiner des pistes mortes, et quelles autres informations je dois fournir pour diagnostiquer correctement ces messages d'erreur.
Démarrer les migrations avec sequelize model:create --name tableName --attributes ...
était bien.
En cours d'exécution sequelize db:migrate
L'erreur que je reçois est la suivante :
ERROR: Dialect needs to be explicitly supplied as of v4.0.0
Mon actuel config.json
est
{
"production": {
"use_env_variable": "DATABASE_URL",
"dialect": "postgres",
"dialectOptions": {
"ssl": {
"require": true
}
},
"ssl": true
}
}
et j'ai aussi spécifié le dialecte en models/index.js
(ceci a été généré avec config.json
dans le sequelize model:create...
commande)
require('dotenv').config();
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = 'production' || process.env.NODE_ENV;
const config = require(__dirname + '/../config/config.json')[env];
const db = {};
const sequelize = new Sequelize(process.env.DATABASE_URL, {
logging: false,
dialect: "postgres",
dialectOptions: {
ssl: true,
}
});
// let sequelize;
// if (config.use_env_variable) {
// sequelize = new Sequelize(process.env[config.use_env_variable], config);
// } else {
// sequelize = new Sequelize(config.database, config.username, config.password, config);
// }
Si const sequelize = ...
est commenté, et let sequelize; ...
est utilisé à la place, la même erreur de dialecte se produit.
Il est intéressant de noter que lorsque je définis la variable shell export NODE_ENV=production
une nouvelle erreur se produit - ERROR: Error parsing url: undefined
.
Cela me laisse d'autant plus perplexe que je pensais qu'il était déjà défini dans la directive sur la protection des données. const env = ...
ligne dans index.js
.
J'ai alors essayé de spécifier l'url dans la commande de migration - sequelize db:migrate --url 'postgres://username:password@localhost/test1'
.
L'url que j'ai fournie a fonctionné pour les tests CRUD via Postman, ainsi que pour la collecte des données du formulaire via le front-end.
Maintenant l'erreur est ERROR: connect ECONNREFUSED 127.0.0.1:5432
. Je ne sais pas comment procéder à partir de maintenant, et je ne suis pas sûr que les mesures que j'ai prises depuis l'erreur de dialecte soient les bonnes pour résoudre ces problèmes.
Mes questions portent en fait sur la cause de ces erreurs.
1) Où dois-je encore préciser le dialecte ?
2) Pourquoi l'erreur de dialecte disparaît-elle lorsque je export NODE_ENV
même si l'environnement est déjà spécifié dans index.js
?
3) De même pour l'url, pourquoi l'url de mon site Web ne peut-elle pas être utilisée ? .env
a obtenu un résultat avec require('dotenv').config()
être accepté ?