如何为 SQL 服务器数据的多个获取请求设置 API 服务器?

How to set up API server for multiple fetch requests of SQL Server data?

我是 React 新手,我想设置一个 API 服务器来获取 SQL 服务器数据,我想向 API 发送多个获取请求服务器。

我试过 promise.all 方法,但在第二次提取请求时总是失败。使它工作的唯一方法是嵌套请求 through.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);
});

我尝试了这里描述的几种方法,但我无法使它起作用:

How to finish Fetch data completely and assign it to component state before proceeding further in componentDidMount React?

通过更改我的 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();
    }
}