【发布时间】:2021-04-02 08:46:56
【问题描述】:
我正在学习如何在 Node 中使用 MySQL,这很痛苦。
npm 包是“mysql”。
我正在制作一个遵循 OOP 原则的应用程序,并且我正在尝试制作一个独立的类来处理我的数据库请求。我遇到的问题是我无法断开与数据库的连接,因为 connection.end() 或 connection.drop() 等方法即使将它们包装在 .then 中也无法正常工作
它的外观如下:
class DB {
constructor(dbname, dbpassword) {
this.dbname = dbname;
this.dbpassword = dbpassword;
}
connection() {
return new Promise((resolve, reject) => {
resolve(mysql.createConnection({
host: "localhost",
user: "root",
password: this.dbpassword,
database: this.dbname,
}))
})
}
connect() {
this.connection().then(res => {
res.connect(function (err) {
if (err) throw err;
console.log(res.state, "connected")
})
})
}
dropConnection() {
this.connection().then(res => {
res.end(); console.log(res.state, 'connection dropped');
})
}
}
由于某种原因,我无法按照我的意愿断开连接。方法res.end() 不起作用。
我只想知道是否:
a)我通过尝试将所有内容放在一个类中并按方法调用我的操作方法来做正确的事情(我正在尝试遵循 OOP 原则,因为我可能有多个数据库将执行几乎相似的任务)。
b) 我的代码有问题,我看不到。
【问题讨论】:
-
每次调用
connection()都会创建一个新连接。所以你调用connect(),然后你建立一个新的连接,然后做一些事情。然后你调用dropConnection(),它也调用connection()并建立第二个连接,然后你关闭第二个连接 -
我的第一反应是,当您创建连接时,将其存储在类实例中。重复调用
connect应该返回相同的连接。当您调用 dropConnection 时,请关闭连接(如果存在)并将其清空。否则,什么都不做 -
谢谢@Taplar!您将如何将其存储在类实例中?能详细点吗?
标签: javascript mysql node.js oop npm