Node.js
MySQL एकीकरण
खोज…
परिचय
इस विषय में आप सीखेंगे कि MYSQL डेटाबेस मैनेजमेंट टूल का उपयोग करके Node.js के साथ एकीकृत कैसे करें। आप एक नोडज कार्यक्रम और स्क्रिप्ट का उपयोग करके mysql में रहने वाले डेटा के साथ जुड़ने और बातचीत करने के विभिन्न तरीके सीखेंगे।
पैरामीटर के साथ कनेक्शन ऑब्जेक्ट क्वेरी करें
जब आप SQL में यूजर जेनरेट की गई सामग्री का उपयोग करना चाहते हैं, तो यह मापदंडों के साथ किया जाता है। उदाहरण के लिए उपयोगकर्ता को aminadav
नाम के साथ खोजना चाहिए aminadav
आपको करना चाहिए:
var username = 'aminadav';
var querystring = 'SELECT name, email from users where name = ?';
connection.query(querystring, [username], function(err, rows, fields) {
if (err) throw err;
if (rows.length) {
rows.forEach(function(row) {
console.log(row.name, 'email address is', row.email);
});
} else {
console.log('There were no results.');
}
});
एक कनेक्शन पूल का उपयोग करना
ए। एक ही समय में कई क्वेरीज़ चलाना
MySQL कनेक्शन के सभी प्रश्न एक के बाद एक किए जाते हैं। इसका मतलब है कि यदि आप 10 क्वेरी करना चाहते हैं और प्रत्येक क्वेरी में 2 सेकंड लगते हैं तो संपूर्ण निष्पादन में 20 सेकंड का समय लगेगा। समाधान 10 कनेक्शन बनाने और प्रत्येक क्वेरी को एक अलग कनेक्शन में चलाने के लिए है। यह कनेक्शन पूल का उपयोग करके स्वचालित रूप से किया जा सकता है
var pool = mysql.createPool({
connectionLimit : 10,
host : 'example.org',
user : 'bobby',
password : 'pass',
database : 'schema'
});
for(var i=0;i<10;i++){
pool.query('SELECT ` as example', function(err, rows, fields) {
if (err) throw err;
console.log(rows[0].example); //Show 1
});
}
यह सभी 10 प्रश्नों को समानांतर में चलाएगा।
जब आप pool
उपयोग करते हैं तो आपको कनेक्शन की आवश्यकता नहीं होती है। आप सीधे पूल को क्वेरी कर सकते हैं। MySQL मॉड्यूल आपकी क्वेरी को निष्पादित करने के लिए अगले निःशुल्क कनेक्शन की खोज करेगा।
ख। उस पर होस्ट किए गए अलग-अलग डेटाबेस के साथ डेटाबेस सर्वर पर बहु-किरायेदारी प्राप्त करना।
मल्टीटैन्सी आजकल उद्यम अनुप्रयोग की एक सामान्य आवश्यकता है और डेटाबेस सर्वर में प्रत्येक डेटाबेस के लिए कनेक्शन पूल बनाने की अनुशंसा नहीं की जाती है। इसलिए, हम इसके बजाय डेटाबेस सर्वर के साथ कनेक्शन पूल बना सकते हैं और फिर मांग पर डेटाबेस सर्वर पर होस्ट किए गए डेटाबेस के बीच उन्हें स्विच कर सकते हैं।
मान लीजिए कि हमारे एप्लिकेशन में डेटाबेस सर्वर पर होस्ट की गई प्रत्येक फर्म के लिए अलग-अलग डेटाबेस हैं। उपयोगकर्ता द्वारा एप्लिकेशन को हिट करने पर हम संबंधित फर्म डेटाबेस से जुड़ जाएंगे। यहाँ कैसे करना है पर उदाहरण है: -
var pool = mysql.createPool({
connectionLimit : 10,
host : 'example.org',
user : 'bobby',
password : 'pass'
});
pool.getConnection(function(err, connection){
if(err){
return cb(err);
}
connection.changeUser({database : "firm1"});
connection.query("SELECT * from history", function(err, data){
connection.release();
cb(err, data);
});
});
मुझे उदाहरण को तोड़ने दो: -
पूल कॉन्फ़िगरेशन को परिभाषित करते समय मैंने डेटाबेस का नाम नहीं दिया, लेकिन केवल डेटाबेस सर्वर दिया
{
connectionLimit : 10,
host : 'example.org',
user : 'bobby',
password : 'pass'
}
इसलिए जब हम डेटाबेस सर्वर पर विशिष्ट डेटाबेस का उपयोग करना चाहते हैं, तो हम डेटाबेस का उपयोग करके हिट करने के लिए कनेक्शन पूछते हैं: -
connection.changeUser({database : "firm1"});
आप यहां आधिकारिक दस्तावेज देख सकते हैं
MySQL से कनेक्ट करें
MySQL से जुड़ने का सबसे आसान तरीका mysql
मॉड्यूल का उपयोग करना है। यह मॉड्यूल Node.js ऐप और MySQL सर्वर के बीच कनेक्शन को संभालता है। आप इसे किसी भी अन्य मॉड्यूल की तरह स्थापित कर सकते हैं:
npm install --save mysql
अब आपको एक mysql कनेक्शन बनाना होगा, जिसे आप बाद में क्वेरी कर सकते हैं।
const mysql = require('mysql');
const connection = mysql.createConnection({
host : 'localhost',
user : 'me',
password : 'secret',
database : 'database_schema'
});
connection.connect();
// Execute some query statements
// I.e. SELECT * FROM FOO
connection.end();
अगले उदाहरण में आप सीखेंगे कि connection
ऑब्जेक्ट को कैसे क्वेरी करें।
पैरामीटर के बिना कनेक्शन ऑब्जेक्ट क्वेरी करें
आप क्वेरी को एक स्ट्रिंग के रूप में भेजते हैं और जवाब में कॉलबैक का जवाब मिलता है। कॉलबैक आपको error
, rows
और फ़ील्ड की सरणी देता है। प्रत्येक पंक्ति में दी गई तालिका के सभी कॉलम होते हैं। यहाँ निम्नलिखित स्पष्टीकरण के लिए एक स्निपेट दिया गया है।
connection.query('SELECT name,email from users', function(err, rows, fields) {
if (err) throw err;
console.log('There are:', rows.length,' users');
console.log('First user name is:',rows[0].name)
});
एक पूल से एक ही कनेक्शन के साथ कई क्वेरीज़ चलाएं
ऐसी स्थितियाँ हो सकती हैं जहाँ आपने MySQL कनेक्शन का एक पूल सेटअप किया है, लेकिन आपके पास कई क्वेरीज़ हैं जिन्हें आप क्रम से चलाना चाहेंगे:
SELECT 1; SELECT 2;
आप बस तब चला सकते हैं जब pool.query
को देखा जा सकता है । जैसा कि कहीं और देखा गया है , हालांकि यदि आपके पास पूल में केवल एक मुफ्त कनेक्शन है तो आपको तब तक इंतजार करना होगा जब तक कि आप दूसरी क्वेरी को चलाने से पहले एक कनेक्शन उपलब्ध न हो जाए।
हालांकि, आप पूल से कोई सक्रिय कनेक्शन को बनाए रखने और कई प्रश्नों के रूप में चला सकते हैं के रूप में आप का उपयोग कर एक भी कनेक्शन का उपयोग करना चाहते हैं pool.getConnection
:
pool.getConnection(function (err, conn) { if (err) return callback(err); conn.query('SELECT 1 AS seq', function (err, rows) { if (err) throw err; conn.query('SELECT 2 AS seq', function (err, rows) { if (err) throw err; conn.release(); callback(); }); }); });
नोट: आपको कनेक्शन release
करना याद रखना चाहिए, अन्यथा बाकी पूल के लिए एक कम MySQL कनेक्शन उपलब्ध है!
MySQL कनेक्शन पूलिंग के बारे में अधिक जानकारी के लिए MySQL डॉक्स देखें ।
जब कोई त्रुटि होती है तो क्वेरी लौटाएँ
आप क्वेरी अपने को मार डाला संलग्न कर सकते हैं err
एक त्रुटि तब होती है जब वस्तु:
var q = mysql.query('SELECT `name` FROM `pokedex` WHERE `id` = ?', [ 25 ], function (err, result) { if (err) { // Table 'test.pokedex' doesn't exist err.query = q.sql; // SELECT `name` FROM `pokedex` WHERE `id` = 25 callback(err); } else { callback(null, result); } });
निर्यात कनेक्शन पूल
// db.js
const mysql = require('mysql');
const pool = mysql.createPool({
connectionLimit : 10,
host : 'example.org',
user : 'bob',
password : 'secret',
database : 'my_db'
});
module.export = {
getConnection: (callback) => {
return pool.getConnection(callback);
}
}
// app.js
const db = require('./db');
db.getConnection((err, conn) => {
conn.query('SELECT something from sometable', (error, results, fields) => {
// get the results
conn.release();
});
});