मेरा सुझाव है कि पूलिंग दस्तावेज़ दें पूरी तरह से पढ़ा।
आपने कहा है कि आप conn.changeUser(/*...*/)
. का उपयोग कर रहे हैं , लेकिन फिर आपने कहा है कि आप const conn = mysql.createPool(/*...*/);
का उपयोग कर रहे हैं उस conn
. को प्रारंभ करने के लिए लगातार। इसका मतलब है conn
एक पूल है , कनेक्शन नहीं; इसमें कोई आश्चर्य की बात नहीं है कि इसमें changeUser
नहीं है विधि।
यदि आप डेटाबेस बदलना चाहते हैं, तो आपको इसे कनेक्शन पर करना होगा, पूल पर नहीं। शॉर्टहैंड का उपयोग करने के बजाय pool.query
फ़ॉर्म, आप pool.getConnection
do करेंगे /conn.changeUser
/conn.query
/conn.release
. सबसे पहले, अपने वेरिएबल को कॉल करें pool
, नहीं conn
:
const pool = mysql.createPool({
तब
pool.getConnection(function(err, conn) {
if (err) {
// handle/report error
return;
}
conn.changeUser({
database: req.session.dbname
}, function (err) {
if (err) {
// handle/report error
return;
}
// Use the updated connection here, eventually
// release it:
conn.release();
});
});
उसने कहा , अगर यह मैं होता, तो मैं एक सामान्य पूल के बजाय प्रति डेटाबेस एक कनेक्शन पूल रखने में अधिक सहज होता, जहाँ आप डेटाबेस बदलते हैं। यह मेरी ओर से शुद्ध व्यामोह हो सकता है, लेकिन मैं यही करूँगा। लेकिन अगर आप अलग पूल का उपयोग नहीं करते हैं, तो मेरा सुझाव है कि हमेशा changeUser
. करें तो आप सुनिश्चित हैं कि आप किस डेटाबेस का उपयोग कर रहे हैं, या पूरी तरह से का परीक्षण करें यह देखने के लिए कि mysql
. क्या है मॉड्यूल इसे संभालने के लिए करता है (और मॉड्यूल के हर डॉट रिलीज पर उस परीक्षण को दोहराएं, जब तक कि अनुरक्षक व्यवहार को दस्तावेज न करे)।