Sequelize 引发的 “Unknown database” 异常及解决方式

前言

Sequelize 是 Node.js 中使用最广泛的 ORM 框架之一,它提供了对多种关系型数据库的支持,包括 MySQL、PostgreSQL、SQLite 等。在使用 Sequelize 连接数据库时,经常会遇到 “Unknown database” 异常,本文将详细介绍这种异常的原因、解决方式以及如何避免。

异常原因

当使用 Sequelize 连接 MySQL 数据库时,如果数据库不存在,或者 Sequelize 的配置文件中指定的数据库名称与实际的数据库名称不一致,就会抛出 “Unknown database” 异常。下面是一个示例代码:

const Sequelize = require('sequelize');

const sequelize = new Sequelize('non_existing_database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql',
});

sequelize.authenticate()
  .then(() => {
    console.log('Connection has been established successfully.');
  })
  .catch((err) => {
    console.error('Unable to connect to the database:', err);
  });

在上面的代码中,我们故意将数据名称写成了 non_existing_database,当执行 sequelize.authenticate() 方法时,系统抛出以下异常:

可以看到,SequelizeConnectionError 异常的 message 属性包含了错误提示 “Unknown database 'non_existing_database'”。

解决方式

出现 “Unknown database” 异常时,解决方式很简单,只需要确认 MySQL 数据库确实存在,并且与 Sequelize 的配置文件中指定的数据库名称一致即可。如果不一致,可以将配置文件的名称修改成实际的数据库名称,例如:

const Sequelize = require('sequelize');

const sequelize = new Sequelize('real_database_name', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql',
});

sequelize.authenticate()
  .then(() => {
    console.log('Connection has been established successfully.');
  })
  .catch((err) => {
    console.error('Unable to connect to the database:', err);
  });

上面的示例代码中,我们将 sequelize 构造函数的第一个参数修改成了实际的数据库名称 real_database_name,这样执行 sequelize.authenticate() 方法就能成功连接到数据库了。

避免方法

为了避免 “Unknown database” 异常的出现,我们需要做以下几步:

  1. 在 MySQL 数据库中创建一个新的数据库(如果尚未创建)。
  2. 确认 Sequelize 的配置文件中的数据库名称与实际数据库名称一致。
  3. 在运行时动态创建 Sequelize 实例时,避免写死数据库名称,而是使用配置文件中的名称。

第三步的示例代码如下:

const Sequelize = require('sequelize');

const config = {
  db: {
    name: 'real_database_name',
    username: 'username',
    password: 'password',
    host: 'localhost',
    dialect: 'mysql',
  },
};

const sequelize = new Sequelize(config.db.name, config.db.username, config.db.password, {
  host: config.db.host,
  dialect: config.db.dialect,
});

sequelize.authenticate()
  .then(() => {
    console.log('Connection has been established successfully.');
  })
  .catch((err) => {
    console.error('Unable to connect to the database:', err);
  });

可以看到,上面的示例代码中,我们将数据库的名称、用户名、密码等配置信息写在了一个对象 config 中,并在运行时从中读取数据库名称等参数。这样可以避免写死数据库名称的错误,提高了代码的灵活性和可读性。

总结

“Unknown database” 异常是使用 Sequelize 连接 MySQL 数据库时经常遇到的问题,出现异常的原因通常是配置文件中指定的数据库名称与实际数据库名称不一致,或者数据库不存在。为了避免这种异常的出现,我们需要在配置文件中定义正确的数据库名称,并在运行时从中读取,并避免写死数据库名称。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6594d503eb4cecbf2d91794e


纠错反馈