从v4.0.0开始,需要明确提供方言

shu*_*ury 14 postgresql node.js sequelize.js

我一直在研究使用PostgreSQL数据库的NodeJS项目.我正在尝试实现迁移到数据库.另外,使用Sequelize.设置迁移文件夹和配置后,它会在运行db:migrate时抛出错误

错误是:"自v4.0.0起,需要明确提供方言"

JPe*_*ero 18

我的解决方案基于我为NODE_ENV变量设置的内容.

echo $NODE_ENV

如果您没有为该变量设置任何内容,请尝试使用以下内容进行设置:

export NODE_ENV=development

如果值存在,请确保你在你的config文件中的条目值.对我来说,我喜欢用local.所以我不得不将我的配置更新为:

{
 local: {
  username: 'root',
  password: null,
  database: 'database_dev',
  host: '127.0.0.1',
  dialect: 'postgres'
  },
 development: {
  username: 'root',
  password: null,
  database: 'database_dev',
  host: '127.0.0.1',
  dialect: 'postgres'
  },
  test: {
  username: 'root',
  password: null,
  database: 'database_test',
  host: '127.0.0.1',
  dialect: 'postgres'
 },
 production: {
  username: 'root',
  password: null,
  database: 'database',
  host: '127.0.0.1',
  dialect: 'postgres'
 }
}  
Run Code Online (Sandbox Code Playgroud)

  • 或者,您可以使用 **--env** 指定配置中的条目,`npx Sequelize-cli db:migrate:status --config "config.json" --env "development"` (7认同)
  • 我在哪里可以找到这个配置文件?我在node.js项目中从npm安装了sequelize,但我不知道它在哪里 (2认同)

Yas*_*has 15

事实证明,由于 typecipt 的转换/编译,我遇到了这个错误。

一点背景知识:我在打字稿项目中使用sequelize。数据库配置文件位于一个database.ts文件中。

const config = {
    development: {
        username: env.PG_USERNAME,
        password: env.PG_PASSWORD,
        database: 'sample_db',
        host: env.PG_HOST,
        port: env.PG_PORT,
        dialect: 'postgres',
    },
    test: {
        username: env.PG_USERNAME,
        password: env.PG_PASSWORD,
        database: 'sample_db',
        host: env.PG_HOST,
        port: env.PG_PORT,
        dialect: 'postgres',
    },
    production: {
        username: env.PG_USERNAME,
        password: env.PG_PASSWORD,
        database: 'sample_db',
        host: env.PG_HOST,
        port: env.PG_PORT,
        dialect: 'postgres',
    },
};

export default config;
Run Code Online (Sandbox Code Playgroud)

.sequelizerc文件中,我指向database.ts文件的转译版本,即dist/config/database.js文件。如下所示:

const path = require('path');

module.exports = {
    env: process.env.NODE_ENV || 'development',
    config: path.resolve('dist', 'config', 'database.js'),
    ...
};
Run Code Online (Sandbox Code Playgroud)

但是在检查文件的转译版本后database.ts,我注意到配置被导出为:

module.exports.default = config
Run Code Online (Sandbox Code Playgroud)

sequelize期望配置为module.exports.

因此,我database.ts通过将这一行附加到文件末尾来修改文件,这为我解决了这个问题。

...

module.exports = config;
Run Code Online (Sandbox Code Playgroud)


小智 8

检查方言一次。

const Sequelize = require('sequelize');
// Option 1: Passing parameters separately
const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: /* one of 'mysql' | 'mariadb' | 'postgres' | 'mssql' */
});
Run Code Online (Sandbox Code Playgroud)


小智 7

检查您的配置文件(环境名称)

{
  development: {
    username: 'root',
    password: null,
    database: 'database_development',
    host: '127.0.0.1',
    dialect: 'mysql'
  },
  test: {
    username: 'root',
    password: null,
    database: 'database_test',
    host: '127.0.0.1',
    dialect: 'mysql'
  },
  production: {
    username: 'root',
    password: null,
    database: 'database_production',
    host: '127.0.0.1',
    dialect: 'mysql'
  }
}
Run Code Online (Sandbox Code Playgroud)


小智 7

我遇到了同样的错误,并且我在代码中看到了这个错误。

  title: {
    type: Sequelize,
    allowNull: false,
  },
Run Code Online (Sandbox Code Playgroud)

用这个更改了我的代码,问题解决了:

  title: {
    type: Sequelize.STRING,
    allowNull: false,
  },
Run Code Online (Sandbox Code Playgroud)