我按照这里的教程在 Azure 上构建了一个连接到 SQL-Azure DB 的 node.js 网站:
http://www.windowsazure.com/en-us/develop/nodejs/tutorials/web-site-with-sql-database/
这是我的 .js 代码的样子:
var sql = require('msnodesql'),
nconf = require('nconf');
exports.authenticate = function(req, res){
var select = "select userID, clientID from users where username_e = '?' AND pwd_e = '?'";
nconf.env().file({ file: 'config.json' });
var conn = nconf.get("SQL_CONN");
console.log(conn);
sql.query(conn, select, [req.param('username'), req.param('password')], function(err, results) {
if(err)
throw err;
console.log(results);
if(results.length == 0) {
// no match
res.redirect('/login?failed=true');
} else {
// authenticated
res.redirect('/start');
}
});
return;
};
但是当我在本地 node.js 上运行它时,我不断得到
"Login failed for user 'mylogin'"
- 我直接从 Azure 管理站点复制了 ODBC 连接字符串
- 我用我的密码替换了 {your password here}
- 我四次检查用户名和密码是否正确(我可以成功登录管理工具,并且可以通过本地 SQL Server Management Studio 连接到数据库)
- 我为我的公共 IP 地址添加了一个 IP 例外,这是一个很好的衡量标准
- 我尝试在这里和那里编辑连接字符串(将用户名更改为 mylogin 而不是 mylogin@server,尝试使用 ADO 连接字符串代替)
我还能够使用 jdbc 在 Java 中成功连接。这是有效的 jdbc 连接字符串:
jdbc:sqlserver://xxxmyserver.database.windows.net:1433;DatabaseName=mydb;user=mylogin@xxxmyserver;password=pwd
这是不起作用的 node.js ODBC 连接字符串:
Driver={SQL Server Native Client 10.0};Server=tcp:xxxmyserver.database.windows.net,1433;Database=[mydb];Uid=mylogin@xxxmyserver;Pwd=pwd;Encrypt=yes;Connection Timeout=30;
我在这里完全不知所措,特别是因为我可以使用 SSMS 从本地连接良好。还有其他人遇到同样的问题吗?
万一这很重要,我使用的是 node.js v0.8.2(因为那是 Azure 虚拟机上的内容)和 msnodesql v0.2.1