由于方言对象对象不支持错误而导致迁移失败

时间:2018-07-04 15:56:21

标签: node.js express sequelize.js node-postgres sequelize-cli

背景

我正在创建一个样板快递应用程序。我已经使用pg和sequelize配置了数据库连接。当我添加cli并尝试运行sequlize db:migrate时,出现此错误,

  

错误:不支持方言[object Object]。支持的   方言:mssql,mysql,postgres和sqlite。

复制

生成一个新的快速申请。安装pg,pg-hstore,sequelize和sequelize-cli。

运行sequelize init

将config.js文件添加到从sequelize init创建的/ config路径中。

在config.js文件中创建连接。

更新由sequelize-cli创建的config.json文件。

运行sequelize db:migrate

示例

/config/config.js

const Sequelize = require('sequelize');
const { username, host, database, password, port } = require('../secrets/db');

const sequelize = new Sequelize(database, username, password, {
  host,
  port,
  dialect: 'postgres',
  operatorsAliases: false,
  pool: {
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000
  }
});

module.exports = sequelize;

/config/config.js

{
  "development": {
    "username": "user",
    "password": "pass",
    "database": "db",
    "host": "host",
    "dialect": "postgres"
  },
  "test": {
    "username": "user",
    "password": "pass",
    "database": "db",
    "host": "host",
    "dialect": "postgres"
  },
  "production": {
    "username": "user",
    "password": "pass",
    "database": "db",
    "host": "host",
    "dialect": "postgres"
  }
}

问题

我希望初始迁移能够运行,但是会出现错误,

  

错误:不支持方言[object Object]。支持的   方言:mssql,mysql,postgres和sqlite。

版本

Dialect: postgres 
Dialect version: "pg":7.4.3 
Sequelize version: 4.38.0
Sequelize-Cli version: 4.0.0

Package Json

"pg": "^7.4.3",
"pg-hstore": "^2.3.2",
"sequelize": "^4.38.0"

全局安装

npm install -g sequelize-cli

问题

现在主要的重写版本已经发布,可以续集了,添加方言以使迁移得以运行的正确方法是什么?

请务必注意,我的连接正常。我可以毫无问题地查询数据库,运行迁移时只有sequelize-cli不起作用。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。您需要进行一些更改。首先,我不确定为什么您有2个config/config.js文件。我认为第二个文件是config.json。遇到此问题的原因是

const sequelize = new Sequelize(database, username, password, {
  host,
  port,
  dialect: 'postgres',
  operatorsAliases: false,
  pool: {
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000
  }
});
这些代码行用于节点服务器访问db,而不用于sequlize-cli进行迁移。您需要严格遵循sequlize-cli指令。这是链接:instruction

我的代码: config/db.js

const {sequlize_cli} = require('../config.json');

module.exports = sequlize_cli;

config.json

{
    "sequlize_cli":{
        "development":{
            "username":"root",
            "password":"passowrd",
            "database":"monitor",
            "host":"127.0.0.1",
            "dialect": "postgres"
        },
        "test": {
            "username":"root",
            "password":"passowrd",
            "database":"monitor",
            "host":"127.0.0.1",
            "dialect": "postgres"
          },
          "production": {
            "username":"root",
            "password":"passowrd",
            "database":"monitor",
            "host":"127.0.0.1",
            "dialect": "postgres"
          }
    }
}

我猜的主要点是直接导出json对象,而不是导出sequelize对象。另外,这只是postges的问题,我在mysql上进行了测试,您的代码在mysql上可以正常使用。