узел ms sql параллельный запрос, в результате которого "Соединение закрыто" - PullRequest
0 голосов
/ 29 января 2020

Я использую ms sql пакет node js, и каждый маршрут я создаю новое соединение и выполняю транзакции, когда я вызываю два apis параллельно со стороны клиента, ms sql выдает «Соединение закрыто»

Пример: когда этот API-интерфейс вызывается одновременно, появляется «Соединение закрыто»

router.get('/', async function (req, res, next) {
   let result = {};
   try {
       let pool = await sql.connect(db);
       try {
          let sqlResponse = await pool.request().execute('p_getAllData');
          result = {
             status: true,
             data: sqlResponse.recordsets[0]
          }
          pool.close();
      } catch (e) {
          pool.close();
          throw e;
      }
   } catch (e) {
       result = {
          status: false,
          data: e.message
       }
       console.log(e);
   } 
   res.send(result);
});

1 Ответ

1 голос
/ 30 января 2020

Я не буду создавать пул для каждого запроса и закрывать его при каждом запросе. Это очень неэффективно. Вам следует создать пул соединений, вероятно, один раз, когда вы запустите сервер и повторно использовать его для этого.

Такой метод

let pool;

app.listen(port, async () => {
   console.log(`Example app listening on port ${port}!`);
pool = await sql.connect("connectionstring");
});

В своем маршруте вы в основном используете пул, как обычно.

Более подходящий способ - создать файл dbOperation, содержащий все соответствующие методы, и использовать их в своих маршрутах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...