无法连接到 *name_server* - getaddrinfo ENOTFOUND

时间:2021-04-30 08:17:48

标签: node.js sequelize.js

用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。我该如何解决这个错误?在码头上什么也没找到

1 个答案:

答案 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",
      },
    },
  },
})