2016-01-27 2 views
4

Я получаю ошибку в npm mssql 3.0.0 с sqlserver 2012Узел js: mssql [ConnectionError: Connection is closed.] Name: 'ConnectionError', message: 'Connection is closed.', Code: 'ECONNCLOSED'

Я создаю одностраничное приложение, в котором я использовал restful, используя экспресс. существует 4 метода, которые выполняют запрос и возвращают данные в ответ. Для каждого метода я открываю соединение и закрываю соединение.

, но при сохранении запроса происходит ошибка соединения.

каждый код метод аналогичен методу savedquery (копия вставленный код только изменяются запросы), но они выполняются savedquery не выполняет

{[ConnectionError:. Соединение закрыто] имя: «ConnectionError», сообщение: 'Соединение закрыто.', код: 'ECONNCLOSED'}

var savedquery=function(req,res){ 
     dbConfig= { 
       user: 'XXX', 
       password: 'XXXXXXXXXX', 
       server: 'localhost', // You can use 'localhost\\instance' to connect to named instance 
       database: 'DEMO_ODS',  
       options: { 
        encrypt: true 
       } 
      }; 

     sql.connect(dbConfig).then(function (err) { 
       var sqlrequest = new sql.Request(); 
       sqlrequest.query("SELECT * from SavedQuery").then(function (recordset) { 
        sql.close(function (value) { 
         console.log("connection6 closed"); 
        }); 
        return res.status(200).send(recordset); 

       }).catch(function (err) { 
        console.log(err); 
       }); 
      }).catch(function (err) { 
       console.log(err); 
      }); 
     }; 
} 
+0

Вы на Лазури? Я вижу, что у вас есть опция encrypt set to true, которая нужна только в том случае, если вы используете Azure. –

+0

no Я просто использую sql-сервер в localhost, удаляю ли я параметр шифрования, есть ошибка. –

ответ

1

Я знаю, что это старый questionm, но этот ответ для тех, кто сталкиваются с теми же isue. У меня была та же проблема, что я сделал, использовал обещания, как показано ниже.

function getData() { 
    try { 
     sqlInstance.connect(setUp) 
      .then(function() { 
       // Function to retrieve all the data - Start 
       new sqlInstance.Request() 
        .query("select * from Course") 
        .then(function (dbData) { 
         if (dbData == null || dbData.length === 0) 
          return; 
         console.dir('All the courses'); 
         console.dir(dbData); 
        }) 
        .catch(function (error) { 
         console.dir(error); 
        }); 

       // Function to retrieve all the data - End 

       // To retrieve specicfic data - Start 
       var value = 1; 
       new sqlInstance.Request() 
        .input("param", sqlInstance.Int, value) 
        .query("select * from Course where CourseID = @param") 
        .then(function (dbData) { 
         if (dbData == null || dbData.length === 0) 
          return; 
         console.dir('Course with ID = 1'); 
         console.dir(dbData); 
        }) 
        .catch(function (error) { 
         console.dir(error); 
        }); 
       // To retrieve specicfic data - End 

      }).catch(function (error) { 
       console.dir(error); 
      }); 
    } catch (error) { 
     console.dir(error); 
    } 
} 

Это решило мою проблему. Вы можете найти исправление here.

2

Вы должны удалить

 options: { 
      encrypt: true 
     } 

из вашего DBCONFIG

+0

На самом деле это не проблема ... и если вы используете Azure SQL, вы должны установить этот флаг в true. –