在Azure下使用node-sqlserver或node-mssql

时间:2014-02-27 01:13:05

标签: sql-server node.js azure node-mssql

我正在尝试使用node-mssql连接到Azure上的数据库。我的开发系统是Windows 7,我没有成功通过WebMatrix安装node-sqlserver。

我的问题有两个部分:首先是否有任何理由,即使我按照Microsoft的指示,我得到了node-sqlserver的错误?在WebMatrix中使用NPM尝试天真的方法我得到以下错误:

An error occurred.

"C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "node-sqlserver" "--json"


Exit status 1

Failed at the node-sqlserver@0.1.0 install script.
This is most likely a problem with the node-sqlserver package,
not with npm itself.
Tell the author that this fails on your system:
    node-gyp rebuild
You can get their info via:
    npm owner ls node-sqlserver
There is likely additional logging output above.



Failed: npm reported an error.

NodeNpm.NpmException: Failed: npm reported an error.
   at NodeNpm.NpmApi.Install(INpmPackage package)
   at Microsoft.WebMatrix.NpmGallery.CachingPackageManger.InstallPackage(INpmPackage package)
   at Microsoft.WebMatrix.NpmGallery.PackageViewModel.Install()
   at System.Threading.Tasks.Task.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()

机器已安装VS2012 Professional。

我的问题的第二部分是,有什么理由说使用node-mssql在Azure下不起作用?我只是得到一个失败的连接错误,即使我已经多次验证了详细信息(替换以下实际值的占位符):

var config = {
  user: '{username}',
  password: '{password}',
  server: 'tcp:{server}.database.windows.net',
  database: '{database}'
}

我收到以下错误:

  

{“name”:“ConnectionError”,“message”:“与tcp的连接:{server} .database.windows.net:1433> - 失败错误:getaddrinfo ENOTFOUND”}

我意识到node-sqlserver是在Azure下执行此操作的最佳方式,但我已经尝试了几天但没有成功。我有什么明显的遗失吗?

2 个答案:

答案 0 :(得分:1)

1)您可以通过从this repo下载预编译的node-sqlserver驱动程序来解决此问题。即使安装了所有dev依赖项,我也无法在我的机器上编译源代码。

2)node-mssql模块使用三个不同的驱动程序与sql server通信。您的配置未指定任何驱动程序,因此使用默认驱动程序 - Tedious。您必须更改配置才能使其正常工作:

var config = {
    user: '{username}',
    password: '{password}',
    server: '{server}.database.windows.net', // simply remove "tcp:"
    database: '{database}'
}

还可以选择将node-mssqlnode-sqlserver一起使用,但要使其正常工作,您必须手动安装已编译的node-sqlserver驱动程序。配置应如下所示:

var config = {
    driver: 'msnodesql',
    user: '{username}',
    password: '{password}',
    server: 'tcp:{server}.database.windows.net',
    database: '{database}'
}

答案 1 :(得分:0)

去年,当模块名为node-sqlserver时,我正在使用Node.js中的SQL Azure,所以我的回答可能不起作用。

参考您的第一个问题,在NPM安装期间,需要通过node-gypC++编译node-mssql。因此,您最好检查是否安装了C ++编译器。当我安装它告诉我,我需要VS2010 C ++。不确定您现在是否需要它,或任何更高版本。您可以从命令窗口运行npm install node-mssql,如果失败,您应该获得一个日志文件,应该是npm-error.log或类似的东西。

参考你的第二个问题,当我使用这个模块时,我使用连接字符串。您能否仔细检查您的用户名是否以user@server格式指定。还要仔细检查是否为其他云服务打开了SQL Azure防火墙。