mysql - Node.js 连接到 mysql 数据库回调函数未执行
问题描述
我正在尝试将我的 node.js 应用程序连接到 mySQL 数据库,但似乎con.connect()
并con.query()
没有执行的回调函数。这是我的代码的连接部分:
const mysql = require('mysql');
const con = mysql.createConnection({
host: "localhost",
user: "user",
password: "pass",
database: "db",
});
app.get('/timetracking/dbTest', (req, res) => {
var error1;
var r;
con.connect(function(err){
s = 3;
res.send(err);
});
var s = 1;
con.query("SELECT * FROM Employee", function (err, result, fields) {
error1 = err;
res.send("yes");
r = result;
s = 2;
});
if (error1) res.send(error1 + "fail");
else res.send(r + "ok" + s);
});
该应用程序正常启动,我可以在浏览器中查看该站点,但我得到的结果是“undefinedok1”。这意味着发送变量的值不会在回调函数中改变。安装了 mysql 模块。此外,如果我输入数据库用户的无效密码,我不会收到任何错误消息。我无法想象他们为什么不改变。
解决方案
回调代码与您的方法的其余部分异步运行。您需要在每个连续的回调中运行代码,或者使用 async/await 或 Promise。
使用现有代码进行最简单的调整(徒手,可能有语法错误):
app.get('/timetracking/dbTest', (req, res) => {
var error1;
var r;
con.connect(function(err){
s = 3;
if (err) {
return res.send(err);
}
var s = 1;
con.query("SELECT * FROM Employee", function (err, result, fields) {
error1 = err;
r = result;
s = 2;
if (error1) res.send(error1 + "fail");
else res.send(r + "ok" + s);
});
});
});
推荐阅读
- c++ - for循环后的C++代码不执行
- reactjs - 标记列表在 Andriod 上而不是在 ios 上呈现
- python-3.x - 我正在尝试使用随机让敌人移动,有谁知道为什么敌人不移动?
- javascript - 如何在 JS 中获取 AWS 秘密值?
- sql - 在 SQL 中选择带有破折号的子字符串
- typo3 - 在 TYPO3 9.5 LTS / Extbase 中扩展存储库
- c++ - Mac OS Visual Studio Code C++ Opengl Glad Glew
- excel - MATCH 和 INDEX 返回索引号 2 Excel
- r - 删除列中的 acsii 问题
- delphi - 如果列名包含特定文本,如何更改 cxGrid 中所有列的颜色