node.js - 节点续集 (MSSQL) - 用户 '' 登录失败
问题描述
我遇到了几个关于这个问题的帖子,但是,他们似乎都没有一个实际的答案。有几个想法,但没有一个可行。
在挖掘了 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
}
}
当我运行迁移时,出现错误:
> node_modules/.bin/sequelize db:migrate
// ERROR: Login failed for user ''.
如上所述,我挖掘了 sequelize 和乏味的过程,并且我的配置通过两者都正确传递,所以我知道这不是 env var 问题或 NODE_ENV 问题。
有人在这里有什么想法吗?我正要把脸砸在键盘上。
解决方案
旧版本的更多信息:
如果您正在使用sequelize@4
,那么似乎有一个您必须使用的隐藏要求tedious@<=5
。
您使用的是哪个版本的 Sequelize?如果是 v5,根据Sequelize v5 的文档:
Sequelize 现在适用于繁琐的 >= 6.0.0
但是,在它的 中package.json
,它根本不依赖tedious
。由于您的程序仍在运行,我猜您手动安装了以前的旧版本tedious
,这导致了这个奇怪的问题。
手动安装tedious
version>=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
推荐阅读
- python - 如何用 plotly 绘制金字塔人口图?
- javascript - lowdb 从 db 文件中删除键值对
- api - 如何找到共享点文件夹的父 ID?
- python - Python,Django:在 models.py 中限制 IntegerField
- c++ - OpenFOAM 块状网格
- flutter - 有没有更简单的方法可以在提交按钮后添加加载动画?
- git - 您的存储库没有配置为从(与代码)提取的遥控器。远程存在。+ 来自终端的 git 正在工作
- closures - 没有闭包如何实现词法作用域?
- jsf - 无法从 HttpSession 对象获取 JSF @ManagedBean @ViewScoped bean
- c# - 消失到有效果的图片框