Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error: Dialect needs to be explicitly supplied as of v4.0.0 #1068

Open
2 of 7 tasks
OhjeezwhathaveIdone opened this issue Jan 15, 2021 · 22 comments
Open
2 of 7 tasks

Comments

@OhjeezwhathaveIdone
Copy link

OhjeezwhathaveIdone commented Jan 15, 2021

Issue Description

'Error: Dialect needs to be explicitly supplied as of v4.0.0' is thrown when initialising sequelize via a destructured property whilst running 'npx sequelize-cli db:migrate'.

What are you doing?

I have a config.js which merges different sections of a config.json dependent on the environment so as to prevent repeated configurations, it exports the final, merged, configuration. Within the final configuration is a sub object of 'dev' called 'database'.

Sequelize's .sequelizerc is unable to process this as the config paramter expects a file path, not an object and thus is not using the 'database' object and instead is using the whole object. When trying to run 'npx sequelize-cli db:migrate' the error above is thrown.

If I change config.js to instead export 'finalConfig.database', 'npx sequelize-cli db:migrate' works without issue.

What do you expect to happen?

For 'npx sequelize-cli db:migrate' to migrate successfully.

What is actually happening?

An error is thrown.

Sequelize CLI [Node: 15.5.1, CLI: 6.2.0, ORM: 6.3.5]

Loaded configuration file "config\config.js".

ERROR: Error: Dialect needs to be explicitly supplied as of v4.0.0

Additional context

config/config.json

{
  "dev": {
    "database": {
      "name": "name",
      "host": "host",
      "username": "user",
      "password": "pass",
      "dialect": "postgres"
    }
  },
  "live": {
    "database": {
      "name": "name1",
      "username": "username1",
      "password": "password1"
    }
  }
}

Works
config/config.js

const _ = require('lodash');
const config = require('./config.json');
const defaultConfig = config.dev;
const environment = process.env.NODE_ENV || 'dev';
const environmentConfig = config[environment];
const finalConfig = _.merge(defaultConfig, environmentConfig);

module.exports = finalConfig.database;

Does not work
config/config.js

module.exports = finalConfig;

Environment

  • Sequelize version: 6.3.5
  • Node.js version: 15.5.1
  • Operating System: Windows 10

Issue Template Checklist

How does this problem relate to dialects?

  • I think this problem happens regardless of the dialect.
  • I think this problem happens only for the following dialect(s):
  • I don't know, I was using postgres, with connector library version 8.5.1 and database version 11.6 (ElephantSQL)

Would you be willing to resolve this issue by submitting a Pull Request?

  • Yes, I have the time and I know how to start.
  • No, I don't have the time, although I believe I could do it if I had the time...
  • Yes, I have the time but I don't know how to start, I would need guidance.
  • No, I don't have the time and I wouldn't even know how to start.
@OhjeezwhathaveIdone
Copy link
Author

I lied when I said I didn't have time and wouldn't even know how to start, I wouldn't let this beat me.

I've created a pull request, as above, that will allow objects to be exported from .sequelizerc.

In my case, and with the pull request, the below .sequelizerc now meets my expected outcome:

const path = require('path');
const { database } = require('./config/config');

module.exports = {
  'config': database,
  'models-path': path.resolve('./models'),
  'seeders-path': path.resolve('./seeders'),
  'migrations-path': path.resolve('./migrations')
};

@Asharudheen-VNC
Copy link

Use this
export NODE_ENV=development

@OGUNSOLA
Copy link

Hello, @Asharudheen-VNC , i have the same issue, where do I use your suggestion ?

@iamgabrielsoft
Copy link

Making use of .sequelizerc file , which am currently having have not solved the problem. Thank you for making a pull request on this

@rubenaprikyan
Copy link

@iamgabrielsoft I have the same problem

@github-actions
Copy link

This issue has been automatically marked as stale because it has been open for 7 days without activity. It will be closed if no further activity occurs. If this is still an issue, just leave a comment or remove the "stale" label. 🙂

@github-actions github-actions bot added the stale label Oct 28, 2021
@OhjeezwhathaveIdone
Copy link
Author

Not stale.

@github-actions github-actions bot removed the stale label Oct 31, 2021
@moigamijunior
Copy link

Some news? I have the same issue when running with pm2. Running with npm start ou nodemon works fine. Some clue?

@github-actions
Copy link

This issue has been automatically marked as stale because it has been open for 14 days without activity. It will be closed if no further activity occurs within the next 14 days. If this is still an issue, just leave a comment or remove the "stale" label. 🙂

@github-actions github-actions bot added the stale label Nov 16, 2021
@ephys ephys transferred this issue from sequelize/sequelize Apr 16, 2022
@Amit-Dagar
Copy link

Check project .env file if you are using environment variables, I forgot to set dialect after setting-up .env file properly its working fine

@bastianhilton
Copy link

I had this issue as well, somewhere sequelize is looking for a development environment, once i added development this error went away. My config file now shows development, test, and production options.

