我有一个express
API,其中包含使用mssql的SQL查询的POST请求。这是有效的,并将结果作为JSON返回。我遇到的问题是,当我想在另一个查询仍在运行时多次调用它时...
这是我的代码:
app.post('/select', (req, res) => {
config.database = req.body.db;
var sqlQuery = `SELECT ${req.body.select} FROM ${req.body.from}`;
if (req.body.where !== '' && req.body.where !== undefined) sqlQuery += ` WHERE ${req.body.where}`;
if (req.body.order !== '' && req.body.order !== undefined) sqlQuery += ` ORDER BY ${req.body.order}`;
console.log(`Query: ${sqlQuery}`);
sql.connect(config).then(pool => {
return pool.request().query(sqlQuery)
}).then(result => {
sql.close();
sqlDone = true;
console.dir(result);
res.header('Content-Type', 'Application/JSON');
res.json(result.recordset);
}).catch(err => {
sql.close();
sqlDone = true;
console.log('Caught Error:');
console.log(err);
});
sql.on('error', err => {
sql.close();
console.log('SQL Request Error:');
console.log(err);
});
});
我通过react
我的superagent
webapp与Error: Global connection already exists. Call sql.close() first.
调用此错误时收到的错误是:
<div class="pagination">
//entities -> all products
{{ knp_pagination_render(entities) }}
<script>
var attr = product.id;
$(document).on("click",".s_p_c_pagination .pagination a",function(evt){
$('#mainCntData').css("opacity", "0.3");
$.ajax({
type: "POST",
url: $(this).attr('href'),
data:{ "attarFil" : attr },
})
.done(function( data ) {
//Result Div
});
evt.preventDefault();
});
</script>
这很烦人,因为我必须同步调用我的API并等待第一个查询返回,然后才能调用下一个...
有谁知道如何一次运行多个查询?这必须是一个单独的连接,因为我在一个数据库上运行查询,然后是另一个数据库。但是服务器相同。
答案 0 :(得分:0)
好的我已经设法通过使用wait-until库来等待,直到布尔值为真,如@SPlatten
所示app.post('/select', (req, res) => {
waitUntil()
.interval(500)
.times(60)
.condition(() => {
return (sqlDone ? true : false);
})
.done((result) => {
sqlDone = false;
sql.connect(config).then(pool => {
console.log();
console.log('Connected!');
config.database = req.body.db;
var sqlQuery = `SELECT ${req.body.select} FROM ${req.body.from}`;
if (req.body.where !== '' && req.body.where !== undefined) sqlQuery += ` WHERE ${req.body.where}`;
if (req.body.order !== '' && req.body.order !== undefined) sqlQuery += ` ORDER BY ${req.body.order}`;
console.log(`Query: ${sqlQuery}`);
return pool.request().query(sqlQuery);
}).then(result => {
sql.close();
sqlDone = true;
console.log();
console.log('Result:');
console.dir(result.recordset);
res.header('Content-Type', 'Application/JSON');
res.json(result.recordset);
}).catch(err => {
sql.close();
sqlDone = true;
console.log();
console.error('Caught Error:');
console.error(err);
res.status(500).send({ error: err });
});
sql.on('error', err => {
sql.close();
sqlDone = true;
console.log();
console.error('SQL Error:');
console.error(err);
res.status(500).send({ error: err });
});
});
});
有点遗憾,你不能同时运行多个查询,但我想这是SQL的限制,而不是库。