Как настроить сервер API для нескольких запросов на выборку данных SQL Server? - PullRequest
0 голосов
/ 21 января 2019

Я новичок, чтобы реагировать, и я хочу настроить сервер API для получения данных SQL Server, и я хочу отправить несколько запросов на выборку серверу API.

Я испробовал обещание.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);
});

Я пробовал несколько способов, как описано здесь, но не могу заставить его работать:

Запрос API извлечениянесколько запросов на получение

Несколько запросов на выборку с помощью setState в React

Как полностью завершить выборку данных и присвоить их состоянию компонента, прежде чем продолжить вcomponentDidMount React?

1 Ответ

0 голосов
/ 29 января 2019

Решил это, изменив конфигурацию моего сервера 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...