首页 > 解决方案 > 我需要在我的 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;

标签: mysqlnode.js

解决方案


正如乔治评论的那样,你真的不需要在这里回报承诺。

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 对如何使用该模块有很好的文档。你可以在这里参考更多


推荐阅读