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

时间:2019-01-21 04:38:53

标签: sql-server reactjs fetch-api

我是新来的反应者,我想设置一个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

Multiple fetch requests with setState in React

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

1 个答案:

答案 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();
    }
}