【问题标题】:Unhandled rejection SequelizeDatabaseError: No database selected未处理的拒绝 SequelizeDatabaseError: 未选择数据库
【发布时间】:2019-09-19 14:11:33
【问题描述】:

我在我的 Express.js 应用程序中使用 MySQL 的 sequelize。

所有数据库凭据都存储在 .env 文件中并且是正确的:

DATABASE_NAME= mydb
DATABASE_USERNAME= root
DATABASE_PASSWORD= pass
DATABASE_HOST= localhost
DATABASE_PORT= 3306

database.js 文件:

require('dotenv').config();
const Sequelize = require('sequelize');

module.exports = new Sequelize(
    process.env.DATABAST_NAME,
    process.env.DATABASE_USERNAME,
    process.env.DATABASE_PASSWORD,
    {
        port: process.env.DATABASE_PORT,
        host: process.env.DATABASE_HOST,
        dialect: 'mysql'
    }
);

在用户模型中:

    const Sequelize = require('sequelize');
    const db = require('../config/database');

    module.exports = db.define('user', {
        username: {
            type: Sequelize.STRING,
            unique: true,
            primaryKey: true
        },
        email: {
            type: Sequelize.STRING,
            unique: true
        },
        password: {
            type: Sequelize.STRING
        },
    }, {
        freezeTableName: true,
        timestamps: false
    });

  user.findAll().then(data=>{
        console.log(data)
   });

数据库“mydb”只有一个表“用户”,应用程序启动时出现错误:

Executing (default): SELECT `username`, `email`, `password` FROM `user` AS `user`;
Unhandled rejection SequelizeDatabaseError: No database selected
    at Query.formatError (C:\Users\me\WebstormProjects\Backend\node_modules\sequelize\lib\dialects\mysql\query.js:241:16)
    at Query.handler [as onResult] (C:\Users\me\WebstormProjects\Backend\node_modules\sequelize\lib\dialects\mysql\query.js:48:23)
    at Query.execute (C:\Users\me\WebstormProjects\Backend\node_modules\mysql2\lib\commands\command.js:30:14)
    at Connection.handlePacket (C:\Users\me\WebstormProjects\Backend\node_modules\mysql2\lib\connection.js:449:32)
    at PacketParser.Connection.packetParser.p [as onPacket] (C:\Users\me\WebstormProjects\Backend\node_modules\mysql2\lib\connection.js:72:12)
    at PacketParser.executeStart (C:\Users\me\WebstormProjects\Backend\node_modules\mysql2\lib\packet_parser.js:75:16)
    at Socket.Connection.stream.on.data (C:\Users\me\WebstormProjects\Backend\node_modules\mysql2\lib\connection.js:79:25)
    at Socket.emit (events.js:189:13)
    at addChunk (_stream_readable.js:284:12)
    at readableAddChunk (_stream_readable.js:265:11)
    at Socket.Readable.push (_stream_readable.js:220:10)
    at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
  1. 我尝试使用以下代码测试 .env 文件,一切都可读:

    var config = require('dotenv').config(); console.log(config)

  2. 我尝试在 db.defind() 中的“用户”前面添加数据库名称,但遇到了同样的问题。

如果您有任何建议,请告诉我。

【问题讨论】:

  • 你打错了process.env.DATABAST_NAME应该是process.env.DATABASE_NAME
  • 我不敢相信。一个错字浪费了一整天。非常感谢!

标签: mysql node.js express sequelize.js dotenv


【解决方案1】:

初始化 Sequelize 时,您的数据库名称为空。看来您拼写错了 DATABASE。

module.exports = new Sequelize(
    process.env.DATABAST_NAME, // <--- This is an empty string or null.
    process.env.DATABASE_USERNAME,
    process.env.DATABASE_PASSWORD,
    {
        port: process.env.DATABASE_PORT,
        host: process.env.DATABASE_HOST,
        dialect: 'mysql'
    }
);

【讨论】:

    【解决方案2】:
    1. 使用命令从npm 安装dotenv 包:
    npm install dotenv
    
    1. 在位于“src”文件夹内的main.ts 文件中需要dotenv,方法是添加以下行:
    import * as dotenv from "dotenv";
    dotenv.config();
    
    1. 再次运行您的项目。

    【讨论】:

      猜你喜欢
      • 2016-07-21
      • 2018-10-15
      • 1970-01-01
      • 2018-12-18
      • 2020-07-08
      • 2018-06-23
      • 2018-12-15
      • 1970-01-01
      • 2019-06-02
      相关资源
      最近更新 更多