Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

मैं एक्सप्रेस 4 वेब एप्लिकेशन में कई मार्गों पर एक एकल एमएसएसक्यूएल कनेक्शन पूल का उपयोग कैसे कर सकता हूं?

मुझे सवाल पूछे और जवाब दिए 3 साल हो चुके हैं। तब से कुछ चीजें बदल गई हैं। यहां ES6, mssql 4 और Express 4 पर आधारित नया समाधान है जो मैं आज सुझाऊंगा।

यहां दो प्रमुख तत्व चल रहे हैं।

  1. मॉड्यूल को पहली बार लोड होने के बाद कैश किया जाता है। इसका मतलब है कि आवश्यकता ('./db') के लिए प्रत्येक कॉल बिल्कुल वही ऑब्जेक्ट लौटाएगा। db.js की पहली आवश्यकता उस फ़ाइल को चलाएगी और वादा बनाएगी और उसे निर्यात करेगी। db.js की दूसरी आवश्यकता फ़ाइल को चलाए बिना उसी वादे को वापस कर देगी। और यही वह वादा है जो पूल के साथ हल हो जाएगा।
  2. एक वादा फिर से किया जा सकता है। और अगर यह पहले हल हो गया, तो यह तुरंत फिर से हल हो जाएगा जो भी पहली बार हल किया गया है, जो कि पूल है।

server.js . में

const express = require('express')
// require route handlers.
// they will all include the same connection pool
const set1Router = require('./routes/set1')
const set2Router = require('./routes/set2')

// generic express stuff
const app = express()

// ...
app.use('/set1', set1Router)
app.use('/set2', set2Router)

// No need to connect the pool
// Just start the web server

const server = app.listen(process.env.PORT || 3000, () => {
  const host = server.address().address
  const port = server.address().port

  console.log(`Example app listening at http://${host}:${port}`)
})

db.js . में

const sql = require('mssql')
const config = {/*...*/}

const poolPromise = new sql.ConnectionPool(config)
  .connect()
  .then(pool => {
    console.log('Connected to MSSQL')
    return pool
  })
  .catch(err => console.log('Database Connection Failed! Bad Config: ', err))

module.exports = {
  sql, poolPromise
}

routes/set1.js . में और routes/set2.js

const express = require('express')
const router = express.Router()
const { poolPromise } = require('./db')

router.get('/', async (req, res) => {
  try {
    const pool = await poolPromise
    const result = await pool.request()
        .input('input_parameter', sql.Int, req.query.input_parameter)
        .query('select * from mytable where id = @input_parameter')      

    res.json(result.recordset)
  } catch (err) {
    res.status(500)
    res.send(err.message)
  }
})

module.exports = router

सारांश करने के लिए

मॉड्यूल कैशिंग के कारण आपको हमेशा वही वादा मिलेगा और वह वादा बार-बार, पहली बार हल किए गए पूल के साथ हल हो जाएगा। इस प्रकार प्रत्येक राउटर फ़ाइल एक ही पूल का उपयोग करती है।

BTW:एक्सप्रेस रूट में ट्राइ कैच के बारे में जाने के आसान तरीके हैं जिन्हें मैं इस उत्तर में शामिल नहीं करूंगा। इसके बारे में यहाँ पढ़ें:https://medium.com/@Abazhenov/using-async-await-in-express-with-node-8-b8af872c0016

पुराना समाधान

यह वह समाधान है जिसे मैंने 3 साल पहले पोस्ट किया था, क्योंकि मेरा मानना ​​​​था कि मेरे पास एक उत्तर था जो साझा करने लायक था और मुझे कहीं और कोई दस्तावेज समाधान नहीं मिला। इसके अलावा कुछ मुद्दों (#118, #164, #165) में नोड-एमएसएसक्यूएल पर इस विषय पर चर्चा की गई है।

server.js . में

var express = require('express');
var sql     = require('mssql');
var config  = {/*...*/};
//instantiate a connection pool
var cp      = new sql.Connection(config); //cp = connection pool
//require route handlers and use the same connection pool everywhere
var set1    = require('./routes/set1')(cp);
var set2    = require('./routes/set2')(cp);

//generic express stuff
var app = express();

//...
app.get('/path1', set1.get);
app.get('/path2', set2.get);

//connect the pool and start the web server when done
cp.connect().then(function() {
  console.log('Connection pool open for duty');

  var server = app.listen(3000, function () {

    var host = server.address().address;
    var port = server.address().port;

    console.log('Example app listening at http://%s:%s', host, port);

  });
}).catch(function(err) {
  console.error('Error creating connection pool', err);
});

routes/set1.js . में

var sql     = require('mssql');

module.exports = function(cp) {
  var me = {
    get: function(req, res, next) {
      var request = new sql.Request(cp);
      request.query('select * from test', function(err, recordset) {
        if (err) {
          console.error(err);
          res.status(500).send(err.message);
          return;
        }
        res.status(200).json(recordset);
      });
    }
  };

  return me;
};


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सशर्त जॉइन स्टेटमेंट SQL सर्वर

  2. कैसे OBJECTPROPERTY () SQL सर्वर में काम करता है

  3. SQL सर्वर क्वेरी - समूहवार गुणन

  4. SQL सर्वर + SQL सर्वर प्रमाणीकरण + त्रुटि:18456 में लॉगिन करने में असमर्थ

  5. SQL सर्वर डेटाबेस में सभी ट्रिगर को अक्षम कैसे करें