【发布时间】:2018-06-20 19:56:59
【问题描述】:
我有一个运行 express 的 nodeJS 服务器,我正在通过 API 调用从 Angular 应用程序访问服务器上的数据库。
当我对 localhost 服务器进行 2 次以上的 http 调用时,总是会停滞 2 分钟。从 chrome 开发工具的图片中可以看出。
我一直在研究它,发现 chrome 一次不能有超过 6 个 TCP 连接。我是否正确连接到数据库?如何防止这 2 分钟的停顿?
Server.js
var express = require('express');
var app = express();
const sql = require('mssql');
var bodyParser = require('body-parser');
app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true }));
var dbConfig = {
server: 'DATABASESERVER',
database:'DB1',
user:'ADMIN',
password:'WHATEVERPASS',
port:1600
};
var colorDBConfig = {
server:'DATABASESERVER',
database:'DB2',
user:'ADMIN',
password:'WHATEVERPASS',
port:1700
};
var usersDBConfig = {
server:'DATABASESERVER',
database:'DB3',
user:'ADMIN',
password:'WHATEVERPASS',
port:1800
};
app.get('/carlist',function(req,res){
console.log("I have recieved car request");
sql.close()
sql.connect(dbConfig).then(pool => {
return pool.request()
.execute('dbo.getCarsJoinColor')
}).then(result => {
var carlist = result.recordsets[0];
res.json(carlist);
sql.close()
}).catch(err => {
console.log("Oopsy Woopsy that's not right!");
console.log(err);
sql.close();
return err;
})
});
app.get('/carcolorlist',function(req,res){
console.log("modal request recieved");
sql.close()
sql.connect(colorDBConfig).then(pool => {
return pool.request()
.execute('dbo.getColorCarsJoinCars')
}).then(result => {
var carColorList = result.recordset;
res.json(carColorList);
sql.close()
}).catch(err => {
console.log("Oopsy Woopsy that's not right!");
console.log(err);
sql.close();
return err;
})
});
app.post('/login', function(req, res) {
sql.close()
sql.connect(usersDBConfig).then(pool => {
return pool.request()
.query('SELECT * FROM Users.dbo.Accounts WHERE Name = ' + "'" + req.body.QNumber + "'" + 'AND Password = ' + "'" + req.body.Password + "'")
}).then(result => {
var user = result.recordset;
res.json(user);
sql.close()
}).catch(err => {
console.log("Oopsy Woopsy that's not right!");
console.log(err);
sql.close();
return err;
})
})
【问题讨论】:
-
我猜这与您尝试使用相同端口创建到数据库的多个连接有关。
-
将端口更改为 1600、1700 和 1800 仍然会出现两分钟的停顿。
-
我不熟悉您使用的数据库驱动程序,但为什么每当有请求进入时您总是
closesql 连接?如果有正在进行的事情并且另一个请求进入强制终止它,这可能是一个问题吗? -
好吧,通常只是在您启动节点 server.conn1、conn2、conn3 时启动连接,并在需要时对每个请求执行查询,但不要在每个请求中连接和断开连接.有意义吗?
-
没关系,很高兴你成功了
标签: node.js http express https