@WikiRik
Copy link
Member

WikiRik commented Jul 24, 2022

I had this issue as well, somewhere sequelize is looking for a development environment, once i added development this error went away. My config file now shows development, test, and production options.

The default environment that the CLI uses is development. This can be changed in the .env file

@rosalyneduarte
Copy link

Tentei todas essas opções e o erro permanece, o que poderia tentar?

@rosalyneduarte
Copy link

Esse erro sumiu depois de colocar esse trecho no index.js

const dbConfig = require("../config/db.config")['development']

@omargarciagiorgini
Copy link

Hello, Does someone knows how to make the import version of this: "const dbConfig = require("../config/db.config")['development']" ??

@rosalyneduarte
Copy link

Arquivo config.js
{
"development": {
"database": {
"name": "name",
"host": "host",
"username": "user",
"password": "pass",
"dialect": "postgres"
},
"dev": {
"database": {
"name": "name",
"host": "host",
"username": "user",
"password": "pass",
"dialect": "postgres"
}
},
"live": {
"database": {
"name": "name1",
"username": "username1",
"password": "password1"
}
}
}

Arquivo .env
NODE_ENV= development,
"name": "name",
"host": "host",
"username": "user",
"password": "pass",
"dialect": "postgres"

@Cyebukayire
Copy link

Hello, Does someone knows how to make the import version of this: "const dbConfig = require("../config/db.config")['development']" ??

Same issue

@suhaibkhawaja2000
Copy link

Basically in this issue Sequelize cannot find the environment on which it have to perform action. By default sequelize look for value of NODE_ENV like if you have set "development" in your NODE_ENV , sequelize will look for "development" in object define in config.js file. In your case set (in .env file)
NODE_ENV='dev' or NODE_ENV="dev"
if you want to configure dev write above in your .env file else set the required environment in NODE_ENV.

in .env file

NODE_ENV= development

in config.js

require('dotenv').config()
module.exports={
"development": {
"username": process.env.DATABASE_USER,
"password": process.env.DATABASE_PASSWORD,
"database": process.env.DATABASE_NAME,
"host": process.env.DATABASE_HOST,
"dialect": 'postgres',
},
}

@sanryuu03
Copy link

Basically in this issue Sequelize cannot find the environment on which it have to perform action. By default sequelize look for value of NODE_ENV like if you have set "development" in your NODE_ENV , sequelize will look for "development" in object define in config.js file. In your case set (in .env file) NODE_ENV='dev' or NODE_ENV="dev" if you want to configure dev write above in your .env file else set the required environment in NODE_ENV.

in .env file

NODE_ENV= development

in config.js

require('dotenv').config() module.exports={ "development": { "username": process.env.DATABASE_USER, "password": process.env.DATABASE_PASSWORD, "database": process.env.DATABASE_NAME, "host": process.env.DATABASE_HOST, "dialect": 'postgres', }, }

thanks bro, it's work for me use typescript in express js

maybe some one need, this my config/db.ts

`import dotenv from 'dotenv'
import { Dialect, Sequelize } from 'sequelize'

dotenv.config()

let dbName = process.env.database_production
let username = process.env.username_production
let password = process.env.password_production
let dbHost = process.env.host_production
let dbDriver = process.env.dialect_production

const env = process.env.NODE_ENV
if (env === 'development') {
dbName = process.env.database_development
username = process.env.username_development
password = process.env.password_development
dbHost = process.env.host_development
dbDriver = process.env.dialect_development
}

const db = new Sequelize(dbName as string, username as string, password, {
host: dbHost,
dialect: dbDriver as Dialect,
})

export default db
`

@filipeaguiars
Copy link

Basically in this issue Sequelize cannot find the environment on which it have to perform action. By default sequelize look for value of NODE_ENV like if you have set "development" in your NODE_ENV , sequelize will look for "development" in object define in config.js file. In your case set (in .env file) NODE_ENV='dev' or NODE_ENV="dev" if you want to configure dev write above in your .env file else set the required environment in NODE_ENV.

in .env file

NODE_ENV= development

in config.js

require('dotenv').config() module.exports={ "development": { "username": process.env.DATABASE_USER, "password": process.env.DATABASE_PASSWORD, "database": process.env.DATABASE_NAME, "host": process.env.DATABASE_HOST, "dialect": 'postgres', }, }

Just had this same issue. Resolved by following this steps.

Thanks!

@valens200
Copy link

I did all of those solutions you suggested, but none working.😭😭

@suhaibkhawaja2000
Copy link

suhaibkhawaja2000 commented Feb 8, 2024

I did all of those solutions you suggested, but none working.😭😭

Can you explain more what is your issue?
On the other note in recent vs code update its not updating the the .env values when we edit .env file , somehow every time it use the perviously assigned value even though project or vs code is restarted. Don't know why. its happening but its occurring only locally not on server. In thais case we need to use source .env in vs code terminal to configure the new values every time before running the project locally
.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests