节点续集 (MSSQL) - 用户 '' 登录失败

arc*_*ryx 7 sql-server node.js sequelize.js tedious

然而,我遇到了几个关于这个问题的帖子,但似乎没有一个有实际答案。几个想法,但没有一个奏效。

在挖掘了 Sequelize 和 Tedious 包并看到我的配置正确传递之后,我不知所措。

我正在尝试针对 MSSQL 中的新数据库运行迁移。我使用我在这里使用的相同凭据连接到它没有问题,所以我知道这不是问题。

我有我的 config.js 正在拉环境变量。除了我的自定义控制台语句之外,这个文件是从 sequelize 自动生成的,并且在我的 sequelizerc 中被正确引用

require('dotenv').config()
console.log('[+] Loading database config...')

if (process.env.NODE_ENV === 'production') {
  console.log(`[+] Using database: ${process.env.PROD_DB_DATABASE}`)
} else if (process.env.NODE_ENV === 'development') {
  console.log(`[+] Using database: ${process.env.DEV_DB_DATABASE}`)
} else if (process.env.NODE_ENV === 'test') {
  console.log(`[+] Using database: ${process.env.TEST_DB_DATABASE}`)
} else if (process.env.NODE_ENV === 'local') {
  console.log(`[+] Using database: ${process.env.LOCAL_DB_DATABASE}`)
} else {
  console.log(`[-] CANNOT LOAD DATABASE FROM ENV: ${process.env.NODE_ENV}`)
  process.exit()
}

module.exports = {
  production: {
    database: process.env.PROD_DB_DATABASE,
    username: process.env.PROD_DB_USERNAME,
    password: process.env.PROD_DB_PASSWORD,
    host: process.env.PROD_DB_HOST,
    port: process.env.PROD_DB_PORT,
    dialect: process.env.PROD_DB_DIALECT,
    storage: process.env.PROD_DB_STORAGE,
    logging: false,
    dialectOptions: {
      instanceName: process.env.PROD_INSTANCE_NAME
    },
    pool: {
      min: 5,
      max: 1,
      acquire: 6000,
      idle: 6000
    }
  },
  development: {
    database: process.env.DEV_DB_DATABASE,
    username: process.env.DEV_DB_USERNAME,
    password: process.env.DEV_DB_PASSWORD,
    host: process.env.DEV_DB_HOST,
    port: process.env.DEV_DB_PORT,
    dialect: process.env.DEV_DB_DIALECT,
    storage: process.env.DEV_DB_STORAGE,
    logging: console.log,
    dialectOptions: {
      instanceName: process.env.DEV_INSTANCE_NAME,
      debug: true
    },
    pool: {
      min: 5,
      max: 1,
      acquire: 6000,
      idle: 6000
    }
  },
  test: {
    database: process.env.TEST_DB_DATABASE,
    username: process.env.TEST_DB_USERNAME,
    password: process.env.TEST_DB_PASSWORD,
    host: process.env.TEST_DB_HOST,
    port: process.env.TEST_DB_PORT,
    dialect: process.env.TEST_DB_DIALECT,
    storage: process.env.TEST_DB_STORAGE,
    logging: false
  },
  local: {
    database: process.env.LOCAL_DB_DATABASE,
    username: process.env.LOCAL_DB_USERNAME,
    password: process.env.LOCAL_DB_PASSWORD,
    host: process.env.LOCAL_DB_HOST,
    port: process.env.LOCAL_DB_PORT,
    dialect: process.env.LOCAL_DB_DIALECT,
    storage: process.env.LOCAL_DB_STORAGE,
    logging: false
  }
}
Run Code Online (Sandbox Code Playgroud)

当我运行迁移时,出现错误:

> node_modules/.bin/sequelize db:migrate

// ERROR: Login failed for user ''.
Run Code Online (Sandbox Code Playgroud)

如上所述,我深入研究了续集和乏味的内容,并且我的配置正确地通过了两者,所以我知道这不是 env var 问题或 NODE_ENV 问题。

有人在这里有任何想法吗?我正要把脸撞到键盘上。

Myl*_*les 9

旧版本的更多信息:
如果您使用的是sequelize@4,那么似乎有一个隐藏的要求您必须使用tedious@<=5.


您使用的是哪个版本的 Sequelize?如果是 v5,根据Sequelize v5 的文档

Sequelize 现在适用于乏味的 >= 6.0.0

但是,在它的 中package.json,它根本不依赖tedious。由于你的程序还在运行,我猜你之前手动安装了一个旧版本tedious,导致了这个奇怪的问题。

手动安装tediousversion>=6 应该可以解决这个问题,就像它的入门文档页面中所述

您还必须为您选择的数据库手动安装驱动程序:
# One of the following: $ npm install --save pg pg-hstore # Postgres $ npm install --save mysql2 $ npm install --save mariadb $ npm install --save sqlite3 $ npm install --save tedious # Microsoft SQL Server