用sequelize-typescript连接数据库时,出现错误
Failed to connect to SERVER\SQL2016:1433 - getaddrinfo ENOTFOUND SERVER\SQL2016
连接设置
import { Sequelize } from 'sequelize-typescript'
import { environment } from '../config'
import { normalize, join } from 'path'
export default new Sequelize({
database: environment.database.database,
dialect: "mssql",
username: environment.database.username,
// port: environment.database.port,
password: environment.database.password,
host: environment.database.host,
logging: !environment.production ? console.log : false,
models: [normalize(join(__dirname, "..", "models"))],
dialectOptions: {
options: {
enableArithAbort: true,
cryptoCredentialsDetails: {
minVersion: "TLSv1",
},
},
},
})
interface DatabaseConnection {
database: string
username: string
port: number
password: string
host: string
hostAsodu: string
databaseAsodu: string
}
export const environment: Environment = {
port: process.env.PORT ? Number(process.env.PORT) : 3030,
production: process.env.NODE_ENV === "production",
database: {
database: process.env.DB_DATABASE ?? String(),
username: process.env.DB_USERNAME ?? String(),
port: process.env.DB_PORT ? Number(process.env.DB_PORT) : 0,
password: process.env.DB_PASSWORD ?? String(),
host: process.env.DB_HOST ?? String(),
hostAsodu: process.env.DB_HOST_ASODU ?? String(),
databaseAsodu: process.env.DB_DATABASE_ASODU ?? String()
},
}
我尝试了带和不带端口的连接,错误是一样的。它只是连接到 SERVER,但不想连接到命名的 SERVER\SQL2016。我该如何解决这个错误?在码头上什么也没找到
答案 0 :(得分:0)
ENOTFOUND 是操作系统网络代码中的操作系统级错误。这意味着您要求它查找主机名,但什么也没找到。用行话来说,你的名字“无法解析”。 (例如,www.stackoverflow.com
是一个主机名。https://www.stackoverflow.com
是一个 URL,它恰好包含一个主机名。)
getaddrinfo() 是要求域名服务 (DNS) 查找主机名的操作系统方法。
在我看来,您试图查找主机名 SERVER\SQL2016
。那不是主机名。你可能想要像 sql2016.example.com
这样的东西。向操作该 SQL Server 实例的人员询问正确的主机名。
我使用的 SQL Server 实例的主机名类似于 devdatabase.dev.example.com
。
编辑连接字符串的 SQL2016
部分称为服务器实例或 DataSource
。您需要将它与主机名分开指定。看到这个。 Error connecting to SQL Server database with sequelize 您还需要确保您的 SQL Server 软件配置为允许 TCP 连接。
在连接时试试这个。
export default new Sequelize({
database: environment.database.database,
dialect: "mssql",
username: environment.database.username,
// port: environment.database.port,
password: environment.database.password,
host: environment.database.host, /* should be the hostname without \SQL2016 */
logging: !environment.production ? console.log : false,
models: [normalize(join(__dirname, "..", "models"))],
dialectOptions: {
instanceName: 'SQL2016',
options: {
enableArithAbort: true,
cryptoCredentialsDetails: {
minVersion: "TLSv1",
},
},
},
})