2017-04-11 20 views
7

नमस्ते मैं sqlserver डेटाबेस का उपयोग कर नोड जेएस restful api बना रहा हूं, मैं एपीआई प्राप्त करने के लिए तैयार हूं जब मैं एपीआई आउटपुट का उपयोग कर रहा हूं, जेसन प्रारूप में दिखाया गया है, जबकि ब्राउज़र को इसके शो को रीफ्रेश करते हुए "त्रुटि: ग्लोबल कनेक्शन पहले से मौजूद है। पहले sql.close() को कॉल करें। "त्रुटि। मैं कोडत्रुटि: वैश्विक कनेक्शन पहले से मौजूद है। कॉल sql.close() पहले

var express = require("express"); 
 

 
var sql = require("mssql"); 
 
var app = express(); 
 

 
//Initiallising connection string 
 
var dbConfig = { 
 
    user: 'sa', 
 
    password: 'India123', 
 
    server: 'localhost', 
 
    database: 'sample' 
 

 
    
 
}; 
 

 
app.get('/login', function (req, res) { 
 

 
    // connect to your database 
 
    
 
    var data = { 
 

 
     "user": "" 
 
    }; 
 
    sql.connect(dbConfig, function (err) { 
 

 
     if (err) console.log(err); 
 

 
    
 
     var request = new sql.Request(); 
 
    
 
     
 
     request.query('select * from Login', function (err, result) { 
 

 
      if (err) console.log(err) 
 

 
      // send data as a response 
 
      //res.send(result.recordset); 
 
      data["user"] = result.recordset; 
 
      res.send(data); 
 
      
 
     
 
     }); 
 
    }); 
 

 
}); 
 

 
var server = app.listen(5000, function() { 
 
    console.log('Server is running..'); 
 
});
कृपया मुझे कोड सही जोड़ने कर रहा हूँ। धन्यवाद अग्रिम

+0

दूसरे उदाहरण पर पहली बार यह हो रहा है? पहला उदाहरण उस कनेक्शन को बंद नहीं करता है जो दूसरे उदाहरण को असफल कर देगा। कोई फर्क नहीं पड़ता कि क्या हो रहा है अगर यह पहले उदाहरण में विफल रहा है। – cup

उत्तर

5
// db.js 
var mssql = require("mssql"); 
var dbConfig = { 
    user: 'sa', 
    password: 'India123', 
    server: 'localhost', 
    database: 'sample' 
}; 

var connection = mssql.connect(dbConfig, function (err) { 
    if (err) 
     throw err; 
}); 

module.exports = connection; 

// app.js 
var db = require("db"); 
var express = require("express"); 
var app = express(); 

app.get('/login', function (req, res, next) { 
    var request = new db.Request(); 
    request.query('select * from Login', function (err, result) { 
     if (err) 
      return next(err); 

     var data = {}; 
     data["user"] = result.recordset; 
     res.send(data);  
    }); 
}); 

var server = app.listen(5000, function() { 
    console.log('Server is running..'); 
}); 
+0

धन्यवाद आइकन मोगवाई ... यह ठीक काम कर रहा है ... क्या आप कृपया बता सकते हैं कि आपने वास्तव में क्या परिवर्तन किए हैं ?? –

+0

ब्राउज़र शो पृष्ठ पर प्रत्येक बार कनेक्शन बनाते हैं (और कचरा कलेक्टर को क्वेरी के बाद इसे नष्ट करना होगा)। यह अच्छा नहीं है क्योंकि इन ऑपरेशन को CPU समय की आवश्यकता होती है। जब ऐप में 'db.js' शामिल होता है तो कनेक्शन एक बार बना रहता है और सभी मॉड्यूल के लिए उपलब्ध होता है। –

+1

यह थोड़ा सा है। आपका मॉड्यूल। निर्यात db.js. में mssql होना चाहिए कारण यह है कि आप mssql पर नया अनुरोध नहीं बनाते हैं। – DevShadow

1

आंतरिक sql.Connection() किसी भी अधिक है, इसके बजाय का उपयोग sql.ConnectionPool()

कनेक्शन का उपयोग न करें, प्रत्येक ConnectionPool उदाहरण टीडीएस कनेक्शन की एक अलग पूल है । एक बार जब आप एक नया अनुरोध/लेनदेन/तैयार वक्तव्य बनाते हैं, तो पूल से एक नया टीडीएस कनेक्शन प्राप्त किया जाता है और वांछित कार्रवाई के लिए आरक्षित किया जाता है। एक बार कार्रवाई पूरी होने के बाद, कनेक्शन पूल पर वापस जारी किया जाता है। कनेक्शन स्वास्थ्य जांच अंतर्निहित है ताकि एक बार मृत कनेक्शन की खोज हो जाने पर, इसे तुरंत एक नए के साथ बदल दिया जाता है।

महत्वपूर्ण: हमेशा बनाए गए कनेक्शन में त्रुटि श्रोता संलग्न करें। जब भी कनेक्शन में कुछ गलत हो जाता है तो यह एक त्रुटि को छोड़ देगा और यदि कोई श्रोता नहीं है तो यह आपके आवेदन को बिना किसी त्रुटि के क्रैश कर देगा।

पूल बनाएं और कनेक्शन का उपयोग करें।

const pool = new sql.ConnectionPool({ /* config */ })

Entire Article how to use pool and close pool.

https://www.npmjs.com/package/mssql

var sql = require("mssql"); 

const pool = new sql.ConnectionPool({ 
    user: 'sa', 
    password: '[email protected]', 
    server: 'SAI-PC', 
    database: 'Demo' 
}) 


var conn = pool; 

conn.connect().then(function() { 
    var req = new sql.Request(conn); 
    req.query("SELECT * FROM Product").then(function (recordset) { 
     console.log(recordset); 
     conn.close(); 
    }) 
     .catch(function (err) { 
      console.log(err); 
      conn.close(); 
     }); 
}) 
    .catch(function (err) { 
     console.log(err); 
    }); 
संबंधित मुद्दे