我使用Node js express连接到远程SQL Server。它从服务器检索数据并绘制条形图。我使用以下包
"body-parser": "^1.15.1",
"d3": "^3.5.17",
"express": "^4.13.4",
"jquery": "^2.2.4",
"jsdom": "^9.2.1",
"mssql": "^3.3.0",
"require": "^2.4.20"
我有一个包含输入字段的HTML登录页面。输入通过ajax发送给/ user。这是我用来向用户显示他提供的凭据是否正确的代码。
app.post('/user', function (req, res, body) {
uid = req.body.uid;
pwd = req.body.pwd;
config = 'Server={IPv4 of server};Database=DbName;Uid=domain\\' + uid + ';Pwd=' + pwd;
dbConn = new sql.Connection(config);
dbConn.connect().then(function () {
var request = new sql.Request(dbConn);
// alert
}).catch(function (err) {
// alert
});
});
其中Uid和Pwd是用户的登录凭据。对于有权访问数据库的所有用户,将建立连接并显示图表。
这是收集图表所需数据并将其发送到HTML页面的代码
app.get('/re', function (req, res) {
dbConn.connect().then(function () { //using promises instead of callbacks(onceconnect() is done), then go to then()
var request = new sql.Request(dbConn);
request.query("select * from books;").then(function (recordSet) { //once query is executed, then go to then()
res.send(recordSet);
dbConn.close(); //close connection
}).catch(function (err) {
console.log(err);
dbConn.close();
});
}).catch(function (err) {
console.log(err);
});
});
当不同PC上的多个用户同时尝试访问它时,会出现以下问题。
1。)如果用户A已登录并正在查看图表,则用户B也可以在不登录的情况下查看同一图表,只需浏览该页面
2。)如果用户A更改查询以仅查看图表的子集,则用户B被迫在刷新时看到该更改
3.)当userA关闭连接,即注销时,用户B再也看不到页面了。
似乎只建立了一个连接。无论用户B是否已登录,他都会看到该页面。
当用户A,B连续使用它(一个接一个)时,它可以根据需要使用。
请帮帮我。我完全不知道如何继续前进。
编辑1:发生这一切是因为我的变量配置一次只能保存一个UID和PWD。因此,即使用户B未通过用户A的凭证登录,用户B也可以查看图表
答案 0 :(得分:0)
我找到了答案 - 问题是因为我没有在我的代码中使用会话。当我开始在节点js中使用快速会话时,它按照Session management in Nodejs
中的预期工作