Как использовать запрос node-mssql SQL Server Error [ERR_HTTP_HEADERS_SENT]?

const request = new sql.Request(transaction)
request.query('select * from TB_USER', (err, result) => {
    if (err) {                            
        res.send(err);
        transaction.rollback(err => {
            console.log("Transaction RolledBack.")
        })
    }
    else{
        res.status(200).json({"result":result.recordsets})
        transaction.commit(err => {
            console.log("Transaction committed.")
        })                        
    }

})
const request1 = new sql.Request(transaction)
request1.query('select * from TB_USER', (err, result) => {
    if (err) {                            
        res.send(err);
        transaction.rollback(err => {
            console.log("Transaction RolledBack.")
        })
    }
    else{
        res.status(200).json({"result":result.recordsets})
        transaction.commit(err => {
            console.log("Transaction committed.")
        })                        
    }

})

Ошибка:

_http_outgoing.js: 536
бросить новый ERR_HTTP_HEADERS_SENT ('set');
^

Ошибка [ERR_HTTP_HEADERS_SENT]: невозможно установить заголовки после их отправки клиенту.

в ServerResponse.setHeader (_http_outgoing.js: 536: 11)
в ServerResponse.header (A: \ register-api \ node_modules \ express \ lib \ response.js: 771: 10)
в ServerResponse. отправьте (A: \ register-api \ node_modules \ express \ lib \ response.js: 170: 12)
в ServerResponse.json (A: \ register-api \ node_modules \ express \ lib \ response.js: 267 : 15)
в A: \ register-api \ src \ utils \ functions \ updateCust.js: 15:33 в A: \ register-api \ node_modules \ mssql \ lib \ base \ request.js: 446: 9 в Request.userCallback (A: \ register-api \ node_modules \ mssql \ lib \ tedious \ request.js: 479: 15) в Request.callback (A: \ register-api \ node_modules \ tedious \ lib \ request.js : 206: 14) в Parser.onEndOfMessage (A: \ register-api \ node_modules \ tedious \ lib \ connection.js: 2902: 22) в Object.onceWrapper (events.js: 420: 28) {code: 'ERR_HTTP_HEADERS_SENT' } Сбой приложения [nodemon] - ожидание изменений файла перед запуском ...


person Sutiwat Jomchai    schedule 18.05.2021    source источник
comment
Вы используете res.status(200).json дважды в одном запросе. Один запрос, один ответ - это никак не относится к SQL Server. Если вы хотите объединить наборы результатов, вы должны сделать это перед отправкой ответа.   -  person Jeroen Mostert    schedule 18.05.2021


Ответы (1)


Один запрос не принимает два res,

  1. Итак, мы использовали ключевое слово return перед res.send(), поэтому оно не пойдет на второй res в коде.
  2. Всегда помещайте инструкцию / код, которые возвращают что-то после запуска вашего отдельного кода, поэтому я изменил положение transaction.commit() и поместил его перед return res.send().
if (err) {
  transaction.rollback((err) => {
    console.log("Transaction RolledBack.");
  });
  return res.send(err);
} else {
  transaction.commit(() => {
    console.log("Transaction committed.");
  });
  return res.status(200).json({ result: result.recordsets });
}
person Dhaval Darji    schedule 18.05.2021
comment
Не могли бы вы проголосовать. - person Dhaval Darji; 23.05.2021