我是新来的反应者,我想设置一个API服务器来获取SQL Server数据,并且我想向API服务器发送多个获取请求。
我已经尝试了promise.all方法,但是在第二次获取请求时总是失败。使它起作用的唯一方法是将请求嵌套在.then内,但我不希望这样,因为获取请求的数量是多种多样的。
这是我的代码:
Promise.all([
//the number of requests varied
fetch('http://localhost:8080/api/report/favorite/check/1/1').then(value => value.json()),
fetch('http://localhost:8080/api/report/favorite/check/1/4').then(value => value.json())
])
.then((value) => {
//I always get EALREADYCONNECTING error here from 2nd request and on
console.log(value)
})
.catch((err) => {
console.log(err);
});
问题出在API服务器配置上吗?
//Initializing node modules
var express = require("express");
var bodyParser = require("body-parser");
var sql = require("mssql");
var app = express();
// Body Parser Middleware
app.use(bodyParser.json());
//CORS Middleware
app.use(function (req, res, next) {
//Enabling CORS
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, contentType,Content-Type, Accept, Authorization");
next();
});
//Setting up server
var server = app.listen(process.env.PORT || 8080, function () {
var port = server.address().port;
console.log("App now running on port", port);
});
var connPool = new sql.ConnectionPool({
user: 'someuser',
password: 'somepassword',
server: 'some\\thing',
database: 'somedb',
port: 12345
});
//Function to connect to database and execute query
var executeQuery = function(res, query){
connPool.connect().then(function () {
// create request object
var request = new sql.Request(connPool);
// query to the database
request.query(query).then(function (recordset) {
res.send(recordset)
connPool.close();
})
.catch(function (err) {
console.log("Error while querying database :- " + err);
res.send(err)
connPool.close();
});
})
.catch(function (err) {
console.log("Error while connecting database :- " + err);
res.send(err);
});
}
//GET API
app.get("/api/report/favorite/check/:userid/:reportid", function(req, res){
var query = "EXEC rpt.proc_ReportFavoriteCheck " + req.params.userid + ", " + req.params.reportid;
executeQuery (res, query);
});
我尝试了几种方法,如此处所述,但无法使其起作用:
Fetch API requesting multiple get requests
答案 0 :(得分:0)
通过更改我的API服务器配置来解决此问题:
var executeQuery = async function(res, query){
const pool = new sql.ConnectionPool(dbConfig);
pool.on('error', err => {
console.log('sql errors ', err);
});
try {
await pool.connect();
let result = await pool.request().query(query);
console.log('success')
res.send(result);
return {success: result};
} catch (err) {
console.log('error')
console.log(err)
res.send(err);
return {err: err};
} finally {
pool.close();
}
}