mysql - 我需要在我的 MySQL 语句中做出承诺吗?
问题描述
下面是我的 Node.js 应用程序中的 MySQL 语句。我在 MySQL 函数中使用了一个 Promise 来让 API 端点工作。这是 Node.js 和 MySQL 的典型模式吗?
const express = require('express');
const app = express();
app.use(express.static('client'));
const config = require('./config')
var mysql = require('mysql');
var con = mysql.createConnection({
host: config.HOST,
user: config.USER,
password: config.PASSWORD,
database: config.DATABASE
});
function GetConsumers(req, res) {
return new Promise(function (resolve, reject) {
con.connect(function (err) {
if (err) throw err;
con.query("SELECT * FROM " + config.DATABASE + ".Contracts", function (err, result, fields) {
if (err) throw err;
//console.log(result);
resolve(result);
});
});
}).then(rows => res.send(rows));
}
app.get('/consumers', GetConsumers);
module.exports = app;
解决方案
正如乔治评论的那样,你真的不需要在这里回报承诺。
function GetConsumers(req, res) {
con.connect(function (err) {
if (err) {
res.send(err)
};
con.query("SELECT * FROM " + config.DATABASE + ".Contracts", function (err, result, fields) {
if (err) {
res.send(err)
};
//console.log(result);
res.send(result)
});
});
}
如果你真的想使用 Promise,捕获异常总是一个好习惯。
function GetConsumers(req, res) {
return new Promise(function (resolve, reject) {
con.connect(function (err) {
if (err){
reject(err);
}
con.query("SELECT * FROM " + config.DATABASE + ".Contracts",
function (err, result, fields) {
if (err){
reject(err);
}
//console.log(result);
resolve(result);
});
});
})
}
在任何你想要的地方调用 GetConsumers 函数。
GetConsumers(req,res).then(rows => res.send(rows))
}).catch(err =>{
console.log("Handle your error here");
res.send("error")
})
Mysql npm 对如何使用该模块有很好的文档。你可以在这里参考更多
推荐阅读
- python - Python 模块已安装,并且在正确的站点包中,但仍未找到。知道如何解决这个问题吗?
- javascript - 已禁用但也已检查
- java - 使用适当的数据类型定义一个包含所有必需实例变量的类 Rectangle
- palantir-foundry - 如何在 Foundry Code Workbooks 中将字符串列(具有 4 位年份值)转换为 DATE 类型?
- python - 将多类分类器变成分层多类分类器
- arrays - 在 Julia 的数组中创建一个填充的矩形
- c++ - 如何在 c++11 中使用 make_unique?
- python - 如何将多记录多行 JSON 转换为 AWS Athena 的每记录 JSON 单行?
- python - Python Kafka消费者从一开始就没有收到消息?
- macos - 将文本复制到剪贴板时,macOS 会更改文本