2017-07-20 41 views
1

我在节点JS用于SQL Server连接字符串如下:节点JS连接字符串不接受反斜杠()在用于SQL Server

var webconfig = { 
    user: 'sa', 
    password: 'aman', 
    server: 'Aman\AMAN', 
    database: 'Demo', 
    options: { 
     encrypt: false // Use this if you're on Windows Azure 
    } 
} 

它显示连接的关闭错误。

但是,如果我使用网络服务器像192.5.5.62等,那么它的工作正常。我认为在'阿曼\ AMAN'的问题,因为服务器名称不接受\反斜杠(我认为)。

以下连接工作对我来说...

var webconfig = { 
     user: 'sa', 
     password: 'aman', 
     server: '192.5.5.62', 
     database: 'Demo', 
     options: { 
      encrypt: false // Use this if you're on Windows Azure 
     } 
    } 

如果我的\(反斜杠)的猜测是真的,那么请建议我如何使用此服务器名或窗口认证等

修复

帮助将不胜感激。

+1

反斜杠需要在JS字符串中转义。试试'Aman \\ AMAN'。 [变量中的JavaScript反斜杠(\)可能重复导致错误](https://stackoverflow.com/questions/3903488/javascript-backslash-in-variables-is-causing-an-error)。 – Santi

+0

你使用的是什么sql服务器模块? mssql(https://www.npmjs.com/package/mssql#connect-callback)似乎以您试图执行的方式接受命名实例。 – Paul

+0

@Santi我已经试过这个已经不能工作 –

回答

1

从您的评论,您似乎可能会使用默认驱动程序,这是乏味的。看着their docs似乎他们已经分离出来的主机名和实例名,所以你想改变你的代码是这样的:

var webconfig = { 
    user: 'sa', 
    password: 'aman', 
    server: 'Aman', 
    database: 'Demo', 
    options: { 
     encrypt: false, // Use this if you're on Windows Azure 
     instanceName: 'AMAN' 
    } 
} 
+0

它的显示“连接关闭错误”。 –

+0

你能提供更多细节吗?除了那个字符串之外,还有其他的东西会返回这个错误。另外,确保你实际上能够连接到默认端口上的SQL服务器实例等等;这个错误可能是一个渴望的防火墙的结果。 – Paul

0

首先,我会这里假设你正在使用tedious模块(通过查看options.encrypt的评论)。我想先评论一下,但我没有信用评论。我真的很想帮助你,因为我在某个时候面临同样的问题,所以在这里。

我会在Nodejs Tedious模块的上下文中将问题分为两部分。

  1. 支持命名实例
  2. 支持Windows身份验证

支持命名实例

默认情况下繁琐的用途服务器options.port连接。 options.port是默认值为1433的默认设置。这是下面提到的配置工作的原因。

var webconfig = { 
    user: 'sa', 
    password: 'aman', 
    server: '192.5.5.62', 
    database: 'Demo', 
    options: { 
     encrypt: false // Use this if you're on Windows Azure 
    } 
} 

但是如果你想在连接配置中使用命名实例,则必须使用options.instanceName,如下图所示。请参阅documentation

var webconfig = { 
    user: 'sa', 
    password: 'aman', 
    server: 'Aman', //FQDN is preferred, so assuming you can ping this 
    database: 'Demo', 
    options: { 
     instanceName: 'AMAN' 
     encrypt: false // Use this if you're on Windows Azure 
    } 
} 

在你的情况,但不要求使用命名的实例,因为你可以使用主机名\ IP本身连接到连接。

此外,您既可以使用options.portoptions.instanceName但不能同时在配置上在同一时间。

这使我想到你的第二个问题。

支持Windows身份验证

乏味的模块不支持Windows身份验证连接到SQL Server实例当前。见here。然而,现在已经有很多聪明的人在努力。看看这个开放的PR #497。随意为Tedious社区做出贡献。

额外提示:展望未来,而不是猜测的根源,你还可以通过繁琐的模块,该模块将路由你在正确的方向利用debug event。确保在生产中禁用它。

如果它对您有帮助,请将其标记为答案。干杯!

+0

显示“连接关闭错误”。 –

+0

你能ping通像“ping Aman”这样的服务器吗? – Naman

+0

你有没有像我在答案中提到的那样附加调试监听器?它说什么? – Naman