Tôi khuyên bạn nên cung cấp tài liệu tổng hợp đọc kỹ.
Bạn đã nói rằng bạn đang sử dụng conn.changeUser(/*...*/)
, nhưng sau đó bạn nói rằng bạn đang sử dụng const conn = mysql.createPool(/*...*/);
để khởi tạo conn
đó liên tục. Điều đó có nghĩa là conn
là một hồ bơi , không phải là một kết nối; không có gì ngạc nhiên khi nó không có changeUser
phương pháp.
Nếu bạn muốn thay đổi cơ sở dữ liệu, bạn cần thực hiện trên kết nối, không phải trên pool. Thay vì sử dụng viết tắt pool.query
biểu mẫu, bạn sẽ thực hiện pool.getConnection
/conn.changeUser
/conn.query
/conn.release
. Đầu tiên, hãy gọi biến pool
của bạn , không phải conn
:
const pool = mysql.createPool({
sau đó
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();
});
});
Điều đó nói rằng , nếu là tôi, tôi sẽ thấy thoải mái hơn khi có một nhóm kết nối cho mỗi cơ sở dữ liệu, hơn là một nhóm chung nơi bạn thay đổi cơ sở dữ liệu. Đó có thể là sự hoang tưởng thuần túy về phía tôi, nhưng đó là điều tôi muốn làm. Nhưng nếu bạn không sử dụng các nhóm riêng biệt, tôi khuyên bạn nên luôn thực hiện changeUser
để bạn chắc chắn mình đang sử dụng cơ sở dữ liệu nào hoặc kiểm tra kỹ lưỡng để xem những gì mysql
mô-đun phải xử lý điều này (và lặp lại thử nghiệm đó trên mỗi bản phát hành điểm của mô-đun, trừ khi người bảo trì ghi lại hành vi).